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

Ohg*_*why 19 mysql triggers mysql-error-1046

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

表1-> 顾客

+-----+---------+-----+
+  id +   name  + val +
+=====+=========+=====+
+  37 +  george +  x  +
+-----+---------+-----+
+  38 +  sally  +  y  +
+-----+---------+-----+
Run Code Online (Sandbox Code Playgroud)

表2 - > patron_info

+----+-----+----------+
+ id + pid +   name   +
+----+-----+----------+
+  1 +  37 +  george  +
+----+-----+----------+
+  2 +  38 +  sally   +
+----+-----+----------+
Run Code Online (Sandbox Code Playgroud)

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

当表1删除了一个项目时,我只是尝试创建一个从表2中删除的触发器.这是我试过的......

最初,我尝试放下触发器(如果它存在)(只是为了清除空气)......

DROP TRIGGER IF EXISTS log_patron_delete;
Run Code Online (Sandbox Code Playgroud)

然后我尝试创建触发器......

CREATE TRIGGER log_patron_delete AFTER DELETE on patrons
FOR EACH ROW
BEGIN
DELETE FROM patron_info
    WHERE patron_info.pid = patrons.id
END
Run Code Online (Sandbox Code Playgroud)

此时,我收到语法错误1046: Check syntax near END on line 6.我不知道此时的错误是什么.我尝试了几种不同的变化.另外,我需要在这里使用分隔符吗?

任何人都可以帮助恢复我的理智吗?

viv*_*nam 42

我认为触发代码有错误.由于您要删除所有已删除的顾客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
Run Code Online (Sandbox Code Playgroud)

别忘了";" 在删除查询上.此外,如果您在控制台窗口中输入TRIGGER代码,也可以使用分隔符.

  • Maaaaaaaaaaaaaaaaaan.它最终成为我的WHERE子句中的分号.我是个傻瓜.感谢vivek,非常感谢! (4认同)

And*_* G. 15

为什么不patron_info在外键.pid 上设置ON CASCADE DELETE ?