我有一个简单的tag_map表作为
CREATE TABLE tag_map
(
tag_map_id mediumint(7) unsigned NOT NULL AUTO_INCREMENT,
post_id mediumint(7) unsigned REFERENCES posts(post_id),
tag_id mediumint(7) unsigned REFERENCES tags(tag_id),
UNIQUE INDEX (post_id,tag_id),
PRIMARY KEY(tag_map_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci
我添加了UNIQUE INDEX
以避免与帖子关联的重复标记对。现在,当我尝试添加新的企业为
INSERT IGNORE INTO (post_id,tag_id) VALUES (post1_id,tag1_id), (post1_id, tag2_id),...
我会收到错误
ERROR 1062 (23000): Duplicate entry '16777215' for key 'PRIMARY'
但是当我SELECT
WHERE tag_map_id ='16777215'时;这属于不同的标签和帖子。
我哪里错了?
答案 0 :(得分:2)
答案 1 :(得分:0)
tag_map_id
是表格的主键,无法复制。在SELECT MAX(tag_map_id) FROM tag_map;
中查看AUTO_INCREMENT
和SHOW CREATE TABLE tag_map;
的值。第二个值应大于第一个值。有时这些可能会失去同步。
如果AUTO_INCREMENT
值小于最大值tag_map_id
,则执行ALTER TABLE
tag_map AUTO_INCREMENT=x;
,其中x
大于MAX(tag_map_id)
答案 2 :(得分:0)
您的tag_map_id
被声明为表格PRIMARY KEY
。您可能永远不会有任何重复的主键。第二行所属的标签和帖子无关紧要:它具有相同的主键。
如果你想要两个具有相同tag_map_id
的项目,你将需要改变你的模式,但是你更有可能在你想要完成的事情上犯了一个逻辑错误。