MySQL触发器之删除:一对一,实践操作

情景:A表和B表,一对一关系。当删除A表中的一条数据时,B表中与A表关联的数据也要删除,如删除A.clo_a=1的数据,B.col_a=1的数据,也要删除!

表A(user_step_group)
+--------+--------+-----------------+
| usg_id | userid | usg_total_steps |
+--------+--------+-----------------+
|      1 |   5047 |           46339 |
|      2 |   5046 |               0 |
+--------+--------+-----------------+

表B(user_step_group_member)
+---------+--------+------------+----------------+-----------------+
| usgm_id | usg_id | usgm_steps | usgm_get_steps | usgm_help_steps |
+---------+--------+------------+----------------+-----------------+
|       1 |      1 |      17134 |            500 |             377 |
|       2 |      1 |      24754 |            500 |            3074 |
+---------+--------+------------+----------------+-----------------+

触发器
DELIMITER $$

CREATE
    TRIGGER delete_group_relation_info AFTER DELETE
    ON `user_step_group`
    FOR EACH ROW BEGIN
   DELETE FROM `user_step_group_member` WHERE usg_id = old.usg_id;
    END$$

DELIMITER ;

总结:
    关于删除的触发器,有一个点可能会让人产生困惑,即删除A表的一条数据,B表的数据删除的时候,怎么呼应A表的那条数据?一开始,我这里做的是关联删除,结果,想删的数据(一条)没删掉,不删除的(多条)数据全删了,瞬间蒙圈!这是个误区,一定要注意,BEGIN和END之间的那个语句,一定不是关联删除,而是在where子句通过【old】这个关键字来处理!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值