我试图将表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'
我不相信在表requests
中有值abcde
的重复条目,因为下面的查询表明只有1个条目,但如果有,它应该无关紧要,因为我无论如何都选择了DISTINCT值。
SELECT COUNT(*) FROM requests WHERE video_id = 'abcde';
COUNT(*)
1
我在requests.video_id
上有一个非唯一索引,但我认为这与我所遇到的问题无关。有可能我有一个损坏的b树索引吗?
编辑
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
在requests
表中,video_id
字段定义为:
`video_id` char(5) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
但是在新表中,它被定义为:
`video_id` char(5)
可能在字符集和相应的排序中存在差异。请确保两个字段具有完全相同的字符集和排序规则。