日期:2014-05-17  浏览次数:20862 次

Oracle 中的sequence
我在C#代码里使用多个线程向一个表中插入数据,插入的ID用sequence自动生成,有没有什么办法可以让一个线程用完这个序列后再转让给另一个线程使用?主要针对sequence,不在C#代码里用锁!

就是说在oracle中可不可以在有人使用这个序列的时候给一个标记不让别人使用?
oracle

------解决方案--------------------
不需要,sequence在多线程调用时依然可以保证产生的值唯一。

如果是想让生成的值连续,才需要用程序自行实现。
------解决方案--------------------
sequence 唯一
------解决方案--------------------
新手,同来学习。
------解决方案--------------------
oracle的sequence总是在数据库中生成唯一值,即使当多个用户并发地引用同一sequence时也没有可察觉的等待或锁定。当多个用户使用 NEXTVAL 来增长序列时,每个用户生成一个其他用户不可见的唯一值。当多个用户并发地增加同一序列时,每个用户看到的值是有差异的。例如,一个用户可能从一个序列生成一组值,如 1,3,5和 6,而另一个用户并发地从同一序列生成值2,4,7和8。希望对你有帮助...
------解决方案--------------------
非要这样的话可以做两个sequence,把他们的范围错开
------解决方案--------------------
引用:
Quote: 引用:

不需要,sequence在多线程调用时依然可以保证产生的值唯一。

如果是想让生成的值连续,才需要用程序自行实现。


引用:
oracle的sequence总是在数据库中生成唯一值,即使当多个用户并发地引用:
非要这样的话可以做两个sequence,把他们的范围错开

当然也不能保证

2.自己创建序列
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

不需要,sequence在多线程调用时依然可以保证产生的值唯一。

如果是想让生成的值连续,才需要用程序自行实现。


引用:
oracle的sequence总是在数据库中生成唯一值,即使当多个用户并发地引用:
非要这样的话可以做两个sequence,把他们的范围错开

当然也不能保证

2.自己创建序列

建个triger自己来控制自增