案例准备工作
create table test_innodb_lock(
id int(11),
name varchar(16),
sex varchar(1)
)engine = innodb default charset=utf8;
insert into test_innodb_lock values(1,'100','1');
insert into test_innodb_lock values(3,'3','1');
insert into test_innodb_lock values(4,'400','0');
insert into test_innodb_lock values(5,'500','1');
insert into test_innodb_lock values(6,'600','0');
insert into test_innodb_lock values(7,'700','0');
insert into test_innodb_lock values(8,'800','1');
insert into test_innodb_lock values(9,'900','1');
insert into test_innodb_lock values(1,'200','0');
create index idx_test_innodb_lock_id on test_innodb_lock(id);
create index idx_test_innodb_lock_name on test_innodb_lock(name);
行锁基本演示
Session-1 | Session-2 |
---|
关闭自动提交功能 | 关闭自动提交功能 | 可以正常的查询出全部的数据 | 可以正常的查询出全部的数据 | 查询id 为3的数据 ; | 获取id为3的数据 ; | 更新id为3的数据,但是不提交; | 更新id为3 的数据, 出于等待状态 | 通过commit, 提交事务 | 解除阻塞,更新正常进行 | 以上, 操作的都是同一行的数据,接下来,演示不同行的数据 : | | 更新id为3数据,正常的获取到行锁 , 执行更新 ; | 由于与Session-1 操作不是同一行,获取当前行锁,执行更新; |
|