2013-07-04 30 views
0

表:爲什麼我不能通過這種方式添加外鍵約束?

CREATE TABLE `relation` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `name` varchar(40) NOT NULL, 
    `gender` tinyint(1) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `unique_relation` (`name`) 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 

    CREATE TABLE `invite` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `date_sent` date NOT NULL, 
    `user_id` int(10) unsigned NOT NULL, 
    `relation_id` int(10) unsigned NOT NULL, 
    `email` varchar(255) NOT NULL, 
    `code` varchar(255) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `fk_user` (`user_id`), 
    CONSTRAINT `fk_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 

的SQL語句執行的是:

ALTER TABLE `invite` 
ADD CONSTRAINT `fk_relation` 
FOREIGN KEY (`relation_id`) 
REFERENCES `relation` (`id`) 
ON DELETE CASCADE ON UPDATE RESTRICT 

MySQL錯誤:

SQLSTATE[HY000]: General error: 1005 Can't create table 'dbtest.#sql-d00_39' (errno: 121).

relation.idinvite.relation_ ID列是相同的類型爲int(10)無符號

UPDATE 表邀請是空的同時加入該鍵的。 表格關係有3行。

+0

其實,邀請表是空的? –

回答

1

試試這個:

ALTER TABLE invite 
ADD CONSTRAINT fk_relation 
FOREIGN KEY (relation_id) 
REFERENCES relation(id) 

按照文檔語法是正確的SQL FOREIGN KEY Constraint

+0

我已經更新了我的anwser –

+0

似乎沒有反引號。 –

0

的DDL創建外鍵現在會自動包含語句以指定的「刪除」和「更新」行動。但是,對於「刪除」,它包含語句「ON DELETE RESTRICT」,該語句似乎不是有效的T-SQL語句。

試試這個:

ALTER TABLE invite WITH CHECK ADD CONSTRAINT fk_relation FOREIGN KEY (relation_id) REFERENCES relation (id)