栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在不违反唯一约束的情况下在MySQL中交换两行的值?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在不违反唯一约束的情况下在MySQL中交换两行的值?

是否可以在MySQL中完成此操作而不使用伪造的值和多个查询?

(我想不到的)。

问题是MySQL如何处理更新。MySQL(与

UPDATE
正确实施的其他DBMS不同)以破碎的方式处理更新。它会
UNIQUE
在每行更新后强制检查(和其他)约束,而不是在整个
UPDATE
语句完成后(应该这样做)进行检查。因此,(大多数)其他DBMS都没有这个问题。

对于某些更新(例如增加所有或某些ID

id=id+1
),可以通过使用-另一个非标准功能-
ORDER BY
更新中的an来解决。

对于从两行交换值,此技巧无济于事。您必须使用

NULL
或虚假值(该值不存在,但您的列中允许使用)和2或3条语句。

您也可以暂时删除唯一约束,但是我认为这并不是一个好主意。


因此,如果唯一列是有符号整数并且没有负值,则可以在事务中使用2条语句:

START TRANSACTION ;    UPDATE tasks     SET priority =       CASE        WHEN priority = 2 THEN -3         WHEN priority = 3 THEN -2       END     WHERe priority IN (2,3) ;    UPDATE tasks     SET priority = - priority    WHERe priority IN (-2,-3) ;COMMIT ;


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/394055.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号