是否可以在具有多个字段的表中仅使用ON DUPLICATE KEY UPDATE更新单个字段?

时间:2016-03-23 15:45:11

标签: mysql sql duplicates

是否可以在具有多个字段的表中仅使用ON DUPLICATE KEY UPDATE更新单个字段?

如果我有三个领域的桌子; key,cats,dogs其中key是主键,可以更新重复键上的记录,只更改一个字段(对于我的示例cats)而不更改其他非键字段中的值({ {1}})。这是在插入时不知道数据库外部dogs的值是什么(即我有一个变量持有猫值,但没有一个持有狗值)

dogs

当我运行这样的东西并且表INSERT INTO `myTable` (`key`,`cats`) VALUES('someKey1','Manx') ON DUPLICATE KEY UPDATE `cats` = 'Manx'; 中已经存在的密钥时,即使它之前有一个值,也会设置为NULL。

2 个答案:

答案 0 :(得分:1)

戈登是对的,它不像我描述的那样工作。如果你看到这个,它不是由ON DUPLICATE UPDATE语句引起的,而是由其他东西引起的。以下是证据:

CREATE TABLE IF NOT EXISTS `myTable` (
  `key` varchar(20) NOT NULL default '',
  `cats` varchar(20) default NULL,
  `dogs` varchar(20) default NULL,
  PRIMARY KEY  (`key`)
)

跑步

INSERT INTO `myTable` (`key`, `cats`, `dogs`) VALUES
('someKey1', NULL, 'jack-russell');

然后运行

INSERT INTO `myTable` (`key`,`cats`) VALUES
('someKey1','Manx') ON DUPLICATE KEY UPDATE `cats` = 'manx';

然后查看表格

答案 1 :(得分:0)

我认为你应该尝试UPSERT。

请检查一下:

INSERT INTO `item` (`item_name`, items_in_stock) VALUES( 'A', 27)
ON DUPLICATE KEY UPDATE `new_items_count` = `new_items_count` + 27

MySQL UPSERT