2011-03-15 98 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