MySQL触发器-比较两个不同表的值

MySQL触发器-比较两个不同表的值,mysql,triggers,phpmyadmin,Mysql,Triggers,Phpmyadmin,我目前正在努力在MySQL中实现触发器。 我的设想如下: 有两个数据库emailregistration&answers,其中一组不同的ID作为主键。因此,我想使用电子邮件地址作为标识符来标识需要更新的正确行。这在两个表中是相同的 我想在更新数据库注册时启动触发器。然后,此触发器更新用户中的值。表示为已确认/未订阅 根据我的理解,问题是没有检查正确的行。我下面的代码直接来自phpmyadmin。在其当前形式中,该语句用空行填充应答数据库,并根据需要更改“确认/取消订阅”列,但它没有标识正确的行

我目前正在努力在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;
我希望我准确地描述了我的问题。如果我没有问,请随意提问。
谢谢你的帮助,非常感谢。

也许是这样的

drop table if exists r,u;
create table r(email varchar(3), subscribed varchar(1), confirmed varchar(1));
create table u(email varchar(3), subscribed varchar(1), confirmed varchar(1));

insert into r (email) values('aaa'),('bbb');
insert into u (email,subscribed,confirmed) values('aaa','x','x'),('bbb','y','y');
drop trigger if exists t;
delimiter $$
CREATE TRIGGER t 
AFTER UPDATE
ON r
FOR EACH ROW
BEGIN
     update u 
        set  subscribed = new.subscribed,
              confirmed = new.confirmed
        where email = new.email;

END $$
delimiter ;

update r set subscribed = 'n' where email = 'aaa';

select * from r;

+-------+------------+-----------+
| email | subscribed | confirmed |
+-------+------------+-----------+
| aaa   | n          | NULL      |
| bbb   | NULL       | NULL      |
+-------+------------+-----------+
2 rows in set (0.00 sec)

select * from u;

+-------+------------+-----------+
| email | subscribed | confirmed |
+-------+------------+-----------+
| aaa   | n          | NULL      |
| bbb   | y          | y         |
+-------+------------+-----------+
2 rows in set (0.00 sec)

如果这不是您所拥有的模型,则将其与预期结果一起添加到问题中。

在触发器中,我希望看到对旧模型的引用。和/或新的。值取决于触发器类型“在触发器正文中,旧关键字和新关键字使您能够访问受触发器影响的行中的列。请添加其余的触发器代码。@P.Salmon添加了触发器代码,我刚才已经阅读了这一页的文档。据我所知,这仅在引用更新的单元格时有用。我如何将emailregistration中的专栏电子邮件与answers中的专栏电子邮件进行比较,以确保它是正确的专栏?谢谢你的帮助!这个问题把我难住了。你说你'这个触发器然后更新用户中的一个值'但是触发器中没有用户表,而且您插入的答案没有更新,这与您声明的要求不符。而且查询很模糊,=符号右侧的电子邮件列属于哪个表?事实上,每封邮件的回答表中只有一条记录吗?嗯,也许我解释得有点复杂。注册表有以下3列电子邮件、订阅、确认,用户表有相同的3列。现在,我想比较两个数据库中电子邮件列的值,并将已确认和未订阅的注册值分配给用户中的列。这有意义吗?左边的表格属于答案。这就是它变得更加复杂的地方,从技术上讲,它可能不止一次。非常感谢您提供这个,我明天将测试它!