gpt4 book ai didi

mysql - 为什么oracle可以update pk=pk+1,而MySQL不能update set pk=pk+1

转载 作者:可可西里 更新时间:2023-11-01 06:48:27 28 4
gpt4 key购买 nike

甲骨文:

 create table t7(c1 number primary key,c2 number);
insert into t7 values (1,3);
insert into t7 values (2,4);
commit;
update t7 set c1=c1+1;
commit ;
select * from t7;

MySQL:

 create table t7(c1 int primary key,c2 int);
insert into t7 values (1,3);
insert into t7 values (2,4);
select * from t7;
update t7 set c1=c1+1;
ERROR 1062 (23000): Duplicate entry '2' for key 'PRIMARY'

为什么MySQL说

update set pk=pk+1 :Duplicate entry '2' for key 'PRIMARY',

而 ORACLE 可以做到这一点 update set pk=pk+1?

最佳答案

看来 oracle 要么在执行顺序上更聪明,要么只在将更新应用到所有行后才检查约束。无论如何,可以通过指定更新顺序来修复 mysql 示例。

 create table t7(c1 int primary key,c2 int);
insert into t7 values (1,3);
insert into t7 values (2,4);
select * from t7;
update t7 set c1=c1+1 order by c1 desc;

参见 http://sqlfiddle.com/#!9/8611f4/1

尝试将第一行更新为 (2,3) 是一个重复键,因为 (2,4) 仍然具有旧值。此行为的解决方法是反转顺序并从最大索引开始,更改 (2,4) -> (3,4) 然后 (1,3) -> (2,3),并完全避免冲突.

关于mysql - 为什么oracle可以update pk=pk+1,而MySQL不能update set pk=pk+1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45806685/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com