我有一個表正在收集用戶輸入的數據。是我在這裏需要的交易嗎?
我要執行下面的SQL語句:我已經在2個select語句讀出
SELECT語句1
SELECT語句2
更新錶行
我想防止其他用戶在任何語句之間輸入新數據的可能性。
我已閱讀MySQL手冊,似乎我可以先鎖定表,但我更熟悉事務,並且想知道是否在3條語句中包裝事務將實現我想要的。我發現很難確定這將通過閱讀手冊(或者它只是我....)
我有一個表正在收集用戶輸入的數據。是我在這裏需要的交易嗎?
我要執行下面的SQL語句:我已經在2個select語句讀出
SELECT語句1
SELECT語句2
更新錶行
我想防止其他用戶在任何語句之間輸入新數據的可能性。
我已閱讀MySQL手冊,似乎我可以先鎖定表,但我更熟悉事務,並且想知道是否在3條語句中包裝事務將實現我想要的。我發現很難確定這將通過閱讀手冊(或者它只是我....)
這裏有兩個可能的問題範圍;交易(如果您使用支持交易的引擎,如InnoDB)將解決其中的一個問題。
事務在事務啓動時保持所有查詢都在數據庫狀態的快照上運行,並且在事務完成時應用所有修改或全部修改。這有效地解決了查詢的交錯和競爭條件。
但是,您聲明要防止用戶在任何語句之間輸入新數據。如果您希望確保提交請求的用戶從當前數據開始,那麼您需要實現自己的鎖定機制,或者至少需要一種方法來捕獲請求之間交叉引發問題的情況。
基本上,事務只會幫助查詢在併發請求中運行。如果這種情況下會出現一個問題:
當用戶2能夠提交自己的改變,而不
謝謝。這正是我所希望的。就我的目的而言,交易將起作用。 – 2013-03-17 23:39:11
哪個MySQL引擎? – APC 2013-03-17 21:58:52
InnoDB此刻 - 交易將起作用! – 2013-03-17 22:09:45