2

我有一个简单的 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'

但是当我SELECTWHERE tag_map_id='16777215'; 这属于不同的标签和帖子。

我哪里错了?

4

3 回答 3

2

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

您的 PK 的 mediumint 最大值已达到 16777215。

更改为 int 或以上

于 2012-01-19T04:58:17.173 回答
0

tag_map_id是表的主键,不能重复。检查SELECT MAX(tag_map_id) FROM tag_map;AUTO_INCREMENTin的值SHOW CREATE TABLE tag_map;。第二个值应该大于第一个。有时这些可能会不同步。

如果该AUTO_INCREMENT值小于最大值tag_map_id,只需在大于 1的位置执行ALTER TABLEtag_map 。AUTO_INCREMENT=x;xMAX(tag_map_id)

于 2012-01-19T04:57:36.290 回答
0

tag_map_id被声明为 table PRIMARY KEY。您可能永远不会拥有重复的主键。第二行属于哪个标签和帖子无关紧要:它具有相同的主键。

如果您想要两个具有相同 的项目,您将需要更改您的架构tag_map_id,但更有可能您在尝试完成的任务中犯了逻辑错误。

于 2012-01-19T04:57:42.247 回答