ON DELETE CASCADE не работает в MySQL

Я использую следующий SQL для создания таблицы с именем app_info :

 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); 

Но когда я удаляю данные из таблицы первичных ключей, оси сирот в таблице внешнего ключа не удаляются автоматически. Кто-нибудь знает, в чем проблема?

Related of "ON DELETE CASCADE не работает в MySQL"

Механизм хранения MyISAM не поддерживает ограничения внешнего ключа. Ограничение анализируется, но молча игнорируется.

Чтобы исправить вашу проблему, используйте вместо него движок InnoDB (для обеих таблиц).

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

Вместо того, чтобы отбрасывать свои таблицы и воссоздавать их, вы также можете изменить механизм хранения:

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

После изменения двигателя вам нужно будет снова добавить ограничение внешнего ключа.