赞
踩
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
SHOW VARIABLES LIKE ‘tx_isolation’;
共享锁(S):
又称为读锁,简称S锁,
排他锁(X):
又称为写锁,简称X锁,排他锁就是不能与其他锁并存
对于UPDATE、DELETE和INSERT语句,InnoDB会自动给涉及数据集加写锁(排它锁 x锁);
对于普通SELECT语句,InnoDB不会加任何锁;
共享锁(S):SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE
排他锁(X) :SELECT * FROM table_name WHERE ... FOR UPDATE
show status like ‘innodb_row_lock%’;
最后可以通过 SELECT * FROM information_schema.INNODB_TRX\G;
来查询正在被锁阻塞的sql语句
InnoDB 的行锁,就是通过锁住索引来实现的
所以,实验一为什么锁表,是因为查询没有使用索引,会进行全表扫描,然后把每一个隐藏的聚集索引都锁住了。
create table test_innodb_lock (a int(11),b varchar(16))engine=innodb;
insert into test_innodb_lock values(1,'b2');
insert into test_innodb_lock values(3,'3');
insert into test_innodb_lock values(4,'4000');
insert into test_innodb_lock values(5,'5000');
insert into test_innodb_lock values(6,'6000');
insert into test_innodb_lock values(7,'7000');
insert into test_innodb_lock values(8,'8000');
insert into test_innodb_lock values(9,'9000');
insert into test_innodb_lock values(1,'b1');
select * from test_innodb_lock;
create index test_innodb_a_ind on test_innodb_lock(a);
create index test_innodb_lock_b_ind on test_innodb_lock(b);
set autocommit = 0
错误操作导致 ==> 索引失效 ==> 行锁升级为表锁
由于在column字段b上面建了索引,如果没有正常使用,会导致行锁变表锁
mysql底层会自动类型转化,转化的同时会索引失效
INNODB行锁是通过给索引项加锁来实现的,即只有通过索引条件检索数据,InnoDB才使用行级锁,否则将使用表锁
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。