为什么oracle没有主键的自动增量功能?

Jug*_*hah 15 oracle

有人可以启发为什么oracle不支持主键的自动增量功能?

我知道在序列和触发器的帮助下可以实现相同的功能,但为什么oracle没有引入autoincrement关键字,它将在内部创建一个序列和一个触发器.我打赌oracle中的人肯定会想到这个.必须有一些理由不提供此功能.有什么想法吗?

Gar*_*ers 15

它可能只是术语.'AUTOINCREMENT'意味着记录'103'将在记录'102'和'104'之间创建.在集群环境中,序列不一定是这种情况.一个节点可以插入"100","101","102"而另一个节点插入"110","111","112",因此记录"乱序".[当然,术语'序列'具有相同的含义.]

如果您选择不遵循序列模型,则会引入锁定和序列化问题.在确定下一个值是什么之前,您是否强制插入等待另一个插入的提交/回滚,或者您是否接受,如果事务回滚,则会在键中产生间隙.

然后就是如果有人想要在表中插入具有该字段的特定值的行(即允许它,或者它是否像DEFAULT一样工作)或者有人试图更新它时,会出现什么问题.如果有人插入'101',自动增量是否会'跳'到'102',或者您是否有尝试重复值的风险.

它可能会影响它们的IMP实用程序和直接路径写入以及向后兼容性.

我不是说不能这样做.但我怀疑最终有人看过它并决定他们可以在其他地方更好地度过开发时间.


编辑添加:

在Oracle 12.1中,添加了对IDENTITY列的支持.

"对于每个后续的INSERT语句,将为序列生成器分配一个递增或递减的整数值.您可以使用identity_options子句配置序列生成器."

https://docs.oracle.com/database/121/SQLRF/statements_7002.htm#CJAHJHJC


Pav*_*aev 5

因为它有序列,可以做一切自动增量,然后一些.


ajh*_*138 5

在各个数据库阵营之间,这已经成为争论的焦点.对于像Oracle一样精心打造的数据库系统,它仍然让我觉得它需要如此多的代码和工作来启用这个常用且有价值的功能.

我建议您在工具箱中添加一些增量主键构建器/功能/工具,并将其用于Oracle工作.并写下你的国会议员并告诉他他们需要从GUI或使用单行SQL提供这个功能有多糟糕!

  • 但是,除了自动增量之外,您还必须添加主键方面.使用MS-SQL,您可以使用一个语句(或几次鼠标单击)完成这两项操作.我的观点是在MS-SQL中它更容易. (4认同)