我正在尝试将表requests
的一个字段的不同值插入到表pastmonth
的唯一字段中
CREATE TABLE `pastmonth` (
`video_id` char(5) DEFAULT NULL,
PRIMARY KEY (`video_id`)
);
INSERT INTO pastmonth (video_id)
SELECT DISTINCT (video_id)
FROM requests
WHERE exec_datetime >= NOW() - 60*24*60*60;
但是我收到此错误
Error Code: 1062. Duplicate entry 'abcde' for key 'PRIMARY'
我不相信表abcde
中的值requests
有重复的条目,因为以下查询表明只有1个条目,但是如果有的话应该没关系,因为我无论如何都要选择DISTINCT值。
SELECT COUNT(*) FROM requests WHERE video_id = 'abcde';
COUNT(*)
1
我在requests.video_id
上有一个非唯一索引,但我认为这与我遇到的问题无关。我有可能有一个腐败的btree索引吗?
修改
CREATE TABLE `requests` (
`request_id` bigint(20) NOT NULL AUTO_INCREMENT,
`video_id` char(5) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
`exec_datetime` datetime DEFAULT NULL,
PRIMARY KEY (`request_id`),
KEY `exec_datetime` (`exec_datetime`),
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1
答案 0 :(得分:1)
在requests
表中,video_id
字段定义为:
`video_id` char(5) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
但是在新表中,它被定义为:
`video_id` char(5)
字符集和相应的排序规则可能存在差异。确保两个字段具有完全相同的字符集和排序规则。