Mysql的表級鎖和行級鎖

2022-02-03 19:03:23 字數 1046 閱讀 3166

mysql表級鎖分為讀鎖和寫鎖。

用法:lock table table_name [ as alias_name ] read

釋放鎖使用unlock tables.可以為表使用別名,如果一旦使用別名在使用的時候也必須採用別名。成功申請讀鎖的前提是當前沒有執行緒對該錶使用寫鎖,否則該語句會被阻塞。申請讀鎖成功後,其他執行緒也可以對該錶進行讀操作,但不允許有執行緒對其進行寫操作,就算是當前執行緒也不允許。當鎖住了a表之後,就只能對a表進行讀操作,對其他表進行讀操作會出現錯誤(tablename was not locked with lock tables)

用法: lock table table_name [as alias_name] [ low_priority ] write

同樣也可以使用別名,與讀鎖不同的是,寫鎖中可以指定鎖的優先順序。low_priority是一種比讀鎖更低優先順序的鎖,當多個執行緒同時申請多種鎖(low_priority,read,write)時,low_priority的優先順序最低。讀鎖申請成功的前提是沒有執行緒對錶加讀鎖和其他寫鎖,否則會被阻塞。

表級鎖在myisam和innodb中都有用到,建立鎖的開銷小,不會出現死鎖,由於鎖定的是整張表,所以併發度低。當需要頻繁對大部分資料做 group by 操作或者需要頻繁掃瞄整個表時,推薦使用表級鎖。

行級鎖是mysql中鎖定粒度最細的一種鎖,能大大減少資料庫操作的衝突,由於其粒度小,加鎖的開銷最大。行級鎖分為共享鎖和排他鎖。

用法:select ...lock in share mode;

mysql會對查詢結果中的每行都加共享鎖,當沒有其他執行緒對查詢結果集中的任何一行使用排他鎖時,可以成功申請共享鎖,否則會被阻塞。其他執行緒也可以讀取使用了共享鎖的表,而且這些執行緒讀取的是同乙個版本的資料。

用法:select ...lock for update;

mysql會對查詢結果中的每行都加排他鎖,當沒有其他執行緒對查詢結果集中的任何一行使用排他鎖時,可以成功申請排他鎖,否則會被阻塞。

行級鎖都是基於索引的,如果一條sql語句用不到索引是不會使用行級鎖的,會使用表級鎖。行級鎖的缺點是:由於需要請求大量的鎖資源,所以速度慢,記憶體消耗大。

MySQL行級鎖和表級鎖

鎖定用於確保事務完整性和資料庫一致性。鎖定可以防止使用者讀取其他使用者正在更改的資料,並防止多個使用者同時更改相同的資料。如果不使用鎖定,資料庫中的資料可能在邏輯上變得不正確,而針對這些資料進行查詢可能會產生想不到的結果。在電腦科學中,鎖是在執行多執行緒時用於強行限制資源訪問的同步機制,即用於在併發...

MySQL表級鎖和行級鎖

一 概述 相對其他資料庫而言,mysql的鎖機制比較簡單,其最顯著的特點是不同的儲存引擎支援不同的鎖機制。比如,myisam和memory儲存引擎採用的是表級鎖 table level locking innodb儲存引擎既支援行級鎖 row level locking 也支援表級鎖,但預設情況下是...

MySQL表級鎖和行級鎖

一 概述 相對其他資料庫而言,mysql的鎖機制比較簡單,其最顯著的特點是不同的儲存引擎支援不同的鎖機制。比如,myisam和memory儲存引擎採用的是表級鎖 table level locking innodb儲存引擎既支援行級鎖 row level locking 也支援表級鎖,但預設情況下是...