2014-05-02 50 views
0

我有一個表稱爲enrollments,看起來像這樣:如何創建第二個主鍵/化合物MySQL表鍵

enrollmentindex - which is table primary key 
username - varchar(64) 
shortname - varchar(64) 
role - varcar(64) 

我得離開enrollmentindex關口,但想創建第二個primary key(複合鍵)使用username,shortnamerole

由於enrollmentindex上存在密鑰,我無法創建新的複合密鑰。

嘗試:

ALTER TABLE enrollments ADD PRIMARY KEY(username,shortname,role) 

- 導致錯誤代碼1068

ALTER TABLE enrollments DROP PRIMARY KEY, ADD PRIMARY KEY(username,shortname,role) 

- 導致錯誤代碼1075

有表中沒有任何數據。

+0

你需要有這樣一個複合主鍵的任何理由的東西嗎?應該可能爲PK創建一個自然鍵,併爲用戶名,短名稱,角色創建一個UNIQUE索引,而不是 – Noah

+0

第二個'ALTER'命令應該可以工作。你使用的是哪個版本的MySQL?而且,正如諾亞所建議的那樣,「唯一索引」是一個更好的選擇。 –

+0

5.3.13。這些領域的唯一索引,而不是主鍵,是正確的解決方案。 – jamesTheProgrammer

回答

2

錯誤代碼1068是用於多個主鍵(不允許)

錯誤代碼1075爲不正確的表定義(AUTO_INCREMENT字段必須被定義爲一鍵)。它看起來像enrollmentindex是一個auto_increment字段,所以它需要包含在你的複合主鍵中。

我建議建立在username,shortname,role一個單獨的唯一索引,如果這就是你要強制

+1

謝謝,UNIQUE索引,而不是另一個主要關鍵是票。 – jamesTheProgrammer