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】这个关键字来处理!
发布了59 篇原创文章 · 获赞 2 · 访问量 5592

猜你喜欢

转载自blog.csdn.net/LDR1109/article/details/100926109