2011-06-15 80 views
0

我有一種情況需要鎖定2個表格,直到單獨完成這兩個表格的某些操作。爲此我選擇了「交易」。 因此,在「START TRANSACTION」和「COMMIT」之間,如果有人試圖插入這些表,這些查詢會發生什麼?他們會被保留在隊列中並在交易完成後執行? 理想情況下,我的要求是什麼..他們不應該插入,直到我的交易已經承諾。在提交事務之前,在該事務中正在使用的表上的查詢會發生什麼?

請任何人告訴我的情況。

在此先感謝! SuryaPavan

+0

考慮閱讀手冊:http://dev.mysql.com/doc/refman/5.5/en/lock-tables.html – 2011-06-15 14:17:00

回答

1

當交易啓動時,它與世界其他地方隔離。這是我在ACID

在交易過程中,如果有人試圖插入任何內容 - 即會發生插入,但不會中斷您以任何方式執行的交易。相同的規則適用於另一個方向。

如果你有要求直接鎖定整個表插入,直到事務成功 - 這聽起來像一個糟糕的設計,你應該重新考慮,如果你在做什麼是真正的最佳。

+0

基本上,我想截斷一個表並更新另一個表(這兩個表都是相互關聯的)有關)。所以,直到這兩個操作完成..我不想讓任何人輸入記錄到這些表中。如果有任何請求,他們應該在隊列中,直到我的事務完成。那是我的要求是...仍然聞起來不好? :) – SuryaPavan 2011-06-15 15:18:13

+1

好吧,它現在聞起來更糟:)爲什麼你會需要在生產模式下截斷表?如果您需要這樣的功能 - 在事務之前鎖定表,執行事務,以便執行兩個(或多少個查詢)查詢,然後解鎖表。這將使每個人都可以執行他們想要執行的任何操作,並確保你截斷所有內容。請記住,這不是最好的解決方案,您需要使用InnoDB才能正常工作。 – 2011-06-15 15:24:31

0

如果在您的交易提交之前(即在您的交易中)插入了它們,那麼交易將毫無用處。

我假設你使用的是mysql(因爲你的問題是用這個標記的)......爲什麼不打開兩個命令行會話到你的數據庫並試着看看會發生什麼?這比發佈您的問題並等待答案花費的時間少得多,您可能在此過程中學到更多。

相關問題