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'

しかし、I 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はテーブルの主キーであり、複製できません。とinSELECT MAX(tag_map_id) FROM tag_map;の値を確認してください。2 番目の値は最初の値よりも大きくする必要があります。場合によっては、これらが同期しなくなることがあります。AUTO_INCREMENTSHOW CREATE TABLE tag_map;

AUTO_INCREMENT値が最大値より小さい場合は、tag_map tag_map_idwhere ALTER TABLEis AUTO_INCREMENT=x;one xgreater than を実行しMAX(tag_map_id)ます。

于 2012-01-19T04:57:36.290 に答える
0

あなたtag_map_idは table として宣言されていますPRIMARY KEY。重複した主キーを持つことは決してありません。2 行目がどのタグと投稿に属しているかは問題ではありません。主キーは同じです。

同じ を持つ 2 つのアイテムが必要な場合は、スキーマを変更する必要がありますtag_map_idが、達成しようとしていることに論理エラーが発生している可能性が高くなります。

于 2012-01-19T04:57:42.247 に答える