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

MySQL触发器:删除后从表中删除

方季同
2023-03-14
问题内容

范围:两个表。创建新的顾客时,他们会将有关他们的一些信息存储到第二张表中(这也使用触发器完成,它可以按预期工作)。这是我的表结构和关系的示例。

表1-> 顾客

+-----+---------+-----+
+  id +   name  + val +
+=====+=========+=====+
+  37 +  george +  x  +
+-----+---------+-----+
+  38 +  sally  +  y  +
+-----+---------+-----+

表2-> patron_info

+----+-----+----------+
+ id + pid +   name   +
+----+-----+----------+
+  1 +  37 +  george  +
+----+-----+----------+
+  2 +  38 +  sally   +
+----+-----+----------+

管理员可以管理顾客。当他们选择移走顾客时,将顾客从 桌子1 移开patrons。此时, 表2 没有任何反应patron_info

我只是想创建一个触发器,以便在表1的项目已删除时从表2中删除。这是我尝试过的…

最初,我尝试删除触发器(如果存在)(只是为了清除空气)…

DROP TRIGGER IF EXISTS log_patron_delete;

然后,我尝试稍后创建触发器…

CREATE TRIGGER log_patron_delete AFTER DELETE on patrons
FOR EACH ROW
BEGIN
DELETE FROM patron_info
    WHERE patron_info.pid = patrons.id
END

在这一点上,我得到语法错误1046: Check syntax near END on line 6。我不知道这是什么错误。我尝试了几种不同的变体。另外,我是否需要在此处使用分隔符?

谁能帮助我恢复理智?


问题答案:

我认为触发html" target="_blank">代码中有错误。当您要删除所有带有已删除顾客ID的行时,必须使用 old.id (否则它将删除其他ID)

尝试将其作为新触发器:

CREATE TRIGGER log_patron_delete AFTER DELETE on patrons
FOR EACH ROW
BEGIN
DELETE FROM patron_info
    WHERE patron_info.pid = old.id;
END

不要忘记“;” 在删除查询上。同样,如果要在控制台窗口中输入TRIGGER代码,则也要使用定界符。



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

  • 问题内容: 我有一个在其中存储父级和子级记录的表。 我正在尝试创建一个触发器,该触发器将在删除父级时删除所有子级记录: 虽然我可以成功保存触发器,但是在删除时出现此错误: 错误1442:可以在存储的函数/触发器中更新表``bl’‘,因为调用该语句的语句已经使用了该表 我究竟做错了什么? 问题答案: 看来这是不可能的: 您无法删除已激活触发器的表中的行。 您可能会考虑的其他一些选择: 编写删除父行和

  • 我正在使用ListSelectionListener从所选行更新我的JTextField(countryTxt)。 但是,当我选择一行并单击按钮时,它会弹出一个异常。当我没有在表格中选择一行并单击按钮时,一切正常。显然,我可以在未触发事件时删除一行。因此,我的问题是:如何在触发事件后删除一行。提前谢谢。

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

  • 问题内容: 从视图中删除一行,是否会从创建该视图的基表中删除相应的行?我正在使用MySQL。 问题答案: 是的,它会的。唯一需要注意的是权限。 引用官方文档 有些观点是可更新的。也就是说,您可以在诸如UPDATE,DELETE或INSERT之类的语句中使用它们来更新基础表的内容。为了使视图可更新,视图中的行与基础表中的行之间必须存在一对一的关系。还有某些其他构造会使视图不可更新。

  • 问题内容: 这是正确的方法吗? 问题答案: 对,那是正确的。在这里工作正常: 如果对您不起作用,则可以修改此示例以显示您遇到的问题。