【问题标题】:MySQL Trigger: Delete From Table AFTER DELETEMySQL 触发器:删除后从表中删除
【发布时间】:2012-08-02 19:53:02
【问题描述】:

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

表 1-> 顾客

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

表 2 -> patron_info

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

管理员可以管理读者。当他们选择移除一位顾客时,该顾客将从 table 1 patrons 中移除。此时,table 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。我不知道此时错误是什么。我尝试了几种不同的变体。另外,我需要在这里使用分隔符吗?

谁能帮助我恢复理智?

【问题讨论】:

  • 您需要什么帮助?你真正的问题是什么?
  • @vivek_jonam 删除触发器不会触发。它在第 6 行的“END”上给了我一个 sytnax 错误。另外,我是否将其包装在 DELIMETER $$ 中?
  • @Ohgodwhy:只是关于 memcache 问题的注释 - 它仅在我添加后才链接。在我这样做之前,“相关”中没有。

标签: mysql triggers mysql-error-1046


【解决方案1】:

我认为触发代码有错误。 由于您要删除所有带有已删除读者 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 代码,也请使用分隔符。

【讨论】:

  • 呸呸呸呸呸。这一切最终都成为我 WHERE 子句中的分号。我真是个傻瓜。感谢您的 vivek,非常感谢!
  • 为什么只为一个语句使用复合语句块? CREATE TRIGGER syntax 没有要求这样做。
  • 别忘了“;” - 应该是粗体
【解决方案2】:

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

【讨论】:

  • 如果表引擎支持外键,在使用触发器之前应该优先使用这个解决方案。
【解决方案3】:
create trigger doct_trigger
after delete on doctor
for each row
delete from patient where patient.PrimaryDoctor_SSN=doctor.SSN ;

【讨论】:

    猜你喜欢
    • 2020-09-30
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多