在级联删除似乎不适用于我的数据库

时间:2014-11-06 12:30:16

标签: mysql sql

我不知道我做错了什么,因为我一直在查看本网站上关于ON CASCADE DELETE的先前答案。

基本上这是我的表:

CREATE TABLE `directorycolumntags` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `directorycolumn_id` INT(11)  NOT NULL,
  `tag_id` INT(11) NOT NULL,
  `description` TEXT,
  `created` DATETIME DEFAULT NULL,
  PRIMARY KEY (`id`),
  FOREIGN KEY (`directorycolumn_id`) REFERENCES directorycolumn(id),
  CONSTRAINT FOREIGN KEY (`tag_id`) REFERENCES tag(id) 
  ON DELETE CASCADE
) ENGINE=MYISAM AUTO_INCREMENT=29 DEFAULT CHARSET=utf8;

Foreign key引用标记表的id

CREATE TABLE `tag` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(200) DEFAULT NULL,
  `description` TEXT,
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8;

现在,如果我将queryINSERT的某些数据执行到directorycolumntags表格中,那就可以了:

INSERT INTO directorycolumntags(directorycolumn_id,tag_id)VALUES(178,32);

但是,当DELETE来自标记表的条目id为32时,它不会从directorycolumntags表中删除该行。任何人都可以指出我哪里错了吗?

1 个答案:

答案 0 :(得分:2)

这是因为您的表directorycolumntagsMYISAM,而不是INNODB。 MyISAM不支持外键。您可以编写外键语句,但MySQL会默默地忽略它们。

试试这个:

ALTER TABLE `directorycolumntags` ENGINE = 'InnoDB';