[英]Delete multiple entries with foreign key on delete cascade
我试图从一个表中删除某个字段,我希望它从另一个表中删除所有关联的字段(包含适当 fk 的字段)。
表格1
id | name | fname
表 2
id | table1Id | ...
table1Id 被设置为引用 Table1 主键的外键,我已经设置了ON DELETE CASCADE
现在我的代码很简单,它从 Table1 中删除行,如下所示:
function deleteWill($Id)
{
$stmt = $this->db->stmt_init();
if($stmt->prepare('DELETE FROM Table1 where id= ?'))
{
$stmt->bind_param("i", $Id);
$stmt->execute();
$stmt->close();
return true;
}
else
{
$stmt->close();
return false;
}
}
但是CASCADE
选项不起作用!
这是否与我在 Table2 中有多行具有相同 fk 的事实有关?
如果是这样,我该如何解决这个问题,以便它删除 Table2 中的所有关联行?
不,Table2 中的多行应该不是问题。
没有足够的信息来确定导致您观察到的行为的原因。 如果您的语句成功完成,并且正在从 Table1 中删除预期的行,但没有删除 Table2 中的匹配行...
那么第一个怀疑是您的表使用的是 MyISAM 引擎而不是 InnoDB 引擎。 (MyISAM 不强制执行外键约束,但 InnoDB 强制执行。)输出:
SHOW CREATE TABLE Table1
SHOW CREATE TABLE Table2
将显示正在使用的引擎。 我会从那里开始。 还有一些其他的可能性,比如验证foreign_key_check = 1
;
要将表的引擎从 MyISAM 更改为 InnoDB:
ALTER TABLE Table1 ENGINE = InnoDB ;
这将需要重建整个表; 它基本上需要创建一个新的 InnoDB 表并从 MyISAM 表中复制所有数据。 所以,不要在大桌子上使用它时这样做......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.