ON DELETE CASCADE non funziona in MySQL

Sto usando il seguente SQL per creare una tabella denominata 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 ; 

Sto usando il seguente SQL per creare una tabella denominata 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); 

Ma quando elimino i dati dalla tabella delle chiavi primaria, le righe orfane nella tabella delle chiavi esterne non vengono eliminate automaticamente. Qualcuno sa quale potrebbe essere il problema?

Il motore di archiviazione MyISAM non support i vincoli di chiave esterna. Il vincolo viene analizzato ma silenziosamente ignorato.

Per risolvere il tuo problema usa invece il motore InnoDB (per entrambe le tabelle).

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

Invece di abbandonare i tuoi tavoli e ricrearli puoi anche cambiare il motore di archiviazione:

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

Dopo aver cambiato il motore, dovrai aggiungere nuovamente il vincolo di chiave esterna.