##=========================================##

测试数据:CREATE TABLE`tb4001` (

`id`bigint(20) NOT NULLAUTO_INCREMENT,

`c1`int(11) DEFAULT NULL,

`c2`varchar(200) DEFAULT NULL,

`c3`int(11) DEFAULT NULL,PRIMARY KEY(`id`),UNIQUE KEY`idx_c1` (`c1`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;insert into tb4001(c1,c2,c3) values(2,2,2);insert into tb4001(c1,c2,c3) values(4,4,4);insert into tb4001(c1,c2,c3) values(7,7,7);insert into tb4001(c1,c2,c3) values(8,8,8);

##=========================================##

##测试1:在没有索引的列上更新

##事务隔离级别:RC

会话1:SET SESSION tx_isolation='READ-COMMITTED';

STARTTRANSACTION;SELECT @@GLOBAL.tx_isolation, @@SESSION.tx_isolation;update tb4001 set c2=777 where c1=7;

##=========================================##

会话2:SET SESSION tx_isolation='READ-COMMITTED';

STARTTRANSACTION;SELECT @@GLOBAL.tx_isolation, @@SESSION.tx_isolation;insert into tb4001(c1,c2,c3) values(6,6,6);

会话2未被阻塞成功执行

##=========================================##

会话2:SET SESSION tx_isolation='READ-COMMITTED';

STARTTRANSACTION;SELECT @@GLOBAL.tx_isolation, @@SESSION.tx_isolation;insert into tb4001(c1,c2,c3) values(7,7,7);

##执行结果:会话2被阻塞

使用SHOW ENGINE INNODB STATUS \G查看阻塞发生时的锁信息

mysql tablesin use 1, locked 1LOCK WAIT3 lock struct(s), heap size 1136, 3row lock(s)

MySQL thread id53, OS thread handle 140674620851968, query id 1331 127.0.0.1admin updatingdelete from tb4001 where c3=8

------- TRX HAS BEEN WAITING 5 SEC FOR THIS LOCK TO BE GRANTED:

RECORD LOCKS space id 75 page no 3 n bits 80 index PRIMARY of table `test1`.`tb4001` trx id 10606lock_mode X waiting

Record lock, heap no11 PHYSICAL RECORD: n_fields 6; compact format; info bits 0

0: len 8; hex 8000000000000003; asc;;1: len 6; hex 000000002966; asc)f;;2: len 7; hex 34000000270908; asc 4 ';;

3: len 4; hex 80000007; asc ;;

4: len 3; hex 373737; asc 777;;

5: len 4; hex 80000007; asc ;;

------------------

---TRANSACTION 10598, ACTIVE 567 sec

4 lock struct(s), heap size 1136, 3 row lock(s), undo log entries 1

MySQL thread id 52, OS thread handle 140674621650688, query id 1306 127.0.0.1 admin

##=========================================##

会话2:

SET SESSION tx_isolation='READ-COMMITTED';

START TRANSACTION;

SELECT @@GLOBAL.tx_isolation, @@SESSION.tx_isolation;

update tb4001 set c2=888 where c1=8;

会话2未被阻塞成功执行

##=========================================##

会话2:

SET SESSION tx_isolation='READ-COMMITTED';

START TRANSACTION;

SELECT @@GLOBAL.tx_isolation, @@SESSION.tx_isolation;

update tb4001 set c1=7 where c1=8;

会话2未被阻塞成功执行

##执行结果:会话2被阻塞

使用SHOW ENGINE INNODB STATUS \G查看阻塞发生时的锁信息

---TRANSACTION 10686, ACTIVE 14 sec updating or deleting

mysql tables in use 1, locked 1

LOCK WAIT 4 lock struct(s), heap size 1136, 4 row lock(s), undo log entries 1

MySQL thread id 53, OS thread handle 140674620851968, query id 1480 127.0.0.1 admin updating

update tb4001 set c1=7 where c1=8

------- TRX HAS BEEN WAITING 7 SEC FOR THIS LOCK TO BE GRANTED:

RECORD LOCKS space id 76 page no 4 n bits 72 index idx_c1 of table `test1`.`tb4001` trx id 10686 lock mode S waiting

Record lock, heap no 4 PHYSICAL RECORD: n_fields 2; compact format; info bits 0

0: len 4; hex 80000007; asc ;;

1: len 8; hex 8000000000000003; asc ;;

------------------

---TRANSACTION 10675, ACTIVE 265 sec

3 lock struct(s), heap size 1136, 2 row lock(s), undo log entries 1

MySQL thread id 52, OS thread handle 140674621650688, query id 1450 127.0.0.1 admin

##=========================================##

会话2:

SET SESSION tx_isolation='READ-COMMITTED';

START TRANSACTION;

SELECT @@GLOBAL.tx_isolation, @@SESSION.tx_isolation;

delete from tb4001 where c1=8;

会话2未被阻塞成功执行

##=========================================##

mysql 事物 锁行 测试_MySQL Transaction--RC事务隔离级别下加锁测试相关推荐

  1. mysql 事物 锁行 测试_MySQL Transaction--RR事务隔离级别下加锁测试

    ============================================================================== 按照非索引列更新 在可重复读的事务隔离级别 ...

  2. mysql不同连接的事务_mysql中不同事务隔离级别下数据的显示效果--转载

    事务是一组原子性的SQL查询语句,也可以被看做一个工作单元.如果数据库引擎能够成功地对数据库应用所有的查询语句,它就会执行所有查询,如果任何一条查询语句因为崩溃或其他原因而无法执行,那么所有的语句就都 ...

  3. mysql四种输入_mysql四种事务隔离级别

    mysql事务并发问题 ACID什么的就不啰嗦了.mysql多个事务并发的时候,可能会出现如下问题: 1. 更新丢失 即两个事务同时更新某一条数据,后执行的更新操作会覆盖先执行的更新操作,导致先执行的 ...

  4. Mysql在可重复读事务隔离级别下怎么解决幻读的

    目录 前言 并发事务产生的问题 更新丢失 回滚丢失 覆盖丢失 脏读 不可重复读 幻读 快照读和当前读 幻读验证 快照读如何避免幻读 当前读如何避免幻读 可重复读隔离级别发生幻读情况 小结 前言 Mys ...

  5. MySQL数据库中,在读已提交和可重复读这两个不同事务隔离级别下幻读的区别

    目 录 1. 前 言 1.1 并发事务存在的问题 1.2 事务的隔离级别 1.3 快照读和当前读 2. 不同事务隔离级别下幻读的区别 2.1 读已提交下的幻读 2.2 可重复读下的幻读 2.2.1 情 ...

  6. mysql mvcc和行锁_mysql在RR的隔离级别下,究竟是通过MVCC解决幻读的还是通过行锁的next key算法解决的?...

    首先,我们需要搞懂几个隔离级别的意思和每个隔离级别会出现的问题.隔离级别分为:读未提交,读提交,可重复读和可串行化. 读未提交是最低级别的隔离级别,表示当一个事务还没有提交时,他所做的变更就被别的事务 ...

  7. MySQL事务隔离级别及场景测试

    查询事务隔离级别: select @@tx_isolation 查看系统当前隔离级别: select @@global.tx_isolation MySQL支持四种事务隔离级别: {READ UNCO ...

  8. mysql中不同事务隔离级别下数据的显示效果--转载

    事务是一组原子性的SQL查询语句,也可以被看做一个工作单元.如果数据库引擎能够成功地对数据库应用所有的查询语句,它就会执行所有查询,如果任何一条查询语句因为崩溃或其他原因而无法执行,那么所有的语句就都 ...

  9. 第二十二节: 以SQLServer为例介绍数据库自有的锁机制(共享锁、更新锁、排它锁等)和事务隔离级别 :

    一. 基本概念 1.共享锁:(holdlock) (1). select的时候会自动加上共享锁,该条语句执行完,共享锁立即释放,与事务是否提交没有关系. (2). 显式通过添加(holdlock)来显 ...

最新文章

  1. Java对象和XML之间的编排与反编排
  2. 开发日记-20190513 关键词 汇编语言(六)
  3. 二元运算符的运算符重载
  4. 一定要多角度看事物 | 今日最佳
  5. JavaFX官方教程(十一)之动画基础
  6. Express+Socket.IO 实现简易聊天室
  7. Oracle分页排序采坑记录
  8. 苹果双卡双待是哪一款_等12 mini还是买苹果11?实体店老板给出了答案,很有道理!...
  9. android xml 多行注释,C#中的XML多行注释 - 我做错了什么?
  10. 基于libpcan库can总线操作的Barrett 机械手控制及腕部六维力传感器驱动
  11. 一个月薪两万的Web安全工程师要掌握哪些技能?
  12. android霓虹灯源代码——基础编
  13. 最简短的加入收藏代码
  14. 利用 nodejs 解析 m3u8 格式文件,并下 ts 合并为 mp4
  15. TensorFlow实现图像风格迁移
  16. 实对称矩阵可对角化证明
  17. 用python实现简版区块链-交易(2)
  18. 【python量化】统计套利之配对交易策略实现(基于python)
  19. [转载] 科学家开发的新AI因过于危险而不敢发布
  20. Oracle中的LOB字段解读

热门文章

  1. PHP设计模式:观察者模式
  2. 工具04_SQL Trace/DBMS_SYSTEM
  3. 面向对象程序设计第二次作业
  4. Hibernate二级缓存的使用
  5. Android maps应用
  6. golang 字符串 去除最后一个字符
  7. vector机器人 叫 hey vector时 识别率不高 解决方法
  8. python 报错 SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:1076) 解决方法
  9. 水抗攻击 apt攻击手段
  10. docker 批量删除 镜像或容器 删除所有容器