首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ON DELETE CASCADE在MySQL中不工作

问ON DELETE CASCADE在MySQL中不工作
EN

Stack Overflow用户
提问于 2011-03-15 14:29:41
回答 1查看 4.1K关注 0票数 2

我使用下面的SQL创建一个名为app_info的表

代码语言:javascript
复制
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的表

代码语言:javascript
复制
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); 

但是当我从主键表中删除数据时,外键表中的孤立行不会被自动删除。有人知道问题出在哪里吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-15 14:35:36

MyISAM存储引擎不支持外键约束。该约束被解析,但被静默忽略。

要解决您的问题,请改用InnoDB引擎(用于两个表)。

代码语言:javascript
复制
CREATE TABLE ( ... ) ENGINE = InnoDB ... ;

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

代码语言:javascript
复制
ALTER TABLE myDB.app_info ENGINE = InnoDB;
ALTER TABLE myDB.tab_info ENGINE = InnoDB;

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5308255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档