我無法在MySQL中鎖定表。我已經嘗試通過在不同的瀏覽器上同時運行兩個腳本來測試併發請求。表鎖定失敗
腳本1:
mysql_query("lock tables id_numbers write");
$sql = "select number from id_numbers";
$result = mysql_query($sql);
if ($record = mysql_fetch_array($result))
{
$id = $record['number'];
}
sleep(30);
$id++;
$sql = "update id_numbers set number = '$id'";
$result = mysql_query($sql);
mysql_query("unlock tables");
腳本2:
$sql = "select number from id_numbers";
$result = mysql_query($sql);
if ($record = mysql_fetch_array($result))
{
$id = $record['number'];
}
echo $id;
我啓動腳本1,然後再啓動腳本2.理論上,腳本2應該等待30秒以上,直到腳本1解鎖表,然後輸出更新的ID。但它會立即輸出原始ID,所以鎖定顯然不起作用。可能會出現什麼問題?
順便說一句,我知道我不應該仍然使用mysql_ *,但我現在堅持使用它。
編輯:我發現鎖確實發生在現場,但不是在我的開發網站上。他們都在共享主機上,所以我假設這兩者之間有一些不同的設置。任何想法可能是什麼?
您的鎖定書寫,不能讀取。 – 2012-11-04 02:59:07
@Dagon是的,我想要讀寫。根據MySQL手冊,「WRITE鎖定:持有鎖的會話可以讀取和寫入表,只有持有該鎖的會話才能訪問該表,在鎖釋放前,沒有其他會話可以訪問它。在寫入鎖定期間,其他會話的表格會被阻止。「這就是我想要的。 – gr8dane