mysql資料庫鎖

2021-10-01 03:33:03 字數 1103 閱讀 4113

表鎖

讀鎖會阻塞寫,但是不會阻塞讀操作。而寫鎖則會把讀和寫都阻塞

myisam索引結構: myisam索引用的b+ tree來儲存資料,myisam索引的指標指向的是鍵值的位址,位址儲存的是資料。

b+tree的資料域儲存的內容為實際資料的位址,也就是說它的索引和實際的資料是分開的,只不過是用索引指向了實際的資料,這種索引就是所謂的非聚集索引。

因此,過程為: myisam中索引檢索的演算法為首先按照b+tree搜尋演算法搜尋索引,如果指定的key存在,則取出其data域的值,然後以data域的值為位址,根據data域的值去讀取相應資料記錄。

innodb引擎的索引結構:

也是b+treee索引結構。innodb的索引檔案本身就是資料檔案,即b+tree的資料域儲存的就是實際的資料,這種索引就是聚集索引。這個索引的key就是資料表的主鍵,因此innodb表資料檔案本身就是主索引。

innodb的輔助索引資料域儲存的也是相應記錄主鍵的值而不是位址,所以當以輔助索引查詢時,會先根據輔助索引找到主鍵,再根據主鍵索引找到實際的資料。所以innodb不建議使用過長的主鍵,否則會使輔助索引變得過大。

建議使用自增的字段作為主鍵,這樣b+tree的每乙個結點都會被順序的填滿,而不會頻繁的**調整,會有效的提公升插入資料的效率。

上圖,可以看到葉節點包含了完整的資料記錄。這種索引叫做聚集索引。因為innodb的資料檔案本身要按主鍵聚集,所以innodb要求表必須有主鍵(myisam可以沒有),如果沒有顯式指定,則mysql系統會自動選擇乙個可以唯一標識資料記錄的列作為主鍵,如果不存在這種列,則mysql自動為innodb表生成乙個隱含字段作為主鍵,這個字段長度為6個位元組,型別為長整形。

而且,與myisam索引的不同是innodb的輔助索引data域儲存相應記錄主鍵的值而不是位址。換句話說,innodb的所有輔助索引都引用主鍵作為data域。

因此,過程為:將主鍵組織到一棵b+樹中,而行資料就儲存在葉子節點上,若使用」where id = 13」這樣的條件查詢主鍵,則按照b+樹的檢索演算法即可查詢到對應的葉節點,之後獲得行資料。若對name列進行條件搜尋,則需要兩個步驟:第一步在輔助索引b+樹中檢索name,到達其葉子節點獲取對應的主鍵。第二步使用主鍵在主索引b+樹種再執行一次b+樹檢索操作,最終到達葉子節點即可獲取整行資料。

mysql資料庫鎖 MySQL資料庫的鎖機制

在併發訪問情況下,很有可能出現不可重複讀等等讀現象。為了更好的應對高併發,封鎖 時間戳 樂觀併發控制 樂觀鎖 悲觀併發控制 悲觀鎖 都是併發控制採用的主要技術方式。鎖分類 按操作劃分 dml鎖,ddl鎖 按鎖的粒度劃分 表級鎖 行級鎖 頁級鎖 按鎖級別劃分 共享鎖 排他鎖 按加鎖方式劃分 自動鎖 顯...

MySQL資料庫鎖

mysql鎖分為表級鎖 頁級鎖和行級鎖。innodb 行級鎖 在特殊情況下會公升級為表級鎖,如給沒有加索引的非唯一字段加鎖,或者在普通索引中,使用模糊查詢使索引失效,導致加鎖時,公升級為表鎖 myisam 表級鎖 排他鎖又稱為寫鎖,乙個事務在一行資料加上排他鎖後,其他事務不能再在其上加其他的鎖,也修...

mysql資料鎖 mysql資料庫鎖有哪些

mysql資料庫中的鎖有 1 共享鎖,表示對資料進行讀操作 2 排他鎖,表示對資料進行寫操作 3 行鎖,對一行記錄加鎖,只影響一條記錄 4 意向鎖,為了在乙個事務中揭示下一行將要被請求鎖的型別。mysql資料庫鎖 1 共享鎖 shared lock,也叫s鎖 共享鎖 s 表示對資料進行讀操作。因此多...