👨‍⚕ 主页: gis分享者
👨‍⚕ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅!
👨‍⚕ 收录于专栏:数据库工程师



一、🌳概念:

	 显示插入---插入的时候指定id
     隐式插入---插入的时候不指定id

PostgreSQL 有三种自增方式 sequence,serial,identity

二、🌳对比:

2.1 🌲相同点

(1)三种方法本质上都是序列,因此大多数特性都是相同的均可通过 pg_sequences 视图查询信息显式插入/导入数据后,序列最大值不会自动更新
(2)可以手动设置序列值
(3)truncate table 序列值不会重置
(4)回滚事务序列值不会回退

2.2 🌲不同点

在这里插入图片描述

1,sequence在所有数据库中的性质都一样,它是跟具体的字段不是强绑定的,其特点是支持多个对个对象之间共享。
 sequence作为自增字段值的时候,对表的写入需要另外单独授权sequence(GRANT USAGE ON SEQUENCE
test_old_id_seq;)  sequence类型的字段表,在使用CREATE TABLE new_table LIKE
old_table的时候,新表的自增字段会已久指向原始表的sequence
结论:对于自增字段,无特殊需求的情况下,sequence不适合作为“自增列”,作为最最次选。

2,identity本质是为了兼容标准sql中的语法而新加的,修复了一些serial的缺陷,比如无法通过alter
table的方式实现增加或者删除serial字段
  2.1 identity定义成generated by default as identity也允许显式插入,
  2.2 identity定义成always as identity,加上overriding system value也可以显式不插入 结论:identity是serial的“增强版”,更适合作为“自增列”使用。

3,sequence,serial,identity共同的缺点是在显式插入之后,无法将自增值更新为表中的最大Id,这一点再显式插入的情况下是潜在自增字段Id冲突的
结论:自增列在显式插入之后,一定要手动重置为表的最大Id。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐