環境:mysql5.5,引擎innodb,sqlyog
行鎖,表鎖區別:其實就是看where後面的條件是否有有索引,有索引的時候就是行鎖,沒有索引的時候就是表索。
先建立表結構:
create table `lock_test` (
`id` int(11) not null auto_increment,
`name` varchar(200) default null,
`age` int(11) default null,
primary key (`id`)
) engine=innodb default charset=utf8;
再向裡面新增資料:
insert into lock_test (name,age) values('zangsan',15);
insert into lock_test (name,age) values('zangsan1',16);
insert into lock_test (name,age) values('zangsan2',17);
insert into lock_test (name,age) values('zangsan3',18);
insert into lock_test (name,age) values('zangsan4',19);
insert into lock_test (name,age) values('zangsan5',20);
一、無索引測試 :
session2:(在sqlyog中新開乙個連線)
update lock_test set age=30 where name = 'zangsan1' ;
此時你會發現這條sql一直處於處於等待狀態....
現在我們回到session1:中,再執行:commit;語句。
我們會在session2的視窗看到:
我們可以得出的結論是:在where條件後面接的條件是無索引的name欄位,雖然我們鎖的是值為zangsan的這條資料,實際上他是鎖了整個表。
二 有索引測試:
我們在session1視窗中執行:
alter table lock_test add index index_name(name);
然後再將上面的語過程重複一次。這時session2執行的update操作可以直接完成了。
我們可以得出的結論是:在where條件後面接的條件是帶索引的name欄位,他只會鎖住該行資料。
mysql行鎖表鎖區別 mysql表鎖和行鎖區別
一 表鎖 特點 偏向myisam儲存引擎,開銷小,加鎖快 無死鎖 鎖定粒度大,發生鎖衝突的概率最高,併發度最低。我們在編輯表,或者執行修改表的事情了語句的時候,一般都會給表加上表鎖,可以避免一些不同步的事情出現,表鎖分為兩種,一種是讀鎖,一種是寫鎖。我們可以手動給表加上這兩種鎖,語句是 lock t...
mysql事物鎖鎖表 mysql 事務 行鎖 表鎖
一 準備 select from information schema.innodb trx 查詢事務 select from information schema.innodb locks 查詢鎖 select from information schema.innodb lock waits 暫...
mysql行鎖的特性 MySql的表鎖行鎖及間隙鎖
常用命令 手動新增表鎖 lock table 表名稱 read write 表名稱2 read write 檢視表上加過的鎖 show open tables 刪除表鎖 unlock tables 1.表鎖 特點 1.每次操作鎖住整張表,開銷小,加鎖快 2.不會出現死鎖 3.鎖定粒度大,發生鎖衝突的...