2012-07-11 61 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。每次插入或刪除記錄時,都會觸發運行更新查詢。