在 1 个表中更改 ON DELETE CASCADE

Far*_*žad 5 mysql delete mysql-workbench cascade

我真的很新ON DELETE CASCADE。当父评论在表格中被删除时,如何删除子评论?

表模式

'CREATE TABLE `comments` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `parent` int(11) NOT NULL,
  `comment` varchar(255) CHARACTER SET utf8mb4 NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=135 DEFAULT CHARSET=latin1'
Run Code Online (Sandbox Code Playgroud)

当前查询(失败)

ALTER TABLE comments
   ADD CONSTRAINT `delete_child`
   FOREIGN KEY (`parent`)
   REFERENCES `comments` (`id`)
   ON DELETE CASCADE
Run Code Online (Sandbox Code Playgroud)

错误代码:1452。

'CREATE TABLE `comments` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `parent` int(11) NOT NULL,
  `comment` varchar(255) CHARACTER SET utf8mb4 NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=135 DEFAULT CHARSET=latin1'
Run Code Online (Sandbox Code Playgroud)

这个SQLFiddle显示了我的情况。它适用于 SQLFiddle 但不适用于 MySQLWorkbench。

And*_*y M 7

该错误表明您在该parentId列中有无效的引用。

当您尝试插入包含无效引用的行、使用无效引用更新现有行或删除引用的行时,会显示此错误。当您尝试在已填充并包含对不存在的行的引用的列上创建外键约束时,您也会得到它,这就是您的情况。

解决方案:检查parentId列的内容并更正/删除无效的引用。