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

标签 php mysql sql sql-update insert-update

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

相关文章:

mysql - 在 MYSQL QUERY 中转换 MS SQL Server 查询

SQL:是否可以在 select 语句中添加一个虚拟列?

php - Xdebug Netbeans Php Docker

javascript - 每当我的 if 条件为假时, Canvas 就会变成空白

php - 在 Laravel 5.2 中调用未定义的方法 Michelf\Markdown::isDeferred()

mysql - 如何在没有前导空格的情况下在数据字段中进行搜索?

php - 使用 PHP 和 Bootstrap 显示 sql 表中的行信息

sql - 使用一个查询 SQLite 选择所有递归值

php - 理解工厂方法模式

php - 动态多维数组