2011-03-15 101 views
2

不工作我使用下面的SQL創建一個名爲app_info表:ON DELETE CASCADE在MySQL

CREATE TABLE IF NOT EXISTS `app_info` (
`_id` int(11) NOT NULL AUTO_INCREMENT, 
`app_name` varchar(50) DEFAULT NULL, 
`app_owner` varchar(50) DEFAULT NULL, 
`last_update` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
PRIMARY KEY (`_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ; 

我使用下面的SQL創建一個名爲tab_info表:

CREATE TABLE `myDB`.`tab_info` (
`_id` INT NOT NULL AUTO_INCREMENT , 
`app_id` INT NOT NULL , 
`tab_title` VARCHAR(15) NOT NULL , 
PRIMARY KEY (`_id`) , 
UNIQUE INDEX `app_id_UNIQUE` (`app_id` ASC) , 
INDEX `app_tab_key` (`app_id` ASC) , 
CONSTRAINT `app_tab_key` 
    FOREIGN KEY (`app_id`) 
    REFERENCES `myDB`.`app_info` (`_id`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE); 

但是當我從主鍵表中刪除數據時,外鍵表中的孤行不會被自動刪除。有誰知道是什麼問題?

+0

你是從app_info表中刪除?我認爲級聯會在你從tab_info表中刪除時發生。 – Paul 2011-03-15 06:36:02

回答

6

MyISAM存儲引擎不支持外鍵約束。該約束被解析,但被靜靜地忽略。

解決您的問題使用InnoDB引擎,而不是(兩個表)。

CREATE TABLE (...) ENGINE = InnoDB ... ; 

不是丟棄表和重建他們,你也可以改變存儲引擎:

ALTER TABLE myDB.app_info ENGINE = InnoDB; 
ALTER TABLE myDB.tab_info ENGINE = InnoDB; 

改變發動機後,您將需要重新添加外鍵約束。

+0

感謝Man u Rocks – Abhi 2011-03-15 06:58:39