Mysql鎖定表 解鎖句法

2021-04-07 12:12:20 字數 1952 閱讀 4594

lock tables tbl_name [as alias]

[, tbl_name [as alias] ...]

...unlock tables

lock tables 為當前執行緒鎖定表。unlock tables 釋放當前執行緒擁有的所有鎖定。當執行緒發出另乙個 lock tables,或當與伺服器的連線被關閉時,被當前執行緒鎖定的所有表將被自動地解鎖。

為了在 mysql 4.0.2 使用 lock tables ,你必須擁有乙個全域性的 lock tables 許可權和乙個在相關表上的 select 許可權。在 mysql 3.23 中,你對該錶需要有 select、insert、delete 和 update 許可權。

使用 lock tables 的主要原因是,仿效事務處理或在更新表時得到更快的速度。此後會有更詳細的描述。

如果乙個執行緒在乙個表上得到乙個 read 鎖,該執行緒 (和所有其它執行緒) 只能從表中讀取。如果乙個執行緒在乙個表上得到乙個 write 鎖,那麼只有擁有這個鎖的執行緒可以從表中讀取和寫表。其它的執行緒被阻塞。

read local 和 read 之間的不同就在於,當鎖被載入時,read local 允許非衝突(non-conflicting) insert 語句執行。如果當你載入著鎖時從 mysql 外部運算元據庫檔案,這將仍不能被使用。

當你使用 lock tables 是地,你必須鎖定所有你將使用的表,並且必須使用與你的查詢中將使用的別名相同!如果你在乙個查詢中多次使用乙個表(用別名),你必須為每乙個別名獲得乙個鎖。

write 鎖通過比 read 鎖有更高的許可權,以確保更新被盡快地處理。這就意味著,如果乙個執行緒獲得乙個 read 鎖,而同時另外乙個執行緒請求乙個 write 鎖,併發的 read 鎖請求將等待直到 write 執行緒得到了鎖並釋放了它。你可以使用 low_priority write 鎖,當該執行緒在等待 write 鎖時,它將允許其它的執行緒獲得 read 鎖。 你應該只使用 low_priority write 鎖,如果你確信這將是最後一次,當沒有執行緒將擁有 read 鎖。

lock tables 工作如下:

以內部定義的次序排序所有被鎖定的表 (從使用者立場說,該次序是不明確的)。

如果乙個表被以乙個讀鎖和乙個寫鎖鎖定,將寫鎖放在讀鎖之前。

一次只鎖定乙個表,只到執行緒得到所有的鎖定。

這個方案是為了確保,表鎖定死鎖釋放。 對於這個模式你仍然有些其它事情需要知道:

如果你對乙個表使用乙個 low_priority write 鎖定,這就意味著,mysql 將等待這個鎖,直到沒有執行緒請求乙個 read 鎖。當執行緒得到了 write 鎖,並等待獲得鎖定表列表中的下乙個表的鎖定時,其它所有的執行緒將等待 write 鎖被釋放。如果這在你的應用程式中會引起乙個嚴重的問題,你應該考慮將你的某些表轉換為事務安全表。

你可以使用 kill 安全地殺死乙個正在表鎖定的執行緒。檢視章節 4.5.5 kill 句法。

注意,你不應該 鎖定你正在對其使用 insert delayed 的表。這是因為,在這種情況下,insert 是通過單獨的執行緒完成的。

通常,你不需要鎖定任何表,因為所有單 update 語句都是原子的;其它的執行緒無法干擾當前執行的 sql 語句。當你無論如何希望鎖定表時,這裡有一些情況:

通過使用遞增更新 (update customer set value=value+new_value) 或 last_insert_id() 函式,你可以在很多情況下避免使用 lock tables。

你也可以使用使用者級鎖定函式 get_lock() 和 release_lock() 解決一些情況,這些鎖被儲存在伺服器上的乙個雜湊表中,並以 pthread_mutex_lock() 和 pthread_mutex_unlock() 實現以獲得高速度。檢視章節 6.3.6.2 輔助功能函式。

檢視章節 5.3.1 mysql 如何鎖定表,以獲取關於鎖定方案的更多資訊。

注意:lock tables 不是事務安全的,在嘗試鎖定乙個表之前,將自動地提交所有的活動事務。

mysql鎖表 解鎖

檢視mysql鎖表的情況 select from information schema.innodb trx show processlist殺掉查詢結果中鎖表的trx mysql thread id,其中trx mysql thread id對應 show processlist 的id kill...

Mysql解鎖行鎖定

1.查詢 正在執行的事務 select from information schema.innodb trx 2.殺死程序id 就是上面查詢結果集的trx mysql thread id列 kill 執行緒id 這樣行鎖鎖定就解決了 查詢mysql資料庫中還可以使用 檢視正在鎖的事務 select ...

登錄檔解鎖

登錄檔是 window 系統的中樞和心臟,它記錄著作業系統中絕大多數的設定。在 window 系統中有乙個附帶的登錄檔編輯工具,使用它可以很方便地訪問和修改登錄檔,這就是regedit。然而,現在網上的惡意程式利用登錄檔修改了ie的主頁後,它不僅僅修改了登錄檔,而且為了防止您使用登錄檔程式修改會禁止...