使用复合键更新 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 被插入(否则它没有通过唯一索引)。
如果您尝试使用相同的 bed
和 date
(但不同的 operating_time
)插入,它将进行更新。
发布 table 的创建语句后,很明显 UNIQUE 键仅由日期列组成。添加床柱后,它按预期工作。我将需要阅读不同类型的键,以及为什么 UNIQUE 键必须包含复合键中使用的两列。
我有以下 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 被插入(否则它没有通过唯一索引)。
如果您尝试使用相同的 bed
和 date
(但不同的 operating_time
)插入,它将进行更新。
发布 table 的创建语句后,很明显 UNIQUE 键仅由日期列组成。添加床柱后,它按预期工作。我将需要阅读不同类型的键,以及为什么 UNIQUE 键必须包含复合键中使用的两列。