gpt4 book ai didi

php - 在 INSERT ON DUPLICATE KEY UPDATE 中,检测指定插入值时是否使用默认值

转载 作者:行者123 更新时间:2023-11-29 23:29:36 32 4
gpt4 key购买 nike

假设我有这个查询(与 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com