1:数据表aa的设计结构
2: 使用navicat编写手动控制事务
3:先选择开启事务和执行更新操作,where b=1(表锁)是不带索引,不提交事务,(如果where b=1,b是索引就行锁)
4:这种情况就会抢占锁资源,此时只能对表aa进行查询,不能进行修改,删除和插入。通过如下命令可查看在执行的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
输出:
5:如果此时执行更新或者插入操作会进行lock锁资源等待,执行不成功,等待锁超时
**(特别注意:一个会话算一个事务,就是现在写的更新,插入和删除和上面开启事务的没有提交的更新不能在一个navicat的窗口,不然都算在一起未提交的事务里面)
6:可以通过命令查看那些SQL操作在等待锁资源
SELECT * FROM information_schema.`PROCESSLIST` where length(info) >0 ;
7:可以通过命令查看那些事务在等待锁和持有资源
8:如果要手动锁某个表可以说会用一下命令
--表示只能写不能读
LOCK TABLES aa READ
--表示只能读不能写
LOCK TABLES aa WRITE
--释放所以的读锁和写锁
UNLOCK TABLES
--查看那些表在占用锁还没释放
show OPEN TABLES where In_use > 0;