2012-07-11 60 views
0

我正在学习如何通过创建博客进行编程,并且我的一个要求是在创建新博客文章时递增帖子类别的“计数”列。使用一条SQL语句进行交易

至于现在,我必须使用下面的语句来完成此任务:

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

有没有办法对我来说,这两个合并成一个单一的SQL语句?如果没有,那么每当我创建一个具有该类别的新帖子时,是否有办法“自动化”计数字段的增量?

+0

你使用了哪个数据库? – Oded 2012-07-11 19:21:44

+0

@Oded我很抱歉 - 我正在使用MySQL 5.5.20 – 2012-07-11 19:22:57

回答

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);),它会自动增加你的计数。

2

您不能合并这些语句,因为他们在不同的表上执行两个不同的操作。但是,在一个事务包裹它们有效地使它们的原子伪单身声明:

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

你可以通过使用posts表的触发更新thigns。每次插入或删除记录时,都会触发运行更新查询。