这三个对象可以实现自我增值。在这里,我们将从以下几个方面来看这些对象之间的差异,其中大多数功能在功能上是一致或相似的。
1.所有数据库中序列的性质都是相同的。它并不强烈地绑定到特定的字段,它的特点是支持几对对象之间的共享。
当sequence用作自增字段值时,表的写入需要由sequence单独授权(在sequence test _ old _ id _ seq上授权使用;)
序列型字段表,当使用create table new _ table类似old _ table时,新表的自添加字段将长期指向原表的序列
结论:
对于自加字段,顺序不适合作为“自加栏”,是没有特殊要求的最后选择。
2.身份的本质是新添加的,以与标准sql中的语法兼容,它修复了一些串行缺陷,如无法通过alter table添加或删除串行字段
2.1身份被定义为默认生成,因为身份也允许显式插入。
2.2身份被定义为始终身份,覆盖系统值也可以显式不插入
结论:
Identity是serial的“增强版”,更适合作为“自加栏”使用。
3.序列、序列和标识的共同缺点是,在显式插入后,自增量不能更新到表中的最大标识,这是再次显式插入时潜在的自增量字段标识冲突
结论:
自增列必须在显式插入后手动重置为表的最大标识。
4.自加字段的更新没有仔细研究。相对来说,显式插入自加列是一个常规操作。只要自增列的更新操作没有问题,一般是不做的。
原稿,懒得整理,不涉及原理的东西,开始重新尝试理解。
-序列-
创建序列myschema.seq_1增量1最小值1从1开始;
创建表myschema.test_seq
(
id int不为null默认nextval('myschema.seq_1 ')主键,
姓名varchar(10)
);
隐式插入
插入myschema.test_seq (name)值(' AAA ');
插入myschema.test_seq (name)值(' BBB ');
插入myschema.test_seq (name)值(' CCC ');
从myschema.test_seq中选择*
显式插入
插入myschema.test_seq (id,name)值(5,' DDD ');
从test_seq中选择*
再次隐式插入
-可以正常插入
插入myschema.test_seq (name)值(' eee ');
-插入失败,主键重复,因为序列本身是增量的,不会关心表中显式插入的数据
插入myschema.test_seq (name)值(' fff ');
-重置序列的最大值
选择setval('myschema.seq_1 ',(从myschema.test_seq中选择max(id): BIGINT);
-事务回滚后,序列号不会回滚
开始;
插入myschema.test_seq (name)值(' GGG ');