2013-08-20 115 views
0

我有以下表格:無法在MySQL表中創建約束

node_sharing | CREATE TABLE `node_sharing` (
    `user_id` int(11) NOT NULL, 
    `node_id` int(11) NOT NULL, 
    PRIMARY KEY (`user_id`,`node_id`), 
    KEY `fk_user_id_idx` (`user_id`), 
    KEY `fk_node_id_idx` (`node_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

users | CREATE TABLE `users` (
    `id` int(11) NOT NULL, 
    `has_ard_access` tinyint(1) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

我想創建這樣的一個約束外鍵:

ALTER TABLE `node_sharing` 
    ADD CONSTRAINT `fk_user_id` 
    FOREIGN KEY (`user_id`) 
    REFERENCES `users` (`id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION; 

和MySQL返回以下錯誤:

ERROR 1005 (HY000): Can't create table 'MY_TABLE_NAME.#sql-4d0_218' (errno: 121) 

這裏有什麼問題?

PS node_sharing已被截斷,因此沒有現有的記錄可以禁用放置約束。

+0

嗨,我試着執行你的3條語句,沒關係。你有哪個版本的MySql? –

+0

@JoeTaras它是'mysql Ver 14.14 Distrib 5.5.32,用於debian-linux-gnu(x86_64)使用readline 6.2 ' – ducin

回答

2

這是一個重複鍵錯誤。你以前有沒有同名餐桌?如果是這樣,請檢查InnoDB內部數據字典。如果不是,請檢查是否有另一個具有相同名稱的約束。約束名稱應該是唯一的。

+0

你是對的。我在不同的表中有相同的約束名稱。謝謝! – ducin

+0

@JakeBuller是的,我知道。 SO在最初幾分鐘內禁止接受答案。 – ducin