gpt4 book ai didi

sql - Postgresql 序列与串行

转载 作者:行者123 更新时间:2023-11-29 11:10:17 27 4
gpt4 key购买 nike

我在想什么时候选择sequence比较好,什么时候比较好使用串行。

我想要的是在使用插入后返回最后一个值

SELECT LASTVAL();

我读了这个问题 PostgreSQL Autoincrement

我以前从没用过serial。

最佳答案

查看关于 Sequence vs. Serial 的一个不错的答案.

Sequence 只会创建唯一数字的序列。它不是数据类型。它是一个序列。例如:

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);

这将导致与表格一起创建序列。序列名称的命名法是 <tablename>_<fieldname>_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

关于sql - Postgresql 序列与串行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34034702/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com