INSERT INTO一个带有UNIQUE INDEX的表,用于两列

时间:2012-01-19 04:45:02

标签: mysql sql insert mysql-error-1062 unique-index

我有一个简单的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'时;这属于不同的标签和帖子。

我哪里错了?

3 个答案:

答案 0 :(得分:2)

http://dev.mysql.com/doc/refman/5.0/en/integer-types.html

您的PK的中等最大值已达到16777215。

改为int或以上

答案 1 :(得分:0)

tag_map_id是表格的主键,无法复制。在SELECT MAX(tag_map_id) FROM tag_map;中查看AUTO_INCREMENTSHOW 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的项目,你将需要改变你的模式,但是你更有可能在你想要完成的事情上犯了一个逻辑错误。