2012-09-06 80 views
0

我使用MySQL 5.1。有2個外鍵的表,參考2個不同的表:MySQL在1個表中有多個級聯外鍵

CREATE TABLE `words` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `word` varchar(255) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 


CREATE TABLE `words_groups` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `name` varchar(255) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

CREATE TABLE `words_in_group` (
    `group_id` int(10) unsigned DEFAULT NULL, 
    `word_id` int(10) unsigned DEFAULT NULL, 
    KEY `word_id` (`word_id`) USING BTREE, 
    KEY `group_id` (`group_id`) USING BTREE, 
    CONSTRAINT `group_id` FOREIGN KEY (`group_id`) REFERENCES `words_groups` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, 
    CONSTRAINT `word_id_fk` FOREIGN KEY (`word_id`) REFERENCES `words` (`id`) ON DELETE CASCADE ON UPDATE CASCADE 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

但由於某些原因的CASCADE屬性在words_in_group表的關鍵之一是取消設置,當我使用phpMyAdmin或者Navicat的,並檢查該表的結構。

它可能是什麼?怎麼解決?也許,使用觸發器?

+0

問題:爲什麼要對引用自動遞增鍵的外鍵使用ON UPDATE CASCADE?似乎主鍵不應該更新,那麼爲什麼CASCADE? –

+0

=你爲什麼想要ON UPDATE CASCADE = '你說得對。我只需要在DELETE CASCADE.' – user4035

回答

1

通過插入一些測試數據來測試級聯,然後從單詞中刪除一行。

您也可以使用mysqldump轉儲數據庫,並讀取數據庫服務器認爲應該執行的操作。

我敢肯定,你會發現,級聯工作的書面,而不是在圖形界面中顯示。

+0

當我刪除ON UPDATE CASCADE時,它開始工作。 – user4035

+0

這是MySQL中的一個錯誤。在我從5.1升級到5.5之後,多個CASCADE密鑰變爲可用。 – user4035