我可以安全地更新所有值吗:
INSERT INTO tbl_name SET `a`=:a, `b`=:b, ... `z`=:z
ON DUPLICATE KEY UPDATE
`a`=VALUES(`a`), `b`=VALUES(`b`), ... `z`=VALUES(`z`);
我试过了,有效。但只在一张innodb表上测试过。
我发现了这些相关问题 1、2、3,但没有提到更新所有列(唯一和/或 pk)是 100% 安全的。
使用相同值更新 PK 时不会产生任何错误。
它不会在更新具有相同值的 Unique col 时产生任何错误。
那么,使用起来是否100%安全?如果没有,当它崩溃时,什么是极端情况?
--------- 编辑 -------------
添加...至 z 列
INSERT INTO … ON DUPLICATE KEY UPDATE
的工作方式如下:
UPDATE
语句发生冲突的现有行上执行 INSERT
语句这仅仅意味着如果
UPDATE
语句单独成功,那么它的 ON DUPLICATE KEY UPDATE
等效语句也将起作用。这意味着您显然也不能违反 UPDATE
语句中的任何约束,否则整个事情都会失败(例如,尝试在另一行中已经存在的 UNIQUE
列上设置值)。
如果您再次在同一列上设置相同的值,则本质上是无操作。列中的值不会更改,因此也不会导致任何错误(假设您没有任何可能出现异常行为的真正时髦的
BEFORE UPDATE
触发器)。此处的列数无关紧要,您可以根据需要在一个语句中更改任意数量的列。