以下只是一個例證和小事。
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 –