【发布时间】:2019-04-24 02:33:22
【问题描述】:
我目前正在努力在 MySQL 中实现触发器。 我的情况如下:
有两个数据库(emailregistration & answers)以不同的 id 作为主键。因此,我想使用电子邮件地址作为标识符来识别需要更新的正确行。(在两个表中都是相同的) 我想在数据库“注册”更新时启动触发器。然后,此触发器会更新“用户”中的值。 (表示为确认/取消订阅)
据我了解,问题是没有检查正确的行。我下面的代码直接来自 phpmyadmin。在其当前形式中,该语句用空行填充答案数据库,并根据需要更改确认/取消订阅的列,但它没有识别正确的行。
AFTER
UPDATE
------
INSERT INTO answers (confirmed, unsubscribed)
SELECT emailregistration.confirmed, emailregistration.unsubscribed
FROM emailregistration
WHERE emailregistration.email = email
-----
root@localhost
*This should translate into the following trigger code:*
CREATE TRIGGER DOI
AFTER UPDATE
ON emailregistration
FOR EACH ROW
BEGIN
INSERT INTO answers (confirmed, unsubscribed)
SELECT emailregistration.confirmed, emailregistration.unsubscribed
FROM emailregistration
WHERE emailregistration.email = email
END;
我希望我准确地描述了我的问题。如果我没有,请随时提出问题。 感谢您的帮助,非常感谢。
【问题讨论】:
-
在触发器中,我希望看到对 OLD 的引用。和/或新的。值(取决于触发器类型)“在触发器主体中,OLD 和 NEW 关键字使您能够访问受触发器影响的行中的列。” dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html
-
请添加其余的触发代码。
-
@P.Salmon 添加了触发代码,我刚刚阅读了文档的这个页面。据我了解,这仅在引用更新的单元格时才有帮助。如何继续比较 emailregistration 中的“email”列与答案中的“email”列,以确保它解决了正确的列?感谢您的帮助!
-
我对这个问题感到困惑。你说你'这个触发器然后更新“用户”中的一个值。 ' 但触发器中没有用户表,此外,您还插入了未更新的答案,这与您声明的要求不一致。并且查询模糊=符号右侧的电子邮件列属于哪个表?实际上每封电子邮件的答案表中只有 1 条记录吗?
-
嗯,也许我解释它真的很复杂。 “registration”表具有以下 3 列(email、subscribed、confirmed),“users”表具有相同的 3 列。现在我想比较两个数据库中 email 列的值,并将注册的确认和取消订阅的值分配给用户中的列。那有意义吗?左边的表格属于“答案”。这就是它变得更加复杂的地方,从技术上讲,它可能不止一次。
标签: mysql triggers phpmyadmin