ON DELETE CASCADE无法在MySQL中运行

Abh*_*bhi 2 php 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 ;
Run Code Online (Sandbox Code Playgroud)

我使用以下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); 
Run Code Online (Sandbox Code Playgroud)

但是当我从主键表中删除数据时,外键表中的孤立行不会自动删除.有谁知道是什么问题?

Mar*_*ers 6

MyISAM存储引擎不支持外键约束.解析约束但忽略忽略.

要解决您的问题,请使用InnoDB引擎(对于两个表).

CREATE TABLE ( ... ) ENGINE = InnoDB ... ;
Run Code Online (Sandbox Code Playgroud)

您可以更改存储引擎,而不是删除表并重新创建它们:

ALTER TABLE myDB.app_info ENGINE = InnoDB;
ALTER TABLE myDB.tab_info ENGINE = InnoDB;
Run Code Online (Sandbox Code Playgroud)

更改引擎后,您需要再次添加外键约束.