我想知道何时选择序列更好,何时使用串口更好.
我想要的是在插入后使用返回最后一个值
SELECT LASTVAL();
我读了这个问题 PostgreSQL Autoincrement
我从来没有使用过串口.
查看关于序列与序列的好答案
序列将只创建唯一数字序列.它不是数据类型.这是一个序列.例如:
create sequence testing1; select nextval('testing1'); -- 1 select nextval('testing1'); -- 2
你可以在多个地方使用相同的序列,如下所示:
create sequence testing1; create table table1(id int not null default nextval('testing1'), firstname varchar(20)); create table table2(id int not null default nextval('testing1'), firstname varchar(20)); insert into table1 (firstname) values ('tom'), ('henry'); insert into table2 (firstname) values ('tom'), ('henry'); select * from table1; | id | firstname | |----|-----------| | 1 | tom | | 2 | henry | select * from table2; | id | firstname | |----|-----------| | 3 | tom | | 4 | henry |
Serial是一种伪数据类型.它将创建序列对象.让我们来看一个直截了当的表(类似于你将在链接中看到的表).
create table test(field1 serial);
这将导致序列与表一起创建.序列名称的命名法是__seq.以上内容相当于:
create sequence test_field1_seq; create table test(field1 int not null default nextval('test_field1_seq'));
另见:http://www.postgresql.org/docs/9.3/static/datatype-numeric.html
您可以重用串行数据类型自动创建的序列,也可以选择每个表使用一个序列/序列.
create table table3(id serial, firstname varchar(20)); create table table4(id int not null default nextval('table3_id_seq'), firstname varchar(20));
(这里的风险是,如果删除table3并继续使用table3的序列,我们将收到错误)
create table table5(id serial, firstname varchar(20)); insert into table3 (firstname) values ('tom'), ('henry'); insert into table4 (firstname) values ('tom'), ('henry'); insert into table5 (firstname) values ('tom'), ('henry'); select * from table3; | id | firstname | |----|-----------| | 1 | tom | | 2 | henry | select * from table4; -- this uses sequence created in table3 | id | firstname | |----|-----------| | 3 | tom | | 4 | henry | select * from table5; | id | firstname | |----|-----------| | 1 | tom | | 2 | henry |
请随意尝试一个示例:http://sqlfiddle.com/#!15/074ac/1