mysql 鎖的認知

2021-09-02 10:24:41 字數 1101 閱讀 8751

mysql鎖的問題

1.myisam和memory採取表鎖,innodb支援表鎖和行鎖,但預設使用行鎖

2.表鎖:開銷小,加鎖快,不會出現死鎖,鎖粒度大,發生鎖衝突的概率最高,併發度最低。而行鎖完全相反

3.myisam的表鎖:

3.1 使用 show status like 'table_%',如果 table_locks_waited(表示不能立即獲取鎖的查詢次數)的值比較高,則表示表鎖爭用情況比較嚴重

3.2 表鎖分為:讀鎖和寫鎖,一般來說myisam的讀寫是序列的

1.其中,如果乙個執行緒活動讀鎖,其他執行緒只能「讀取」表而不能進行其他操作

2.如果獲取的是寫鎖,則會阻塞其他執行緒的讀寫操作,直到鎖被釋放

3.某執行緒加了讀鎖或寫鎖的情況下,該執行緒無法讀取操作任何其他未加鎖的表

4.myisam對錶進行select時候自動加讀鎖,進行insert、update、delete等自動加寫鎖

5.myisam會一次性獲取sql所需要的全部鎖,這就是不會出現死鎖的原因

6.sql語句中使用了表別名,如果使用顯示加鎖的語句,需要在加鎖語句中也對錶進行別名加鎖,例如:lock table bi_user as u read, bi_role as r read;

3.3 myisam的讀插併發,對於讀寫鎖都是不允許另乙個執行緒進行「插入」操作的,通過設定系統變數concurrent_insert來允許讀插併發:

concurrent_insert設定為0時,不允許併發插入

concurrent_insert設定為1時,如果被鎖表中沒有空洞(即中沒有被刪除的行),允許令一線程對鎖表從尾部插入資料,mysql預設的設定

concurrent_insert設定為2時,無論有沒有空洞,都允許對鎖表尾部插入資料

mysql樂觀鎖和悲觀鎖初認知

1 1 概念 它指的是對資料被外界 包括當前系統的其它事務,以及來自外部系統的事務處理 修改持保守態度,因此,在整個資料處理過程中,將資料處於鎖定狀態。1 2 悲觀鎖的實現方式 1 2 1 首先設定mysql的提交方式為非自動提交 手動提交 set autocommit 0 1 2 3 手動開啟事務...

mySql基本認知

事務,指它是乙個操作序列,要麼執行,要麼不執行,是乙個不可分割的工作單位。事務有著四大特性,acid。a 原子性,事務不可再分割,要麼發生 要麼不發生 c 一致性,事務在執行之前與執行之後的資料庫的完整性約束沒有被破壞,約束有 唯一約束,check約束,外來鍵約束 業務的一致性也得到保持。i 隔離性...

mysql索引認知

索引原理 資料在磁碟中是以 塊 的形式儲存的,所以一張表涉及的資料可能會存在多個塊中,而在磁碟中查詢資料則會根據字段是否為有序與無序來區分,無序情況 1.數值具有唯一性則需要查詢 總塊數 2 2.無序 無唯一性則需要查詢 總塊數 有序情況 1.數值唯一性 log2 總塊數 2 log2是二分查詢演算...