我一直在寻找有关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;
现在,如果我执行此
query
到INSERT
表中的某些数据,它将起作用:INSERT INTO directorycolumntags(directorycolumn_id,tag_id)值(178,32);
但是,当我
directorycolumntags
标记表中的DELETE
为32的条目时,它不会从directorycolumntags表中删除该行。谁能指出我要去哪里了? 最佳答案
这是因为表directorycolumntags
是MYISAM
,而不是INNODB
。 MyISAM不支持外键。您可以编写外键语句,但是MySQL会默默地忽略它们。
尝试这个:
ALTER TABLE `directorycolumntags` ENGINE = 'InnoDB';