oracle,一个insert语句中调用序列的2次nextval,序列增长的问题。
insertintotablevalues(art_id.nextval,art_id.nextval);执行后插入的两个值是一样的,比如3,3;4,4;5,5……如果是...
insert into table values (art_id.nextval,art_id.nextval);
执行后插入的两个值是一样的,比如3,3;4,4;5,5……
如果是update语句也是这样的结果吗?
还有什么情况下调用nextval多次,而不会增长?
nextval在什么情况下增长? 展开
执行后插入的两个值是一样的,比如3,3;4,4;5,5……
如果是update语句也是这样的结果吗?
还有什么情况下调用nextval多次,而不会增长?
nextval在什么情况下增长? 展开
3个回答
展开全部
insert是插入一条记录,从无到有
update 是更新已经有的记录
如果你数据库有记录 1,2,3
前提主键没有唯一约束,如果你更新where 主键=3的,则不会出现第2条,如果你insert 3,那么自然会重复。
nextval是oracle自带的序列,这个和你什么时候插入记录毫无关系,只要调用了一次nextval,则oracle内部就会把对应这个名字的序列自增1,不管你有没有插入记录到表里,比如nextval是3,这时候没插入表,又取了一次,那么下次就是4了。nextval会直接返回一个自增的不重复的编号
你说的重复,要么是表里已经有了2,3,4记录,但序列从1开始,那么自然也会1,2,3,4这样取,因为序列和你的业务表毫无关系;要么是你代码有问题,比如你insert into table values (art_id.nextval,art_id.nextval);丢到了循环里,执行了N次,如果表没主键约束,自然就重复记录了。你可以排查下主键相同的2个记录,其他字段是否也相同,建议把代码里所有的insert语句都打印出来,这样在控制台里一目了然,哪些是该执行的,哪些是多余的,好定位问题。
update 是更新已经有的记录
如果你数据库有记录 1,2,3
前提主键没有唯一约束,如果你更新where 主键=3的,则不会出现第2条,如果你insert 3,那么自然会重复。
nextval是oracle自带的序列,这个和你什么时候插入记录毫无关系,只要调用了一次nextval,则oracle内部就会把对应这个名字的序列自增1,不管你有没有插入记录到表里,比如nextval是3,这时候没插入表,又取了一次,那么下次就是4了。nextval会直接返回一个自增的不重复的编号
你说的重复,要么是表里已经有了2,3,4记录,但序列从1开始,那么自然也会1,2,3,4这样取,因为序列和你的业务表毫无关系;要么是你代码有问题,比如你insert into table values (art_id.nextval,art_id.nextval);丢到了循环里,执行了N次,如果表没主键约束,自然就重复记录了。你可以排查下主键相同的2个记录,其他字段是否也相同,建议把代码里所有的insert语句都打印出来,这样在控制台里一目了然,哪些是该执行的,哪些是多余的,好定位问题。
追问
好长的回答,看得我好乱,不怎么理解……
展开全部
nextval 用到就增加的,不会像你说的不增加,我没有遇到过
追问
事实就是
insert into "AA" values (BBS."S1".nextval,BBS."S1".nextval);
得到的结果是两个一样的数,比如1,1;2,2;3,3……
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
按我的理解。应该是你放在一条sql语句当中时候。只增长1次。
比如你写2个insert语句。结果应该不同。
比如你写2个insert语句。结果应该不同。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询