在重复键上插入 ..,使用非空列的空值更新

  • 本文关键字:更新 空值 插入 mysql
  • 更新时间 :
  • 英文 :


>我有一个以下示例表:

+-------+-----------+-------+-----+
| 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));

最新更新