db2的sequence会产生并发操作的问题吗?(高分求助!急~~~~~~在线等待)

时间:2021-09-04 07:57:35
我的一个bs的程序用的是db2的数据库,表的主键建成identity自增长型,在导入数据的时候会有一些限制,因此我想建立一个sequence,插入数据的主键从sequence中查找.目前有一个问题是:据说有些数据库sequence是跟session有关的,也就是说有多个连接的时候,sequence的值可能会产生冲突.
不知道db2的sequence是什么机制,应该和连接没有关系吧?是不是类似于程序中的全局变量,只会存在一个值,不会说多个用户同时insert的时候,产生主键冲突吧?

6 个解决方案

#1


不会有冲突的,

#2


怎么木有人回答呢~~~~~~~~~~~~~~~~~~

#3


提示回复了2条。俺咋一个也看不到呢!崩溃崩溃

#4


不会有冲突,sequence 就是用来解决主键冲突问题的。任何进程只要执行"nextval for sequencename"成功,sequence 就会增1.

#5


给你举个主键冲突的例子:
表T1中有主键ID,会有三个进程P1,P2,P3往T1中插入数据.三个进程生成主键的过程是取道T1中的最大值,然后增1,然后插入。如果某一时间P1,P2,P3都取道同样的ID然后加一,再插入,这时他们将要插入的三条记录都有相同的主键,所以就会插不进去,主键冲突发生。有了Sequence后这三个进程都是用nextval for s_T1(T1的sequence的名字)
而sequence的特性是每执行nextval for sequencename都会加一,所以不会有主键冲突。

#6


楼上说的对,用sequencename,在db2中是不会有问题的。

另外,你说的和session有关的sequencename,是什么数据库,我很好奇,想知道一下。

#1


不会有冲突的,

#2


怎么木有人回答呢~~~~~~~~~~~~~~~~~~

#3


提示回复了2条。俺咋一个也看不到呢!崩溃崩溃

#4


不会有冲突,sequence 就是用来解决主键冲突问题的。任何进程只要执行"nextval for sequencename"成功,sequence 就会增1.

#5


给你举个主键冲突的例子:
表T1中有主键ID,会有三个进程P1,P2,P3往T1中插入数据.三个进程生成主键的过程是取道T1中的最大值,然后增1,然后插入。如果某一时间P1,P2,P3都取道同样的ID然后加一,再插入,这时他们将要插入的三条记录都有相同的主键,所以就会插不进去,主键冲突发生。有了Sequence后这三个进程都是用nextval for s_T1(T1的sequence的名字)
而sequence的特性是每执行nextval for sequencename都会加一,所以不会有主键冲突。

#6


楼上说的对,用sequencename,在db2中是不会有问题的。

另外,你说的和session有关的sequencename,是什么数据库,我很好奇,想知道一下。