2012-05-27 68 views
1

我可以使用此功能,而不是「LOCK TABLES」查詢?pdo :: beginTransaction是否鎖表?

例子:

pdo::beginTransaction(); 

    SELECT id AS last_id FROM t WHERE... 
    INSERT INTO t (id,...) VALUES (last_id+1,....) 

pdo::commit(); 

回答

4

這個問題的答案是:這取決於。最重要的資源,幫助您瞭解正是它,它不會做,它的工作原理是here

對於開球,這取決於底層的驅動程序(MySQL和MSSQL,等等等等)是否支持事務處理功能在所有。如果驅動程序不支持事務,pdo::beginTransaction();將失敗,並返回FALSE,和您所有的疑問將被立即執行。這並不是說LOCK TABLES查詢會失敗 - 這取決於底層數據庫引擎是否支持它。

事實上,至少在MySQL中,pdo::beginTransaction()遵循與START TRANSACTION聲明相同的規則。它不會立即鎖定表,它只是確保了這是交易的一部分查詢遵循ACID規則。

我不會去的到底是哪組合將工作,他們會做什麼,因爲他們在我鏈接到文件的長度覆蓋全部細節,並沒有在我沒有任何意義又寫了這一切。