0

ID(自動インクリメント)、tourment_id、userid、cashの4つの列を持つテーブルがあります。

ユーザー ID とトーナメント ID のエントリが重複する場合がありますが、トーナメント ID とユーザー ID の組み合わせは常に一意です。

私の要件によれば、2セットのインデックスが必要です。

  1. ユーザーID
  2. トーナメントID、現金

しかし、次のエラーが発生し続けるため、一意でないエントリでインデックスを作成できません:

  "Failed to create index : SQL create unique index `test_index` on `table_name` 
  (`tournament_id`) failed : Duplicate entry"
4

2 に答える 2

1

探しているものは、複合主キーと呼ばれます。

PRIMARY KEY(user_id, tournament_id)

user_idとの組み合わせtournament_idが一意であることを確認します。

テーブル定義は次のようになります。

CREATE TABLE user_tournament
{
    user_id INT,
    tournament_id INT,
    cash DECIMAL(5,2), -- should cash be in this table?

    PRIMARY KEY(user_id, tournament_id),
    FOREIGN KEY(user_id) REFERENCES user(id),
    FOREIGN KEY(tournament_id) REFERENCES tournament(id)
} ENGINE=InnoDB;
于 2013-03-16T10:06:39.527 に答える
0
CREATE TABLE user_tournament
(
    id int(11) auto_increment
    user_id INT,
    tournament_id INT,
    cash DECIMAL(5,2),
    PRIMARY KEY (id),
    KEY(user_id, tournament_id)
);

一意のキーを作成したい場合は、テーブルを作成します

CREATE TABLE user_tournament
(
    id int(11) auto_increment
    user_id INT,
    tournament_id INT,
    cash DECIMAL(5,2),
    PRIMARY KEY (id),
    UNIQUE KEY(user_id, tournament_id)
);

既存のテーブルにインデックスを追加する場合は、ALTER TABLE の代わりに ALTER IGNORE TABLE を使用します

于 2013-03-16T10:39:37.640 に答える