1. 鎖介紹參考部落格:
按照鎖的粒度來說,mysql主要包含三種型別(級別)的鎖定機制:
全域性鎖:鎖的是整個database。由mysql的sql layer層實現的
表級鎖:鎖的是某個table。由mysql的sql layer層實現的 show open tables;
行級鎖:鎖的是某行資料,也可能鎖定行之間的間隙。由某些儲存引擎實現,比如innodb。
按照鎖的功能來說分為:共享讀鎖和排他寫鎖。
按照鎖的實現方式分為:悲觀鎖和樂觀鎖(使用某一版本列或者唯一列進行邏輯控制)
表級鎖和行級鎖的區別:
表級鎖:開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發生鎖衝突的概率最高,併發度最低;
行級鎖:開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖衝突的概率最低,併發度也最高;
2、讀寫鎖區別:
讀鎖寫鎖一旦加上了就不能訪問外面的表了;
讀鎖加上不可以修改表裡資料;
寫鎖加上可以修改自己的表資料;
--新建表
create table mylock (
id int(11) not null auto_increment,
name varchar(20) default null,
primary key (id)
); insert into mylock (id,name) values (1, 'a');
insert into mylock (id,name) values (2, 'b');
insert into mylock (id,name) values (3, 'c');
insert into mylock (id,name) values (4, 'd');
1、session1: lock table mylock read; -- 給mylock表加讀鎖
2、session1: select * from mylock; -- 可以查詢
3、session1:select * from tdep; --不能訪問非鎖定表
4、session2:select * from mylock; -- 可以查詢 沒有鎖
5、session2:update mylock set name='x' where id=2; -- 修改阻塞,自動加行寫鎖
6、session1:unlock tables; -- 釋放表鎖
7、session2:update mylock set name='x' where id=2; -- 修改執行完成
8、session1:select * from tdep; --可以訪問
加了讀鎖以後就無法對錶進行操作
2、表寫鎖
1、session1: lock table mylock write; -- 給mylock表加寫鎖
2、session1: select * from mylock; -- 可以查詢
3、session1:select * from tdep; --不能訪問非鎖定表
4、session1:update mylock set name='y' where id=2; --可以執行
5、session2:select * from mylock; -- 查詢阻塞
6、session1:unlock tables; -- 釋放表鎖
7、session2:4 rows in set (22.57 sec) -- 查詢執行完成
8、session1:select * from tdep; --可以訪問
MySQL資料庫學習筆記
一 資料庫介紹 1 為什麼需要資料庫 記憶體掉電後資料丟失,計算機的資源有限,因此需要把程式中用的資料儲存下來以便於關機後還能繼續使用 資料持久化 而儲存資料最簡單的方法就是把資料以檔案形式寫入到磁碟中。隨著程式的功能越來越複雜,需要操作的數量也就是越來越來大,管理資料就成了很大的問題,因為讀寫檔案...
MySQL 資料庫學習筆記 2
show variables show variables like character set 顯示所有和字符集相關的變數 show create database db name 顯示資料庫建立的字符集 windows 中 的my.ini 和 linux 中的 my.conf 中 設定了 mys...
Mysql資料庫學習筆記 一
啟動服務 net start mysql57 終止服務 net stop mysql57 命令列登入mysql管理系統mysql h 127.0.0.1 u root p 環境變數 修改提示符 prompt u h d 提示符改為 root 127.0.0.1 none 書寫規範 關鍵字和函式名大寫...