2014-01-22 136 views
1

我正在使用Mysql Workbench。我已經在桌子上了。 現在我想在一個名爲Personal_Details的表中添加外鍵,該表的關鍵是Login表中的主鍵。添加外鍵時出錯

但是,當我試圖這樣做,它讓我看到以下錯誤:

ERROR 1005: Can't create table 'shaadiDB.#sql-404_25' (errno: 121) 

SQL語句:

ALTER TABLE `shaadiDB`.`Personal_Details` 
    ADD CONSTRAINT `Login_Id` 
    FOREIGN KEY (`Login_Id`) 
    REFERENCES `shaadiDB`.`Login` (`Login_Id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION 
, ADD INDEX `Login_Id` (`Login_Id` ASC) 
+0

你是什麼意思「*它頻繁發生*」?你是否經常改變表格結構? –

+0

不,我不經常改變表 – AM26

回答

0

添加任何約束到已經有一些數據可能會導致此問題的一個表之前重新添加所有行表1,嘗試添加與出數據約束

+0

發佈的錯誤不是由於數據重複,但密鑰名稱重複。 –

1

似乎表Personal_Details是具有數據從其中有可能在表Login的表中不存在Login_Id的行。

如果是這種情況,那麼解決方法是您需要將數據移動到另一個表,然後添加約束。添加約束後,您需要通過1

+0

我無法選擇索引列...爲什麼它發生?! – AM26

+0

@ AM26我真的很驚訝,是什麼讓你重新考慮接受的答案,因爲我發現沒有區別,補充說明我已經解釋瞭如何添加約束而不僅僅是一般性聲明 – Akshay

1

錯誤121:當密鑰名稱中存在重複時,會顯式引發此錯誤。

在運行Alter ...語句後立即執行以下操作並觀察結果。

SHOW ENGINE InnoDB STATUS; 

說明來自結果的文本將告訴您在哪個鍵名稱上找到了重複。 根據您修改您的ALTER ...聲明並執行。

另外,您還可以找到,如果任何這樣的重複鍵名稱由執行定義:

select constraint_name, constraint_type, table_name 
from information_schema.table_constraints 
where table_schema = DATABASE() -- and constraint_type = 'foreign key' 

約束類型可以像PRIMARY KEY什麼,FOREIGN KEY

如果你看到任何按鍵名稱您試圖在您的ALTER ..聲明中使用的結果,您應該修改它們並執行。