>我有一个以下示例表:
+-------+-----------+-------+-----+
| Field | Type | Null | PK |
+-------+-----------+-------+-----+
| id | int | NO | PRI |
| numb | int | NO | |
| text | text | NO | |
+-------+-----------+-------+-----+
在其中,我尝试使用一个查询更新几行:
INSERT INTO example_table
VALUES (1, 100, null), (2, 100, 'abc')
ON DUPLICATE KEY UPDATE
numb = VALUES(numb), text = IFNULL(VALUES(text), text);
MySQL不允许执行此查询,因为其中一个VALUES块包含非空列(text
列(的空值。但是,我只传递现有行的数据,这些行将 100% 触发"在重复键上"部分,这些行具有额外的空检查。
有什么方法可以禁用此检查吗?
我知道我可以使用具有不同列集的多个 UPDATE 语句。 但我对INSERT ... ON DUPLICATE KEY UPDATE
查询特别感兴趣。
正如@Shadow建议的那样,使用空字符串将完美完成工作!
INSERT INTO example_table
VALUES (1, 100, ''), (2, 100, 'abc')
ON DUPLICATE KEY UPDATE
numb = VALUES(numb), text = IF(VALUES(text) = '', text, VALUES(text));