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

标签 oracle

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

8年前关闭。




Improve this question




有人能解释为什么oracle不支持主键的自动增量功能吗?

我知道在序列和触发器的帮助下可以实现相同的功能,但是为什么 oracle 没有引入 autoincrement 关键字来在内部创建序列和触发器。我敢打赌,oracle 的人肯定会考虑过这个问题。不提供这个功能肯定是有原因的。有什么想法吗?

最佳答案

它可能只是术语。
'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

关于oracle - 为什么oracle没有主键的自增功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1204372/

相关文章:

linux - 在 Linux 6 中运行 ./runInsaller for Oracle 11g 安装无法使用命令执行自动检查显示颜色

sql - 如何从shell提示符将oracle sql脚本文件的参数传递给sqlplus?

sql - 甲骨文 : min max values within a repeating group

sql-server - 不带 Order By 子句的 SQL Select 语句的顺序

java - 何时调用 oracle.net.ns.Packet.recieve() 方法?

sql - SQL中多对多的解析

c# - Oracle 数据访问 FileNotFound : Oracle. DataAccess.Common.Configuration.Section.xsd

database - 具有 where 子句行为的分层查询 "START WITH"

windows - 环境变量 'ORACLE_UNQNAME' 的 Oracle 问题

sql - 如何从oracle中的To_CHAR获取月份?