范围:两个表。创建新的顾客时,他们会将有关他们的一些信息存储到第二张表中(这也使用触发器完成,它可以按预期工作)。这是我的表结构和关系的示例。
表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。
patrons
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。我不知道这是什么错误。我尝试了几种不同的变体。另外,我是否需要在此处使用分隔符?
1046: Check syntax near END on line 6
谁能帮助我恢复理智?
我认为触发代码中有错误。当您要删除所有带有已删除顾客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代码,则也要使用定界符。