2012-02-19 19 views
1

所以我有一個表讓我們稱之爲foo,它在每一行中都有一堆信息,再加上一個計數。我想要的是,每次在表上完成一個插入操作時,每行的count變量應該增加1.問題是我將有大量相同的行進入(這就是爲什麼我需要計數)所以我正在執行IGNORE命令,因爲我不希望我的表中有大量重複項。如何在MySQL中保留行的計數器

所以我的插入是這樣的:

INSERT IGNORE INTO foo (blah, blah, count) 
VALUES ("blah", "blah", 1); 

現在做更新我在做一個觸發器:

CREATE TRIGGER fooCount BEFORE INSERT ON foo 
FOR EACH ROW 
BEGIN 
    IF (new.blah1=new.blah2 and new.blah1=new.blah2) THEN 
    SET new.count=new.count + 1; 
    END IF; 
END; 

然而,這似乎並不奏效。有沒有人有任何其他建議或幫助如何更好地做到這一點?

+0

只是一個點你的觸發器有'new.blah1 = new.blah2'兩次。這是否是一個錯字,如果不是,你寫的意思是什麼? – Ben 2012-02-19 12:33:29

回答

-1

只是做一個簡單的查詢,插入前獲得最後Count值,那麼您的插入應該是這個樣子:

INSERT IGNORE INTO foo (blah, blah, count) VALUES ("blah", "blah", "$lastcount+1"); 
+2

這是個壞主意,因爲2個用戶可以同時插入數據。 – Kamil 2012-02-19 02:52:08

+0

我同意,但這並沒有說明,所以我只是假設他是唯一的做他們:D – rackemup420 2012-02-19 02:54:51

+0

這不會工作,因爲我不是唯一做插入。此外,這會嚴重減緩我的系統。 – Pompey 2012-02-19 04:27:17

0

林不知道,可以在MySQL的 (編輯)的工作。

嘗試建立這樣的SQL:

UPDATE Foo 
    SET count = count + 1 
    WHERE blah1 = 'blah' AND blah2 = "blah2" 


IF @@ROWCOUNT = 0 
    BEGIN 
     INSERT INTO foo(...) values(...) 
    END 

您將需要修改我的代碼在MySQL工作。在這裏你可以看到你所需要的所有信息:

http://dev.mysql.com/doc/refman/5.0/en/if-statement.html

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_row-count

+0

好的,謝謝我會看看這個 – Pompey 2012-02-19 04:30:48

+0

考慮過這段時間後,我想知道我的查詢是否比下面的傢伙好。我不知道如何併發在MySQL中工作 - 您可能需要使用表/行鎖定或類似「隊列」與精確的時間戳,以使該計數器正確。 – Kamil 2012-02-19 05:16:36

+0

我實際上能夠想到的是使用這個: INSERT INTO foo(...)values(...)ON DUPLICATE KEY UPDATE count = count + 1 這實際上完全處理了一切。即使這實際上不是原子的(我不確定它是否是原子的),它應該沒有關係,因爲我不是在尋找一個完全準確的答案,而是通過一些不應該成爲問題的方法。 感謝您的幫助! – Pompey 2012-02-19 05:53:59