使用一个SQL语句进行事务

时间:2012-07-11 19:19:55

标签: mysql sql transactions

我正在学习如何通过创建博客进行编程,我的一个要求就是在创建新博客帖子时增加帖子类别的“计数”列。

就目前而言,我必须使用以下语句来完成此任务:

INSERT INTO posts (..., ..., category_id) VALUES (..., ..., 5);
UPDATE categories SET count = count + 1 WHERE id = 5

我有什么方法可以将这两者合并为一个SQL语句?如果没有,每当我创建一个具有该类别的新帖子时,有没有办法“自动化”计数字段的增量?

2 个答案:

答案 0 :(得分:2)

您无法组合这些语句,因为它们在不同的表上执行两种不同的操作。但是将它们包装在事务中有效地使它们成为一个原子伪单一语句:

start transaction;
insert into posts blah blah blah;
update categories blah blah blah;
commit;

您可以使用posts表上的触发器更新thigns。无论何时插入或删除记录,您都有触发器运行更新查询。

答案 1 :(得分:1)

您可以使用trigger自动执行此操作。

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

然后,当您在帖子(INSERT INTO posts (..., ..., category_id) VALUES (..., ..., 5);)中插入一行时,它会自动增加您的点数。