提问者:小点点

插入…使用not-null列的null值进行重复键更新


我有以下示例表:

+-------+-----------+-------+-----+
| 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不允许执行此查询,因为其中一个值块包含非空列(textcolumn)的空值。 但是,我只传递现有行的数据,这将100%触发“重复键”部分,这有额外的空检查。

有什么办法可以让我停用这张支票吗?

我知道我可以对不同的列集使用多个UPDATE语句。 但我特别感兴趣的是insert.。。ON DUPLICATE KEY update查询。


共1个答案

匿名用户

正如@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));