使用复合键更新表无法正常工作

时间:2016-11-24 22:07:03

标签: mysql primary-key composite-primary-key on-duplicate-key

我有下表: enter image description here

如您所见,日期和床形成复合主键。

我正在尝试运行此查询:

INSERT INTO days (date, operating_time, bed) VALUES ('2016-11-07', 6.55, 1) ON duplicate key update operating_time=VALUES(operating_time);

问题是它似乎在日期列上仅基于更新。因此,例如,对床值为1运行上述查询,然后重新运行它但床值为2将实际更新原始记录(bed = 1)< / p>

如何使ON DUPLICATE KEY语句检查日期和床位?

修改

以下是表格的创建声明:

CREATE TABLE `days` (
  `date` date NOT NULL,
  `operating_time` float DEFAULT '0',
  `bed` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`date`,`bed`),
  UNIQUE KEY `date_UNIQUE` (`date`),
  KEY `bed_idx` (`bed`),
  KEY `date` (`date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2 个答案:

答案 0 :(得分:1)

表格days在日期中有一个UNIQUE索引,因此,如果您执行的INSERT日期相同但bed不同,则不会插入UNIQUE(否则它没有唯一索引)。

如果您尝试使用相同的beddate(但不同的operating_time)进行插入,则会进行更新。

答案 1 :(得分:0)

在发布表的create语句之后,因为UNIQUE键明显只包含日期列。添加床柱后,它按预期工作。我需要阅读不同类型的密钥以及为什么UNIQUE密钥必须包含复合密钥中使用的两个列。