以下只是一个例证和小事。
create table t2
( id int auto_increment primary key,
abc int not null,
unique key(abc)
);
insert t2(abc) values (1),(3),(5); -- 3 rows added
update t2 set abc = abc+2; -- Error Code 1062: Duplicate entry '3' for key 'abc'
上述错误的发生是因为在更新的主键的顺序行进,也物理排序,并改变1到3违反了3经由已经到位。最终状态会让所有事情都成为现实,理想情况下,这并不妨碍它在那一刻失败。
为了说明这个高度被操纵例如该工作明知没有其他数据:
truncate table t2; -- the data wasn't modified but for the paranoid, clear and re-insert
insert t2(abc) values (1),(3),(5); -- 3 rows added
试试吧自下而上(以便唯一约束不被破坏):
update t2 set abc = abc+2 order by abc desc;
select * from t2;
+----+-----+
| id | abc |
+----+-----+
| 1 | 3 |
| 2 | 5 |
| 3 | 7 |
+----+-----+
它利用在更新语句中具有order by
的能力。
所以它归结于知道你的数据和你可以逃脱。说到它在Oracle上的工作,就像你在评论中所做的一样,是在另一个数据库平台和其他一些架构上。所以这是静音。
这是因为您可能对列有主键约束。列更新后应具有唯一值。 –
但完整更新后列将有独特的价值,但为什么这个工程在oracle –