这篇文章主要介绍PostgreSQL中三种自增列序列,序列,身份的区别有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
这三个对象都可以实现自增,这里从如下几个维度来看看这几个对象有哪些不同,其中功能性上看,大部分特性都是一致的或者类似的。
1,在序列所有数据库中的性质都一样,它是跟具体的字段不是强绑定的,其特点是支持多个对个对象之间共享。
序列作为自增字段值的时候,对表的写入需要另外单独授权序列(批准使用> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -序列- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - create sequence  myschema.seq_1 INCREMENT  BY 1, MINVALUE 1, START WITH 1; create table  myschema.test_seq ( ,id int  not null  default nextval (& # 39; myschema.seq_1& # 39;), primary 键, ,name varchar (10) ); 隐式插入 insert into  myschema.test_seq (名字),values (& # 39; aaa # 39;); insert into  myschema.test_seq (名字),values (& # 39; bbb # 39;); insert into  myschema.test_seq (名字),values (& # 39; ccc # 39;); select *,得到myschema.test_seq; 显式插入 insert into  myschema.test_seq (id、名称),values (5 & # 39; ddd # 39;); select *,得到test_seq; 再次隐式插入 ——可以正常插入 insert into  myschema.test_seq (名字),values (& # 39; eee # 39;); ——插入失败,主键重复,因为序列自身是递增的,不会关心表中被显式插入的数据 insert into  myschema.test_seq (名字),values (& # 39; fff& # 39;); ——重置序列的最大值 select setval (& # 39; myschema.seq_1& # 39; (select 马克斯(id),得到myschema.test_seq)::长整型数字); ——事务回滚后,序列号并不会回滚 开始; insert into  myschema.test_seq (名字),values (& # 39; ggg& # 39;); 回滚; ——,truncate 表之后,序列不受影响 truncate table  myschema.test_seq; ——重置序列 ALTER SEQUENCE  myschema.seq_1 RESTART  WITH 1; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -系列- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - create table  myschema.test_serial ( ,id serial  primary 键, ,name varchar (100) ) select *,得到test_serial; insert into  myschema.test_serial(名字),values (& # 39; aaa # 39;); insert into  myschema.test_serial(名字),values (& # 39; bbb # 39;); insert into  myschema.test_serial(名字),values (& # 39; ccc # 39;); select *,得到myschema.test_serial; ——显式插入,可以执行 insert into  myschema.test_serial (id、名称),values (5 & # 39; ccc # 39;); ——再次隐式插入,第二次会报错,因为隐式插入的话,连环会基于显式插入之前的Id做自增,连续无法意识到当前已经存在的最大值 insert into  myschema.test_serial(名字),values (& # 39; xxx # 39;); insert into  myschema.test_serial(名字),values (& # 39;多# 39;); select *,得到myschema.test_serial; ——truncate table 后连续不会重置 truncate table  myschema.test_serial; insert into  myschema.test_serial(名字),values (& # 39; aaa # 39;); insert into  myschema.test_serial(名字),values (& # 39; bbb # 39;); insert into  myschema.test_serial(名字),values (& # 39; ccc # 39;); select *,得到myschema.test_serial; ——验证是否会随着事务一起回滚,结论:不会 开始; insert into  myschema.test_serial(名字),values (& # 39;多# 39;); 回滚; ——重置连续,需要注意的是重置的Id必须要大于相关表的字段最大Id,否则会产生重号 SELECT SETVAL ((SELECT pg_get_serial_sequence (& # 39; myschema.test_serial& # 39;,, & # 39; id # 39;)),, 1,,假); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -认同- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - drop table  myschema.test_identiy_1 create table  myschema.test_identiy_1 ( ,id int  generated always  as identity (cache 100年,START WITH 1, INCREMENT BY 1), primary key ,, ,name varchar (100) ); create table  myschema.test_identiy_2 ( ,id int  generated by  default as identity (cache 100年,START WITH 1, INCREMENT by 1), primary key ,, ,name varchar (100) ); insert into  myschema.test_identiy_1(名字),values (& # 39; aaa # 39;); insert into  myschema.test_identiy_1(名字),values (& # 39; bbb # 39;); insert into  myschema.test_identiy_1(名字),values (& # 39; ccc # 39;); insert into  myschema.test_identiy_2(名字),values (& # 39; aaa # 39;); insert into  myschema.test_identiy_2(名字),values (& # 39; bbb # 39;); insert into  myschema.test_identiy_2(名字),values (& # 39; ccc # 39;); select *,得到myschema.test_identiy_1; ——显式插入值,如果定义为generated always as 身份则不允许显式插入,除非增加overriding system value 提示 ——一旦提示了overriding system 价值,可以 null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null