简体   繁体   English

如何确保MySQL触发器是原子触发器?

[英]How do I make sure that a MySQL trigger is atomic?

While creating a blog, I've decided that using triggers would be a convenient way to add and remove posts while maintaining a counter within the category table. 创建博客时,我已经决定使用触发器将是添加和删除帖子的便捷方法,同时在类别表中保持一个计数器。 Here are my two triggers for incrementing and decrementing the counter in my categories table: 这是我的两个触发器,用于在我的类别表中递增和递减计数器:

delimiter |
CREATE TRIGGER increment_category_count AFTER INSERT ON posts
  FOR EACH ROW BEGIN
    UPDATE categories SET count = count + 1 WHERE id = NEW.category_id;
  END;
|
delimiter ;

delimiter |
CREATE TRIGGER decrement_category_count AFTER DELETE on posts
  FOR EACH ROW BEGIN
    UPDATE categories SET count = count - 1 WHERE id = OLD.category_id;
  END;
|
delimiter ;

I'm concerned that if something goes wrong while inserting or deleting a post, then my counters would become inaccurate. 我担心,如果在插入或删除帖子时出了点问题,那么我的计数器就会变得不准确。 Is there something in MySQL that would enable me to do a rollback in a trigger if something goes wrong? MySQL中是否存在某些错误,使我能够在触发器中进行回滚?

触发器中进行的任何更改都将与触发触发器的事务回滚(或提交)(假设您确实对表使用InnoDB)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM