我不知道我做错了什么,因为我一直在查看本网站上关于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
的某些数据执行到directorycolumntags
表格中,那就可以了:
INSERT INTO directorycolumntags(directorycolumn_id,tag_id)VALUES(178,32);
但是,当DELETE
来自标记表的条目id
为32时,它不会从directorycolumntags表中删除该行。任何人都可以指出我哪里错了吗?
答案 0 :(得分:2)
这是因为您的表directorycolumntags
是MYISAM
,而不是INNODB
。 MyISAM不支持外键。您可以编写外键语句,但MySQL会默默地忽略它们。
试试这个:
ALTER TABLE `directorycolumntags` ENGINE = 'InnoDB';