MySQL的鎖機制

MySQL數據庫是一種常見的小型關係數據庫,在網站的搭建中經常用到。MySQL現在屬於ORACLE公司,最新版本是5.6。說道它的鎖機制,首先要先說一下MySQL的存儲引擎。

    存儲引擎說白了就是如何存儲數據、如何爲存儲的數據建立索引和如何更新、查詢數據等技術的實現方法。因爲在關係數據庫中數據的存儲是以表的形式存儲的,所以存儲引擎也可以稱爲表類型(即存儲和操作此表的類型)。
    在Oracle 和SQL Server等數據庫中只有一種存儲引擎,所有數據存儲管理機制都是一樣的。而MySql數據庫提供了多種存儲引擎。用戶可以根據不同的需求爲數據表選擇不同的存儲引擎,用戶也可以根據自己的需要編寫自己的存儲引擎。

            我們先來看看MySQL支持的存儲引擎,使用 show engines命令可以查看所支持的引擎,看你的MySQL當前默認的存儲引擎:mysql>show variables like '%storage_engine%';你要看某個表用了什麼引擎(在顯示結果裏參數engine後面的就表示該表當前用的存儲引擎):mysql>show create table 表名

早期的版本中MySQL使用的是MyISAM引擎,現在默認使用InnoDB。InnoDB相對於MyISAM主要有三個不同:(1)支持事務  (2) 支持行級鎖  (3)支持外鍵約束。 一般來說,MyISAM適合(1)做很多count 的計算;(2)插入不頻繁,查詢非常頻繁;(3)沒有事務。InnoDB適合(1)可靠性要求比較高,或者要求事務;(2)表更新和查詢都相當的頻繁,並且表鎖定的機會比較大的情況。MyISAM的訪問速度要比InnoDB要快,加了索引也是。

MEMORY(heap):這種類型的數據表只存在於內存中。它使用散列索引,所以數據的存取速度非常快。因爲是存在於內存中,所以這種類型常應用於臨時表中。

1.對於MyISAM

    它支持的是表級鎖,分爲讀鎖和寫鎖。讀鎖:使用select自動添加。寫鎖:insert,delete等DML語句自動添加。因爲是對整個表加鎖,所以它不會發生死鎖的情況。顯示加鎖使用lock和unlock命令。


2.對於InnoDB

    它支持表級鎖和行級鎖,默認採用行級鎖。行級鎖分爲共享鎖和排他鎖。對於DML自動添加排他鎖,對於select不會添加任何鎖。

加共享鎖: select... lock in share mode;

加排他鎖: select... for update;

要避免交叉加排他鎖,以免產生死鎖的情況。Mysql會自動檢查出死鎖的情況。Mysql默認自動提交,

set @@autocommit=0;可以關閉自動提交。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章