【发布时间】:2015-03-08 05:05:06
【问题描述】:
我不完全明白Oracle的sequence和MySql的auto_increment的区别。
我是一个mysql人,但对oracle一无所知。我希望有人可以为我快速了解这一点。
【问题讨论】:
-
一个序列更像是一个规则而不是一个主键列
-
快速:有一些非常显着的差异:AUTO_INCREMENT 绑定到单个表中的列,每个表只有一个。 Oracle SEQUENCE 不是。在数据库重新启动时,对于 InnoDB 表,AUTO_INCREMENT 被重置为最高列值。 Oracle SEQUENCE 不是。 Oracle SEQUENCE 对象是一个完全独立的对象,专为生成唯一值而设计,具有低争用/高并发性。 (确实,我们可以使用 SEQUENCE 和 BEFORE INSERT 触发器模拟 MySQL AUTO_INCREMENT,但“最终”,Oracle SEQUENCE 与 AUTO_INCREMENT 几乎没有相似之处。
-
如果问题是:“我们可以在 Oracle 中模拟 MySQL 风格的 AUTO_INCREMENT 吗?”这个问题的答案是肯定的。如果问题是关于差异... Oracle 序列:可以有下限和上限;增量可以有负值;可以换行(达到上限后,重新开始指定的下限);可以使用 SELECT 语句检索新值,不需要 INSERT;单个序列可以被多种不同的触发器、函数、程序使用;可以独立于任何表删除/重新创建; SEQUENCE 的值在数据库重启等期间保留。