Database 什么是序列(数据库)?我们什么时候需要它?

Database 什么是序列(数据库)?我们什么时候需要它?,database,Database,为什么即使有主键,我们也要创建序列?序列将允许您使用唯一的序列化数字填充主键 它与串行或自动递增主键的不同之处在于: 它是一个实际的数据库对象(您需要创建它): sql>创建您的序列的序列名 您可以将独立权限分配给不同的数据库用户: sql>允许选择您的\u序列的\u名称\u来命名您的\u用户的\u 您可以使用具有在多个表(而不仅仅是一个表)中不同的唯一编号。假设您有四个带有数字主键的表,并且希望这四个表中的数字是唯一的。您可以使用一个序列来实现这一点,而不必担心实现锁定机制来“手动”实现 可

为什么即使有主键,我们也要创建序列?

序列将允许您使用唯一的序列化数字填充主键

它与
串行
自动递增
主键的不同之处在于:

  • 它是一个实际的数据库对象(您需要创建它):

    sql>创建您的序列的序列名

  • 您可以将独立权限分配给不同的数据库用户:

    sql>允许选择您的\u序列的\u名称\u来命名您的\u用户的\u

  • 您可以使用具有在多个表(而不仅仅是一个表)中不同的唯一编号。假设您有四个带有数字主键的表,并且希望这四个表中的数字是唯一的。您可以使用一个序列来实现这一点,而不必担心实现锁定机制来“手动”实现

  • 可以将其编号更改为所需的任何值

  • 你可以循环浏览它的编号

    sql>创建您的序列maxvalue 1500周期的序列名


主键是表中的一列

主键需要一个唯一的值,它需要来自某个地方

序列是某些数据库产品的一项功能,它只创建唯一的值。它只是增加一个值并返回它。它的特殊之处在于:没有事务隔离,因此多个事务不能获得相同的值,增量也不会回滚。没有数据库序列,很难生成唯一的递增数字

其他数据库产品支持使用递增数字自动初始化的列

还有其他方法可以为主键创建唯一值,例如guid。

主键(在技术术语中)只是一个强制唯一性(以及加快查询性能)的索引。有一些语义信息是行描述的实体的“键”,但仅此而已

序列是完全不同的实体;它与表分开存在(就像存储过程一样),可以调用它来生成序列号


这两种方法通常一起使用,为没有合理的“本机”键的实体生成自动主键。但它们是两个独立的概念;您可以使用在插入期间显式填充主键的表,也可以使用用于填充非PK列的序列(甚至在存储过程中强制使用,与插入记录不同)。

如果没有事务隔离,那么如何使用它呢?对于ID的生成没有事务隔离。它总是返回序列的下一个值。事务隔离意味着并行事务要么获得相同的值,要么需要等待另一个事务提交,然后才能获得下一个值。这既不是必需的,也不是有用的。它是如何处理特定记录的删除的?@Prashant:序列本身与记录完全无关。当你需要一个ID时,它只是一个递增的计数器。它甚至不知道这个ID的用途。它根本不“处理”记录的删除。那么序列与自动递增主键有何不同呢?或者这实际上是一个序列?