当前位置: 首页 > 面试题库 >

MySql触发器删除同一表中的子记录

俞博涛
2023-03-14
问题内容

我有一个在其中存储父级和子级记录的表。

我正在尝试创建一个触发器,该触发器将在删除父级时删除所有子级记录:

Delete From tbl Where ParentId = OLD.Id

虽然我可以成功保存触发器,但是在删除时出现此错误:

错误1442:可以在存储的函数/触发器中更新表``bl’‘,因为调用该语句的语句已经使用了该表

我究竟做错了什么?


问题答案:

看来这是不可能的:

您无法删除已激活触发器的表中的行。

您可能会考虑的其他一些选择:

  1. 编写删除父行和子行的应用程序逻辑,并在每次要删除父记录而不是直接删除父记录时调用此应用程序逻辑
  2. 级联删除关系在同一张表上,这似乎是可能的。
  3. 定期清除孤立子记录的清理过程。
  4. (由@Chris建议)通过添加另一个表将子记录与父记录分开。


 类似资料:
  • 问题内容: 范围:两个表。创建新的顾客时,他们会将有关他们的一些信息存储到第二张表中(这也使用触发器完成,它可以按预期工作)。这是我的表结构和关系的示例。 表1-> 顾客 表2-> patron_info 管理员可以管理顾客。当他们选择移走顾客时,将顾客从 桌子1 移开。此时, 表2 没有任何反应。 我只是想创建一个触发器,以便在表1的项目已删除时从表2中删除。这是我尝试过的… 最初,我尝试删除触

  • 问题内容: 我有一张叫的桌子。 它包含名为和的字段。现在,我想从表中删除所有包含表中已经包含的名字和姓氏的记录。 我使用mysql数据库,并且是表中的主键。 问题答案: 删除之后,将删除所有重复项,并为您提供最新的CustomerID 虽然有警告提示。我不知道您的用例,但是完全可以让两个人使用完全相同的名字(我们甚至一次都具有相同的地址)。

  • 主要内容:基本语法,删除触发器修改触发器可以通过删除原触发器,再以相同的名称创建新的触发器。 基本语法 与其他 MySQL 数据库对象一样,可以使用 DROP 语句将触发器从数据库中删除。 语法格式如下: DROP TRIGGER [ IF EXISTS ] [数据库名] <触发器名> 语法说明如下: 1) 触发器名 要删除的触发器名称。 2) 数据库名 可选项。指定触发器所在的数据库的名称。若没有指定,则为当前默认的数据库。

  • 问题内容: 有没有一种方法可以删除带有特定作业的预定触发器?似乎删除触发器的唯一方法是删除整个作业,然后重新注册该作业并触发。 我有一份可能有100多个触发器的作业,我真的不想删除该作业,而只需要删除1个触发器就重新注册所有触发器。 另外,是否有一种方法可以在配置触发器后立即停止调度程序执行作业? 谢谢 问题答案: 尝试 这接受触发器和组名作为参数,并且只会删除指定的触发器,而不是作业。 Quar

  • 问题内容: 我需要创建一个插入和删除触发器,两者都会做同样的事情。 我可以在一个触发器中创建它吗? 还是我需要两个单独的? 我环顾四周,似乎所有人都有一个要删除,另一个要插入。 问题答案: MySql不允许在同一触发器上发生多个事件。 一种选择是将您的代码放入一个过程中,并使每个触发器调用相同的过程-根据需要将尽可能多的旧行/新行信息传递给proc。

  • 以下是我想做的: 当表中有新的 时,我需要通过设置 ' 来更新中的行 = ,以表示特定(旧)帐户已被编辑。 要求不是操作新插入的列,而是使用< code>pk = NEW.edit_on操作已经存在的列 但是,我无法更新同一个表: 请建议一个解决方法 PS:我已经完成了更新同一表后在触发器中更新表、插入到同一表中触发器mysql、在同一表上用插入后触发器更新以及在表上用Insert和update在