mysql 鎖分類概述
阿新 • • 發佈:2019-02-11
表級鎖
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 操作或者需要頻繁掃描整個表時,推薦使用表級鎖。