为什么即使有主键我们也会创建一个序列?
答案 0 :(得分:44)
主键是表格中的一列。
主键需要一个唯一值,它需要来自某个地方。
序列是某些数据库产品的一项功能,它只创建唯一值。它只是增加一个值并返回它。它的特殊之处在于:没有事务隔离,因此多个事务不能获得相同的值,增量也不会回滚。没有数据库序列,很难生成唯一的递增数字。
其他数据库产品支持使用递增数字自动初始化的列。
还有其他方法可以为主键创建唯一值,例如Guids。
答案 1 :(得分:7)
主键(在技术术语中)仅仅是一个强制唯一性(以及加快查询性能)的索引。那里有一些语义信息是行描述的实体的“关键”,但就是这样。
序列完全是一个不同的实体;它与表分开存在(就像存储过程一样),可以调用它来产生序号。
这两者经常一起使用,为没有合理“本机”密钥的实体生成自动主键。但它们是两个独立的概念;您可以拥有在插入过程中显式填充主键的表,并且您可以使用用于填充非PK列的序列(甚至在存储过程中强制使用,与插入记录不同)。
答案 2 :(得分:6)
序列将允许您使用唯一的序列号填充主键。
它与serial
或auto_incremement
主键的区别在于:
这是一个实际的数据库对象(您需要创建它):
sql> create sequence NAME_OF_YOUR_SEQUENCE;
您可以为其分配独立权限给不同的数据库用户:
sql> grant select on NAME_OF_YOUR_SEQUENCE to NAME_OF_YOUR_USER;
您可以使用具有不同数字的唯一数字(不仅仅是一个)。假设您有四个带有数字主键的表,并且您希望这四个表中包含唯一的数字。您可以使用序列,而不必担心实施锁定机制来“手动”执行。
您可以使用alter sequence
您可以循环显示其数字
sql> create sequence NAME_OF_YOUR_SEQUENCE maxvalue 1500 cycle;