2012-04-04 57 views
1

對於一個遊戲,我試圖實現一個分數表。根據遊戲邏輯,當一個用戶每隔幾分鐘完成一輪時,分數通常會改變;但不保證兩個用戶將同時完成。在MySQL表中替換整個數據

爲了不重新計算每次用戶檢查分數時的分數,我打算將分數數據保存在永久性表中,每次完成一輪後都會更新。

我打算

TRUNCATE TABLE scores; INSERT INTO SCORES SELECT .... 

來實現這一點,但我關心的是,當兩個用戶完成在同一時間發生的事情。我在一個連接中傳遞整個查詢(如果這很重要,則從ASP.NET中),但是兩個查詢一起被視爲原子?或者您是否建議我必須實施手動交易邏輯?

如果您建議使用事務處理,那麼將查詢與「BEGIN TRAN ... END TRAN」放在一起就足夠了,您是否建議使用MyISAM或InnoDB作爲「分數」表?

如果有問題,我的MySQL版本是5.0.92-log。

+0

爲什麼每次計算分數時都要截斷表格? – Jordan 2012-04-04 21:51:45

回答

0

兩個查詢只有在事務內部執行時纔是原子的。即使這樣,他們也只會對世界其他地方產生影響。在交易內部,它仍然是兩個完全獨立的操作。

事務不會保護您免受對數據集進行操作的兩位以上的用戶。您仍然必須在相關表上建立鎖定以防止併發訪問。