如您所见,日期和床形成复合主键。
我正在尝试运行此查询:
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;
答案 0 :(得分:1)
表格days
在日期中有一个UNIQUE
索引,因此,如果您执行的INSERT
日期相同但bed
不同,则不会插入UNIQUE(否则它没有唯一索引)。
如果您尝试使用相同的bed
和date
(但不同的operating_time
)进行插入,则会进行更新。
答案 1 :(得分:0)
在发布表的create语句之后,因为UNIQUE键明显只包含日期列。添加床柱后,它按预期工作。我需要阅读不同类型的密钥以及为什么UNIQUE密钥必须包含复合密钥中使用的两个列。