2012-08-30 90 views
-2

任何人都可以用2個php腳本測試mysql表鎖。和mysql_query()。如何用php鎖定mysql myisam表格

我試了一天,但我無法鎖定桌子。

我想當一個php腳本使用mysql表時,所有其他腳本將無法訪問它。

你能提供2個簡單測試的PHP腳本。如果你能展示他們如何在網上工作,那將是完美的。

但它應該是這樣的,當第一個腳本工作並鎖定mysql表時,其他腳本應該等待輪到它。

就像一個隊列一樣,只有一個腳本可以同時訪問myisam mysql表。但請在回答之前測試您的腳本,因爲我嘗試了很多建議,並且沒有任何效果。

+1

如發現自己的所有下面的評論下的任何答案人給想幫你,你是非常傲慢。任何試圖幫助像你這樣的人只是在浪費他們的時間。 –

+0

我很高興人們正在努力提供幫助。但是當我提出100次同樣的問題,而人們仍然給出錯誤的答案時,我該如何反應?或者,如果我不明白的東西。嘗試自己的建議。我根本無法得到它的工作。閱讀文檔。並嘗試各種事情。它沒有幫助。人們仍然在10個論壇上創建了10個問題。人們仍然給錯誤的建議。我怎麼反應? –

回答

1

我不會建議明確鎖定數據庫表,如果它不是針對事務級別來管理複雜的數據庫邏輯。查詢仍將被髮送出去,但由於鎖定或其他交易由於在錯誤時間獲取的鎖定而變得死鎖,則會導致查詢失敗。

因此,您喜歡在應用程序中使用任何外觀。

編輯:

http://dev.mysql.com/doc/refman/5.1/en/lock-tables.html

MySQL的文檔提供的鎖是如何運作的詳細解釋。使用它的會話會獲取鎖,因此如果您希望會話無法訪問某些表和別名,那麼您希望鎖定除希望拒絕會話訪問的表之外的所有內容。

不知道你想測試什麼鎖作爲例子。

 define("READ_LOCK", 0) 
     define("WRITE_LOCK",1) 
     function lock_on_to_tables ($Tables, $lockType=0) 
     { 
     $sql = "LOCK TABLES " 
     foreach ($Tables as $table) 
      $sql .= $table . " ,"; 
     $sql = substr($sql, 0, -1); // cut off last comma 
     $sql .= $lockType ? " WRITE" : " READ; 
     mysqli_query($sql); // or pdo or whatever is in use. 
     } 

解鎖只是

mysqli_query("UNLOCK TABLES") ; 
+0

好了。沒有腳本沒有語言意義。我嘗試了一切。如果你知道它自己嘗試。如果它適用於每個人。 –

+0

好,再次讀你的答案。你必須明白。我不是在試圖找出這種方法是否好。我只是想了解它是如何工作的。它不會......除非有人能夠展示它。因爲我無法鎖定。 –

+0

添加了基本的腳本佈局,注意它獲取會話的鎖定,所以它不會鎖定會話 – Ikstar

1

您不使用PHP鎖定表。你用mysql查詢來鎖定。所以基本上你會用in mysql docs所描述的語法來進行查詢,就是這樣。例如:

mysqli_query("LOCK TABLES my_table READ"); 

和DROP mysql_贊成mysqli_PDO

+0

我看不到腳本。我看到空的話) –

+0

Rly?爲什麼我需要愚蠢的mysqli和緩慢的PDO,如果我有簡單的任務?它將如何幫助。我嘗試過PDO,它不會改變任何東西。我可以執行任何查詢並不重要什麼鎖我 –

+0

也當你嘗試再次發佈的東西。首先閱讀「READ」指令甚至不會爲其他腳本鎖定某些內容。它不允許僅爲當前會話寫入表。其他會話可以編寫和閱讀並完成一切。 –

1

有兩種類型的鎖。一個是@ WebnetMobile.com發佈的。

另一個被稱爲諮詢鎖 - 你掛了一面旗子,每個人都被要求在被允許訪問之前檢查該旗子。它在你身上到處檢查需要它的標誌。但優點是你可以準確地調整鎖定到你的需求。

另外,使用InnoDB,您可以鎖定表的特定行,而不鎖定整個表。

參見:http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html

+0

謝謝你告訴我有多少種鎖。但我的問題是腳本。如果你認爲你知道如何去做。顯示每個人。 +你給我鏈接到innodb鎖定讀取,我告訴我有MyISAM。你爲什麼認爲所有腳本不能同時訪問那一個標誌?它可以做到。關於把行鎖定好,但它只適用於innodb。所有mysql引擎中都存在表鎖。但我沒有看到讓它工作的方法。如果你看到。測試它。 –