行锁:
偏向InnoDB存储引擎,开销大,加锁慢,会出现死锁,锁定粒度最小,发生锁冲突的概率最低,并发度最高。
InnoDB与MyISAM有两个最大的不同的特点:
- 支持事务
- 采用行级锁
事务具有四个属性–ACID
- 原子性:要么全执行,要么一个都不执行
- 一致性:在事务开始和完成时,数据都必须保持一致
- 隔离性:事务执行过程是独立的,不受外部条件影响的
- 持久性:事务完成之后,他对数据的修改是永久的,
并发事务的缺点:
- 更新丢失
- 脏读
- 不可重复读
- 幻读
查看当前数据的事务隔离级别可以使用SQL语句:
SHOW VARIABLES LIKE 'tx_isolation';
好吧,上网查了查是要先设置才会显示结果,看的视频可能已经设置过了,所以才会出现empty set可能。
实例分析:
表格建立:
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');
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;//刚刚开始我也不知道这个什么意思,但是通过视频里的实例讲解我大概懂了,操作如下
但是如果操作不同条的记录是不会出现阻塞的,是可以操作的。
而且如果出现索引失效的情况,行锁会升级表锁。
还有一种状况是,间隙锁危害!