有些人不喜欢在Oracle序列。为什么?我认为他们是非常容易使用和这么好的。您可以选择,插入,更新使用它们,...

有帮助吗?

解决方案

我不知道。我要指出的是,有时候人们恨他们不明白。

序列可用于生成唯一ID非常重要的。从概念上讲,这是非常有用的生成不依赖于一个表中的内容的ID的方法。你不需要为了生成一个唯一的号码来锁定表。

序列也可以是用于产生跨需要是唯一的多个表的键是有用的。举例来说,如果我有进入系统的新项目,我想提出一个排几个表一次,我可以抓住从序列的ID,当我插入到任意数量的表被重新使用。如果处理得当,我知道该ID将用一个值已经在表中没有发生冲突,每一行都具有相同的ID。

我假设这些事情也是可能通过自动递增列,以及。

其他提示

要概括起来讲,我喜欢序列,但我想列的自动增量关键字甚至更多。

由于我已经被迁移的DBA数据库,移动所有的对象和数据,并错误地重新创建序列,从0欢闹重新启动它咬伤几次随之而来...

另外序列可以抛出一个关于RAC的循环,在那里,除非你指定你希望他们严格的增加,你会得到唯一的数字了出来 - 在严格递增的顺序,但不一定是(这是因为,为了以避免为每sequence.nextval呼叫节点间通信,每个节点得到即将到来的数字的独立的小片)。在各种肆虐 “选择最大值(sequence_id)” 的查询。

哦,AUTOINCREMENT关键字是好的,但是这只是语法糖 - 另外两个问题是相当严重的“陷阱”

我以前喜欢自动增量列(ALA的MySQL,SQL Server和其他人),直到我得到大举进入JPA。在这一点上自动递增字段的弱点我变得很明显:你必须插入之前,你可以得到一个ID。这与保持对象之间的关系的问题。

在JPA使用Oracle时,只要你做entityManger.persist(object)它选择下一序列值,并将其指定为ID,而与不发生,直到提交后自动递增列。很大的区别。

他们是有点困难的工作,虽然,我的猜测是,为什么人们不喜欢他们(或他们看不到的优点相比,自动递增字段)。

的另一个问题序列是,他们只是松散排序的,很多人都希望绝对顺序。我认为最大的缺点(我可以看到反正)。

由于它们更难比在IBM的Informix动态服务器SERIAL列使用。

有些同事不喜欢他们,因为这是很难记住样板建立一个普通的自动增量场。

幸运SQL Developer将填写样板给你,所以现在的问题不是那么糟糕。

我不讨厌的序列。序列是太棒了。爱他们!

他们是在分布式环境中的安全;它们可以被用来模拟在必要(与触发器),同时还让您获得ID事先自动增量场 - 当你准备的数据集加载到多个表这是伟大的,你想你插入前的ID

我在船上采取乔纳森·莱弗勒对自己的答案评论,但 - 我 - 一个单独的序列为您提供了ID生成与相对容易模仿的AUTOINCREMENT场工程的管制余额

与序列的一个问题是,如果你有多个工人写同一个表,所有获得从同一个序列的关键,其结果是将有索引块左右争夺,具有较高的机会,工人正在写相同的块(这意味着它们必须等待)。

一种解决方法是使用一个反向键索引。

另一种替代方法是创建一个由像一个键  :worker_number || nanoTime()|| RANDOM_NUMBER()

即东西是极有可能提供唯一的数字。 (例如大地被小行星击中比得到一个重复的数目更可能)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top