Oracle 中的sequence

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

就是说在oracle中可不可以在有人使用这个序列的时候给一个标记不让别人使用?
...全文
156 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
邪神01 2013-10-12
  • 打赏
  • 举报
回复
sequence 唯一
  • 打赏
  • 举报
回复
引用 7 楼 mengwl1009 的回复:
[quote=引用 5 楼 n_e_e_d 的回复:] [quote=引用 1 楼 shiyiwan 的回复:] 不需要,sequence在多线程调用时依然可以保证产生的值唯一。 如果是想让生成的值连续,才需要用程序自行实现。
引用 4 楼 mengwl1009 的回复:
oracle的sequence总是在数据库中生成唯一值,即使当多个用户并发地引用同一sequence时也没有可察觉的等待或锁定。当多个用户使用 NEXTVAL 来增长序列时,每个用户生成一个其他用户不可见的唯一值。当多个用户并发地增加同一序列时,每个用户看到的值是有差异的。例如,一个用户可能从一个序列生成一组值,如 1,3,5和 6,而另一个用户并发地从同一序列生成值2,4,7和8。希望对你有帮助...
我是有两张主外键关系的表,我是想在主表插入数据后,再在从表里插入数据!如果只是执行这俩句的话,sequence的唯一到没事!我是考虑到假如有两个地方都在使用这个序列来向这俩张表里插入数据!我的sequence在向从表里插入数据的时候不就乱了吗?[/quote] oracle 的sequence本来就不能保证连续性: 1.设置了cache,然后由于某种原因缓存清空了,事先产生的序列号就不见了。 2.insert 一个sequence 10 然后rollback了,这个序列号也不见了,下一个序列号是11。 要想产生连续的序列号, 1.
引用 6 楼 gioh0022 的回复:
非要这样的话可以做两个sequence,把他们的范围错开
当然也不能保证 2.自己创建序列[/quote] 建个triger自己来控制自增
ora-0600 2013-10-12
  • 打赏
  • 举报
回复
引用 5 楼 n_e_e_d 的回复:
[quote=引用 1 楼 shiyiwan 的回复:] 不需要,sequence在多线程调用时依然可以保证产生的值唯一。 如果是想让生成的值连续,才需要用程序自行实现。
引用 4 楼 mengwl1009 的回复:
oracle的sequence总是在数据库中生成唯一值,即使当多个用户并发地引用同一sequence时也没有可察觉的等待或锁定。当多个用户使用 NEXTVAL 来增长序列时,每个用户生成一个其他用户不可见的唯一值。当多个用户并发地增加同一序列时,每个用户看到的值是有差异的。例如,一个用户可能从一个序列生成一组值,如 1,3,5和 6,而另一个用户并发地从同一序列生成值2,4,7和8。希望对你有帮助...
我是有两张主外键关系的表,我是想在主表插入数据后,再在从表里插入数据!如果只是执行这俩句的话,sequence的唯一到没事!我是考虑到假如有两个地方都在使用这个序列来向这俩张表里插入数据!我的sequence在向从表里插入数据的时候不就乱了吗?[/quote] oracle 的sequence本来就不能保证连续性: 1.设置了cache,然后由于某种原因缓存清空了,事先产生的序列号就不见了。 2.insert 一个sequence 10 然后rollback了,这个序列号也不见了,下一个序列号是11。 要想产生连续的序列号, 1.
引用 6 楼 gioh0022 的回复:
非要这样的话可以做两个sequence,把他们的范围错开
当然也不能保证 2.自己创建序列
  • 打赏
  • 举报
回复
非要这样的话可以做两个sequence,把他们的范围错开
n_e_e_d 2013-10-12
  • 打赏
  • 举报
回复
引用 1 楼 shiyiwan 的回复:
不需要,sequence在多线程调用时依然可以保证产生的值唯一。 如果是想让生成的值连续,才需要用程序自行实现。
引用 4 楼 mengwl1009 的回复:
oracle的sequence总是在数据库中生成唯一值,即使当多个用户并发地引用同一sequence时也没有可察觉的等待或锁定。当多个用户使用 NEXTVAL 来增长序列时,每个用户生成一个其他用户不可见的唯一值。当多个用户并发地增加同一序列时,每个用户看到的值是有差异的。例如,一个用户可能从一个序列生成一组值,如 1,3,5和 6,而另一个用户并发地从同一序列生成值2,4,7和8。希望对你有帮助...
我是有两张主外键关系的表,我是想在主表插入数据后,再在从表里插入数据!如果只是执行这俩句的话,sequence的唯一到没事!我是考虑到假如有两个地方都在使用这个序列来向这俩张表里插入数据!我的sequence在向从表里插入数据的时候不就乱了吗?
ora-0600 2013-10-12
  • 打赏
  • 举报
回复
oracle的sequence总是在数据库中生成唯一值,即使当多个用户并发地引用同一sequence时也没有可察觉的等待或锁定。当多个用户使用 NEXTVAL 来增长序列时,每个用户生成一个其他用户不可见的唯一值。当多个用户并发地增加同一序列时,每个用户看到的值是有差异的。例如,一个用户可能从一个序列生成一组值,如 1,3,5和 6,而另一个用户并发地从同一序列生成值2,4,7和8。希望对你有帮助...
木丂 2013-10-12
  • 打赏
  • 举报
回复
新手,同来学习。
shiyiwan 2013-10-11
  • 打赏
  • 举报
回复
不需要,sequence在多线程调用时依然可以保证产生的值唯一。 如果是想让生成的值连续,才需要用程序自行实现。

17,078

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧