即使有主键,我们为什么要创建一个序列?什么是序列(数据库)?我们什么时候需要它?
回答
主键周期表中的一列。
主键需要一个独特的值,它需要来自某个地方。
该序列是一些数据库产品的一项功能,它只创建独特的值。它只是增加一个值并返回它。关于它的特别之处是:没有事务隔离,所以多个事务不能获得相同的值,增量也不会回滚。没有数据库序列,很难生成唯一的递增数字。
其他数据库产品支持使用递增数字自动初始化的列。
还有其他方法可以为主键创建唯一值,例如Guids。
序列将允许您使用唯一序列号填充主键。
这是不同的从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;
那么序列与auto_increment主键有什么不同呢?或者这实际上是一个序列? – Blaise 2018-02-01 09:22:39
查看我更新的答案@Blaise – 2018-02-01 10:54:59
主键(在技术上)仅仅是一个强制唯一性(以及加快查询性能)的索引。这里有一些语义信息是行描述的实体的“关键”,但就是这样。
一个序列完全是一个不同的实体;它与表格分开存在(就像存储过程一样),并且可以调用它来产生连续的数字。
这两者经常一起使用,为没有明智的“原生”键的实体生成自动主键。但他们是两个不同的概念;您可以在插入过程中使用主键明确填充的表格,并且可以使用用于填充非PK列的序列(甚至在存储过程中强制使用,与插入记录不同)。
- 1. 什么是http标题,什么时候需要指定它们
- 2. MSBuild:它是什么,我什么时候需要它?
- 3. 什么是仿函数,为什么我们需要它们?
- 4. Application.DoEvents,什么时候需要,什么时候不需要?
- 5. IfModule:我们什么时候需要指定它?
- 6. 什么是Scala中的清单,什么时候需要它?
- 7. 什么是BigInteger,我们什么时候可以使用它?
- 8. 我们什么时候需要“需要'rubygems'”?
- 9. 我什么时候需要分配财产,什么时候不需要?
- 10. 什么是服务总线,我什么时候需要一个?
- 11. Windows上的Spark - 什么是winutils,为什么我们需要它?
- 12. 什么是伴侣对象,为什么我们需要它?
- 13. Maven快照究竟是什么,为什么我们需要它?
- 14. 什么时候需要curl_global_init()?
- 15. 什么时候需要TransactionScopeOption.Supress?
- 16. 什么时候需要“javascript:...”?
- 17. 什么时候需要NSCopying?
- 18. 什么时候需要pygame.init()?
- 19. 我们什么时候需要一个默认构造函数?
- 20. 装配需要什么?为什么我们使用它们?
- 21. 为什么我们需要数据库表中的审核列?
- 22. 我什么时候需要更改serialVersionUID?
- 23. 我什么时候需要使用“android:id”?
- 24. 我什么时候需要声明session_start();?
- 25. 我什么时候需要CAPABILITY_NAMED_IAM
- 26. 我什么时候需要使用@WebServiceRef?
- 27. 我什么时候需要InamingContainer接口?
- 28. 我什么时候需要充气器?
- 29. 我什么时候需要session_cache_expire和session_cache_limiter?
- 30. 线程名称 - 你什么时候需要了解它们?
如果没有事务隔离,那么它如何被使用? – rapt 2011-10-25 00:10:31
生成ID没有事务隔离。它总是返回序列的下一个值。事务隔离意味着并行事务要么获得相同的值,要么需要等待另一个事务提交才能获得下一个值。这既不需要也不有用。 – 2011-10-26 11:18:37