Mysql

如何使用單個更新語句更新序列列

  • May 16, 2019

我有一個表,我們稱它為foo包含一列priority並對其具有唯一約束的表。

讓我們假設下面是foo表的目前狀態:-

mysql> select * from foo;
+-----+----------+
| id  | priority |
+-----+----------+
| 1   |        5 |
| 2   |        6 |
| 3   |        7 |
+-----+----------+

現在我有一個要求,如果我插入另一個priority值為 的行6,那麼它應該插入這一行並將priority其值為>=6 的所有行移至 1 優先級。

所以修改後的表格應該如下所示:-

mysql> select * from foo;
   +-----+----------+
   | id  | priority |
   +-----+----------+
   | 1   |        5 |
   | 2   |        7 |
   | 3   |        8 |
   | 4   |        6 |
   +-----+----------+

我想使用類似的 sql 語句

update foo set priority=priority+1 where priority >=6;但顯然它會失敗並出現以下錯誤:-

錯誤 1062 (23000):鍵“優先級”的重複條目“7”。

有沒有其他方法可以做同樣的事情。

這是一個可以幫助您的解決方案。

update foo set prio = prio+1 where prio >= 6 order by prio desc;
insert into foo (prio) values(6);

引用自:https://dba.stackexchange.com/questions/223757