gpt4 book ai didi

mysql - 在删除级联时使用外键删除多个条目

转载 作者:行者123 更新时间:2023-11-29 00:41:59 25 4
gpt4 key购买 nike

我正在尝试从一个表中删除某个字段,我希望它从另一个表中删除所有关联字段(包含适当 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 表中复制所有数据。所以,不要在正在使用的大 table 上这样做......

关于mysql - 在删除级联时使用外键删除多个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11886607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com