gpt4 book ai didi

Mysql暂时抑制唯一索引

转载 作者:IT老高 更新时间:2023-10-29 00:12:07 25 4
gpt4 key购买 nike

我有一个表,在两列上有唯一索引,准确地说是 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 和 sort_order = 2。好吧,我现在可以将它设置为 4,以正确的顺序更新其他行,然后再设置这一行。但是,我将不得不运行一个额外的语句,并且很可能向我的脚本语言添加额外的逻辑以确定正确的更新顺序。我也用ORM,越来越不方便。

我现在的问题是,有什么方法可以让mysql暂时忽略这个索引吗?就像启动一个特殊的事务,其中的索引只会在提交之前计算?

最佳答案

据我所知,这是不可能的。

我唯一见过这样的事情是您可以禁用 myisam 表上的非唯一键。但不在 InnoDB 上,也不在唯一键上。

但是,为了节省一两次更新,不需要确切的数字 1、2 和 3。您也可以拥有 4、5 和 6。对吗?您将按顺序使用它,而不是其他任何东西,因此确切的数字并不重要。如果您很聪明,它甚至可以为您保存更新。从你的例子中

update table set sort_order = 4 where sort_order = 1 and id = 1 and id_parent = 1;

新的排序顺序是 2、3、1。只需一次更新。

关于Mysql暂时抑制唯一索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8410844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com