2013-03-16 46 views
0

我有一個包含4列的表 - id(自動遞增),tournament_id,userid,cash。無法在Innodb中定義非唯一索引

userid & tournament_id可能有重複的條目,但tournament_id和userid的組合總是唯一的。

所以根據我的要求,我需要有2組索引。

  1. 用戶ID
  2. tournament_id,現金

,但我不能與非唯一條目創建索引,因爲它不斷給我下面的錯誤:

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

你實際上試圖定義唯一索引。顯示你的腳本。 – 2013-03-16 10:06:47

+0

如果這個錯誤信息不夠清晰,恐怕你根本不會處理IT。 – 2013-03-16 10:47:06

回答

1

你要找因爲被稱爲複合主鍵。

PRIMARY KEY(user_id, tournament_id) 

這將確保聯合如果user_idtournament_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; 
+0

plz讓我知道是否有辦法聲明一個非唯一索引! – rajankaneria 2013-03-16 10:19:02

+0

只需聲明一個'INDEX'或'KEY'。 BTW。你的問題不符合你的要求。 – Bart 2013-03-16 10:26:36

+0

我剛試過,但它不工作!我曾經使用過這個查詢** ALTER TABLE vkm_cash_in_hand ADD INDEX(tournament_id,cash)**,它給了我以前提到的同樣的錯誤! – rajankaneria 2013-03-16 10:34:08

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忽略,而不是ALTER TABLE表

+0

這不合邏輯。 'user_tournament'是一個使用戶和比賽之間關聯的表格。所以它永遠不會被'id'引用。 – Bart 2013-03-16 10:44:57