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

Updating a table with a composite key not working correctly

我有以下 table:

如你所见,日期和床形成了一个复合主键。

我正在尝试 运行 这个查询:

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 的记录)

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

编辑

这是 table 的创建语句:

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;

table days 在日期上有一个 UNIQUE 索引,所以如果你用相同的日期做一个 INSERT 但不同的 bed,它就赢了' 因为 UNIQUE 被插入(否则它没有通过唯一索引)。

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

发布 table 的创建语句后,很明显 UNIQUE 键仅由日期列组成。添加床柱后,它按预期工作。我将需要阅读不同类型的键,以及为什么 UNIQUE 键必须包含复合键中使用的两列。