Mysql
如何使用單個更新語句更新序列列
我有一個表,我們稱它為
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);