插入...重复更新所有值

问题描述 投票:0回答:1

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

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表上测试过。

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

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

那么,使用起来是否100%安全?如果没有,当它崩溃时,什么是极端情况?

--------- 编辑 -------------
添加...至 z 列

php mysql insert on-duplicate-key
1个回答
2
投票

INSERT INTO … ON DUPLICATE KEY UPDATE
的工作方式如下:

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

这仅仅意味着如果

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

如果您再次在同一列上设置相同的值,则本质上是无操作。列中的值不会更改,因此也不会导致任何错误(假设您没有任何可能出现异常行为的真正时髦的

BEFORE UPDATE
触发器)。此处的列数无关紧要,您可以根据需要在一个语句中更改任意数量的列。

© www.soinside.com 2019 - 2024. All rights reserved.