我一直在寻找有关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表中的某些数据,它将起作用:

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

但是,当我directorycolumntags标记表中的DELETE为32的条目时,它不会从directorycolumntags表中删除该行。谁能指出我要去哪里了?

最佳答案

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

尝试这个:

ALTER TABLE `directorycolumntags` ENGINE = 'InnoDB';

08-15 21:59