我有下表(mariadb):
+----+--------------+-------------+-------------+
| id | content_type | sort_number | document_id |
+----+--------------+-------------+-------------+
| 1 | text | 1 | 1 |
| 2 | table | 2 | 1 |
| 3 | text | 3 | 1 |
| 4 | image | 4 | 1 |
+----+--------------+-------------+-------------+
组合 sort_number
以及 document_id
是独一无二的。
现在,当我想在位置2添加一个新条目时,我需要增加 sort_number
在所有条目中 sort_number >= 2
一步到位。
为此,我使用以下查询:
update `table_name` set `sort_number` = sort_number +1 where `sort_number` > ? and `document_id` = ?
但因为有唯一的钥匙( sort_number
以及 document_id
)我得到一个错误:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '3' for key 'table_name_sort_number_document_id_unique'
我努力避免犯错误 SET unique_checks=0;
但还是得到了错误。。。
有没有更好的方法来更新 sort_number
在一个查询中?
2条答案
按热度按时间li9yvcax1#
我喜欢保罗·斯皮格尔提供的解决方案。我的查询现在如下所示:
gorkyyrv2#
order by也适用于更新查询,因此只需执行以下操作:
只需从最后一行开始更新并向后遍历即可。