0

我有一个有 4 列的表 - id(自动递增)、锦标赛 ID、用户 ID、现金。

用户 ID 和锦标赛 ID 可能有重复的条目,但锦标赛 ID 和用户 ID 的组合始终是唯一的。

所以根据我的要求,我需要有 2 组索引。

  1. 用户身份
  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 IGNORE TABLE 而不是 ALTER TABLE

于 2013-03-16T10:39:37.640 回答