我有以下示例表:
+-------+-----------+-------+-----+
| 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不允许执行此查询,因为其中一个值块包含非空列(text
column)的空值。 但是,我只传递现有行的数据,这将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));