Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在数据库中使用序列的原因是什么?_Sql_Database_Hibernate_Relational Database - Fatal编程技术网

Sql 在数据库中使用序列的原因是什么?

Sql 在数据库中使用序列的原因是什么?,sql,database,hibernate,relational-database,Sql,Database,Hibernate,Relational Database,我刚接触DB/Hibernate,发现代码: @SequenceGenerator(name = "entSeq", allocationSize = 5, sequenceName = "CODE_SEQ") ... @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "entSeq") @SequenceGenerator(name=“entSeq”,allocationSize=5,sequ

我刚接触DB/Hibernate,发现代码:

@SequenceGenerator(name = "entSeq", allocationSize = 5, sequenceName = "CODE_SEQ") ... @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "entSeq") @SequenceGenerator(name=“entSeq”,allocationSize=5,sequenceName=“CODE_SEQ”) ... @身份证 @GeneratedValue(策略=GenerationType.SEQUENCE,generator=“entSeq”) 设置主键的顺序

为什么主键的值使用序列?实现了哪些目标:

  • 提高性能
  • 添加约束和一些检查
  • 限制ID整数值的可能值范围,为什么这样做
  • 为什么从1开始计数
我在以下内容中了解了语法和用法:

但没有找到我问题的答案

更新:

我喜欢阅读:

  • SQL使用指南:序列号生成器
其中显示,DB理论中存在如何为主键获取唯一ID的问题。这意味着我可以将插入到表中,而无需从我自己的表中为主键提供值:

INSERT INTO suppliers (supplier_id, supplier_name) VALUES (supplier_seq.nextval, 'Kraft Foods'); 插入到供应商中 (供应商id、供应商名称) 价值观 (供应商_seq.nextval,“卡夫食品”); 但是我希望这个特性必须出现在所有数据库中,而不强迫我提供主键值

我认为对吗

更新2:

回答为什么使用开头:

将序列添加到现有数据库时,此子句非常有用。当一个较旧的计划实施时 由应用程序使用,并且已经使用了此条款可以使用的合法范围中的一些值 用于跳过那些消耗的值。MINVALUE和MAXVALUE用于指定合法范围,但 START WITH将启动该范围内的序列使用,以便以前生成的值 不会再出现了

更新3:*序列*提供

您不能依赖所有数据库的自动生成密钥。与大多数其他数据库不同,Oracle不提供可用于生成顺序主键值的自动递增数据类型。

然而,同样的效果可以通过序列和触发器实现

历史上,有两个主要原因

  • 避免在大型表中使用更新级联时出现性能问题
  • 避免宽、自然键上的连接出现性能问题
Oracle甚至不支持更新级联,因此更新外键引用中使用的值比在其他平台上更麻烦

与20年前相比,考虑到同样大小的表,这些性能“问题”现在已经不那么严重了。(硬件现在快多了。)但我们现在似乎要处理比20年前大得多的桌子

这种性能调整有一些不良的副作用

  • 您通常需要比使用精心选择的自然关键点和更新级联更多的连接。您可能需要如此多的连接,以至于连接比磁盘读取成本更高
  • 当您有20或30个连接时,更容易在连接中迷失方向
  • 行很难很快理解。(读{1,7,13,255,438}的行比读{1,library,checkout,255,'一本书是你的朋友'的行更难理解。)
  • 通常,数据库设计器会指定一个ID号作为主键,但不会设置任何其他唯一约束。这使得ID号成为行标识符,而不是该行所代表的真实世界的标识符。这可能是个大问题

那么,为什么允许在数据库供应商之间移动数据库架构?这就是使用顺序主键值的原因?在DB viewer中看起来不错?@gavenkoa您的英语很差,请尝试使用翻译。