Sql 在数据库中使用序列的原因是什么?
我刚接触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”) 设置主键的顺序 为什么主键的值使用序列?实现了哪些目标: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
- 提高性能
- 添加约束和一些检查
- 限制ID整数值的可能值范围,为什么这样做
- 为什么从1开始计数
- SQL使用指南:序列号生成器
然而,同样的效果可以通过序列和触发器实现 历史上,有两个主要原因
- 避免在大型表中使用更新级联时出现性能问题
- 避免宽、自然键上的连接出现性能问题
- 您通常需要比使用精心选择的自然关键点和更新级联更多的连接。您可能需要如此多的连接,以至于连接比磁盘读取成本更高
- 当您有20或30个连接时,更容易在连接中迷失方向
- 行很难很快理解。(读{1,7,13,255,438}的行比读{1,library,checkout,255,'一本书是你的朋友'的行更难理解。)
- 通常,数据库设计器会指定一个ID号作为主键,但不会设置任何其他唯一约束。这使得ID号成为行标识符,而不是该行所代表的真实世界的标识符。这可能是个大问题