INSERT INTO ... 重复更新所有值

INSERT INTO ... ON DUPLICATE UPDATE all values

我可以安全地更新所有值吗:

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 table.

上测试过

我发现了这些相关问题 1, 2, 3 但没有提到更新所有列(唯一 and/or pk)是 100% 安全的。

使用相同的值更新 PK 时不会产生任何错误。
它不会在更新具有相同值的 Unique col 时产生任何错误。

那么,使用起来是100%安全的吗?如果不是,什么是极端情况,什么时候坏了?

---------- 编辑 --------------
添加 ... 最多 z col

INSERT INTO … ON DUPLICATE KEY UPDATE 是这样工作的:

  • 它会像往常一样尝试插入一行
  • 如果在任何列中发生任何约束冲突,它会在 INSERT 语句与之冲突的现有行上执行 UPDATE 语句

这只是意味着如果单独的 UPDATE 语句会成功,它的 ON DUPLICATE KEY UPDATE 等价物也会起作用。这意味着您显然也不能违反 UPDATE 语句中的任何约束,否则整个事情都会失败(例如,试图在另一行中已经存在的 UNIQUE 列上设置一个值)。

如果您再次在同一列上设置相同的值,那实际上是空操作。列中的值不会更改,因此也不会导致任何错误(假设您没有任何可能行为不端的非常时髦的 BEFORE UPDATE 触发器)。此处的列数无关紧要,您可以根据需要在一条语句中更改任意数量。