mysql - MySQL 触发器 - 比较两个不同表的值
问题描述
我目前正在努力在 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)
如果这不是您拥有的模型,则将其与预期结果一起添加到问题中。
推荐阅读
- google-tag-manager - Google 跟踪代码管理器 (AMP) 上的自定义图片
- spring - spring拦截的恶意请求
- scala - 在 Apache Flink 中读取超过 22 列的 CSV
- python - Pandas Dataframe 检查 id 在时间间隔内是否出现大于 1
- java - 如何在java中根据格式为20180828_021335的文件夹名称查找最新文件夹
- kubernetes - kubernetes 网络策略 - 出口策略不会阻止流量流出
- powershell - 将主机名存储在变量中
- django - Webpack 产品配置与开发配置问题
- python - matplotlib - 在 y 轴上每组在 x 轴上创建条形图
- c# - 如何在类库中使用 log4net