我有一张表,其中id_parent和sort_order这两列具有唯一索引。
+----+-----------+------------+-------------+-------------+-------------+
| id | id_parent | sort_order | some_data | other_data | more_data |
+----+-----------+------------+-------------+-------------+-------------+
| 1 | 1 | 1 | lorem ipsum | lorem ipsum | lorem ipsum |
| 2 | 1 | 2 | lorem ipsum | lorem ipsum | lorem ipsum |
| 3 | 1 | 3 | lorem ipsum | lorem ipsum | lorem ipsum |
+----+-----------+------------+-------------+-------------+-------------+
现在我想一次性更新它们的数据和排序(sort_order)。例如,将 sort_order 从 1 - 2 - 3
更改为 2 - 3 - 1
。但是,当我开始运行更新语句时,唯一索引会阻止我,正如预期的那样,它会说我不能有两行具有
id_parent = 1 and sort_order = 2
。好吧,我现在可以将其设置为4,按正确顺序更新其他行,然后再设置这个值。但接下来,我需要运行一条额外的语句,并且很可能需要添加额外的逻辑到我的脚本语言中以确定更新的正确顺序。我还使用 ORM,这使得事情变得更加不方便。现在我的问题是,是否有一种方法可以使 mysql 暂时忽略此索引?就像启动一个特殊的事务,在提交之前仅计算索引一样?