假设我有这个查询(与 PHP 结合使用)
INSERT INTO table (field1, field2, field3) VALUES (a, $field2, c) ON DUPLICATE KEY UPDATE field2 = IF(VALUES(field2) [ends up using DEFAULT(field2)], field2, VALUES(field2))
其中 $field2 可以是
a.要插入到 field2 中的合法正常值或 b.字符串“DEFAULT(field2)”将插入该字段的任何 mysql 默认值(假设默认值为 22)
现在我的目标是在查询的更新部分:
如果发生情况 a.),则相应地使用用户指定的 $field2 值更新列。否则,如果情况 b.) 发生,则保持该行不变(即不修改数据)
基本上我需要填写查询的“[ends up using DEFAULT(field2)]”部分才能完成上述操作
现在我的第一个冲动是执行ON DUPLICATE KEY UPDATE field2 = IF(VALUES(field2) = DEFAULT(field2), field2, VALUES(field2))
但是这最终也会保留该行,就像情况a一样。)其中$field2 = 22,因为22是mysql的默认值,因此VALUES(field2) = DEFAULT(field2)是TRUE,尽管事实上,在情况 a 中。)我们希望 22 相应地更新,而不是保持当前值
换句话说,如何修改此查询,以便仅在显式插入值时才执行更新,但如果最终使用“DEFAULT(field2)”则不执行更新
最佳答案
您可以在严格模式下运行 MySQL 并将此列设置为 NOT NULL
定义。然后,当触发这种情况时,您可以插入 NULL
,而不是尝试将默认值插入到列中。这会导致错误,导致查询失败。
我认为这有点hacky。我需要更好地理解您的用例,才能真正了解您是否应该完全使用不同的调用模式。
关于php - 在 INSERT ON DUPLICATE KEY UPDATE 中,检测指定插入值时是否使用默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26661797/