- 浏览: 514924 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (563)
- 工作经验 (12)
- 数据库 (13)
- Servlet (10)
- Struts2 (1)
- Spring (25)
- Eclipse (5)
- Hibernate (5)
- Eclips (8)
- HTTP (7)
- J2EE (21)
- EHcache (1)
- HTML (11)
- 工具插件使用 (20)
- JPA (2)
- 杂谈 (17)
- 数据结构与算法 (3)
- Cloud Foundry (1)
- 安全 (10)
- J2SE (57)
- SQL (9)
- DB2 (6)
- 操作系统 (2)
- 设计模式 (1)
- 版本代码管理工具 (13)
- 面试 (10)
- 代码规范 (3)
- Tomcat (12)
- Ajax (5)
- 异常总结 (11)
- REST (2)
- 云 (2)
- RMI (3)
- SOA (1)
- Oracle (12)
- Javascript (20)
- jquery (7)
- JSP自定义标签 (2)
- 电脑知识 (5)
- 浏览器 (3)
- 正则表达式 (3)
- 建站解决问题 (38)
- 数据库设计 (3)
- git (16)
- log4j (1)
- 每天100行代码 (1)
- socket (0)
- java设计模式 耿祥义著 (0)
- Maven (14)
- ibatis (7)
- bug整理 (2)
- 邮件服务器 (8)
- Linux (32)
- TCP/IP协议 (5)
- java多线程并发 (7)
- IO (1)
- 网页小工具 (2)
- Flash (2)
- 爬虫 (1)
- CSS (6)
- JSON (1)
- 触发器 (1)
- java并发 (12)
- ajaxfileupload (1)
- js验证 (1)
- discuz (2)
- Mysql (14)
- jvm (2)
- MyBatis (10)
- POI (1)
- 金融 (1)
- VMWare (0)
- Redis (4)
- 性能测试 (2)
- PostgreSQL (1)
- 分布式 (2)
- Easy UI (1)
- C (1)
- 加密 (6)
- Node.js (1)
- 事务 (2)
- zookeeper (3)
- Spring MVC (2)
- 动态代理 (3)
- 日志 (2)
- 微信公众号 (2)
- IDEA (1)
- 保存他人遇到的问题 (1)
- webservice (11)
- memcached (3)
- nginx (6)
- 抓包 (1)
- java规范 (1)
- dubbo (3)
- xwiki (1)
- quartz (2)
- 数字证书 (1)
- spi (1)
- 学习编程 (6)
- dom4j (1)
- 计算机系统知识 (2)
- JAVA系统知识 (1)
- rpcf (1)
- 单元测试 (2)
- php (1)
- 内存泄漏cpu100%outofmemery (5)
- zero_copy (2)
- mac (3)
- hive (3)
- 分享资料整理 (0)
- 计算机网络 (1)
- 编写操作系统 (1)
- springboot (1)
最新评论
-
masuweng:
亦论一次OutOfMemoryError的定位与解错 -
变脸小伙:
引用[color=red][/color]百度推广中运用的技术 ...
Spring 3 mvc中返回pdf,json,xml等不同的view -
Vanillva:
不同之处是什么??
Mybatis中的like查询 -
thrillerzw:
转了。做个有理想的程序员
有理想的程序员必须知道的15件事 -
liujunhui1988:
觉得很有概括力
15 个必须知道的 Java 面试问题(2年工作经验)
源:http://fucheng.blog.51cto.com/2404495/1619359
评:
repeatable-read是Mysql默认事务隔离级别!能解决脏读以及不可重复读的问题,但可能出现幻读的情况
不可重复读:在一个未提交的事务里,二次查询结果可能不相同,因为在这个事务执行过程中,外面的 事务可能对这个数据集进行了修改并提交!
幻读:一个事务在操作过程中!有别的事务对此数据集进行了修改并提交,但这些操作第一个事务读不到,等到这个事务提交的时候,便有可能引起明明插入的数据没有查询到,但却出现插入重复的错误!
不可重复读与幻读的区别:
不可重复读是能读到其它事务已经提交的数据,幻读是读不到其它事务已提交的数据!
间隙锁:间隙锁主要用来防止幻读,用在repeatable-read隔离级别下,指的是当对数据进行条件,范围检索时,对其范围内也许并存在的值进行加锁!当查询的索引含有唯一属性(唯一索引,主键索引)时,Innodb存储引擎会对next-key lock进行优化,将其降为record lock,即仅锁住索引本身,而不是范围!若是普通辅助索引,则会使用传统的next-key lock进行范围锁定!
/*
幻读案例:有个表 (id 字段为非唯一辅助索引)每次插入前需查询这字段的最大值,然后再取最大值+1插入!
事务1: 事务2:
select max(id) from e; insert into e values (11)
10 commit;
insert into e values (11)
commit;
ERROR 1062 (23000): Duplicate entry '11' for key 'id'
在上述事务1中明明查询最大值为10,但插入最大值+1的时候却报错!
解决方案:利用mysql间隙锁
事务1: 事务2:
select max(id) from e lock in share mode;
(此时会对id为10以上的所有不存在的值加间隙锁)
10 insert into e values (11);
insert into e values (11) commit; 此时提交会一处于等待状态,
commit;
*/
总结:
表a
id
3
5
6
9
在运用间隙锁的过程中,(-00 +00为负正无穷大)
如果条件为where a=5这样的条件,则间隙锁锁住的范围为(-00,3),(3,5),(5,6),(6,9),(9,+00)
如果条件为where a>5,则间隙锁锁住的范围为(5,+00)
如果为select max(id),则锁住的范围为(max(id),+00)
另外在测试间隙锁的过程中遇到了innodb锁全表,全表所有间隙上锁的情况!这篇博文里的提到:
http://blog.itpub.net/29254281/viewspace-1401413/
本文出自 “夫臣” 博客,请务必保留此出处http://fucheng.blog.51cto.com/2404495/1619359
评:
repeatable-read是Mysql默认事务隔离级别!能解决脏读以及不可重复读的问题,但可能出现幻读的情况
不可重复读:在一个未提交的事务里,二次查询结果可能不相同,因为在这个事务执行过程中,外面的 事务可能对这个数据集进行了修改并提交!
幻读:一个事务在操作过程中!有别的事务对此数据集进行了修改并提交,但这些操作第一个事务读不到,等到这个事务提交的时候,便有可能引起明明插入的数据没有查询到,但却出现插入重复的错误!
不可重复读与幻读的区别:
不可重复读是能读到其它事务已经提交的数据,幻读是读不到其它事务已提交的数据!
间隙锁:间隙锁主要用来防止幻读,用在repeatable-read隔离级别下,指的是当对数据进行条件,范围检索时,对其范围内也许并存在的值进行加锁!当查询的索引含有唯一属性(唯一索引,主键索引)时,Innodb存储引擎会对next-key lock进行优化,将其降为record lock,即仅锁住索引本身,而不是范围!若是普通辅助索引,则会使用传统的next-key lock进行范围锁定!
/*
幻读案例:有个表 (id 字段为非唯一辅助索引)每次插入前需查询这字段的最大值,然后再取最大值+1插入!
事务1: 事务2:
select max(id) from e; insert into e values (11)
10 commit;
insert into e values (11)
commit;
ERROR 1062 (23000): Duplicate entry '11' for key 'id'
在上述事务1中明明查询最大值为10,但插入最大值+1的时候却报错!
解决方案:利用mysql间隙锁
事务1: 事务2:
select max(id) from e lock in share mode;
(此时会对id为10以上的所有不存在的值加间隙锁)
10 insert into e values (11);
insert into e values (11) commit; 此时提交会一处于等待状态,
commit;
*/
总结:
表a
id
3
5
6
9
在运用间隙锁的过程中,(-00 +00为负正无穷大)
如果条件为where a=5这样的条件,则间隙锁锁住的范围为(-00,3),(3,5),(5,6),(6,9),(9,+00)
如果条件为where a>5,则间隙锁锁住的范围为(5,+00)
如果为select max(id),则锁住的范围为(max(id),+00)
另外在测试间隙锁的过程中遇到了innodb锁全表,全表所有间隙上锁的情况!这篇博文里的提到:
http://blog.itpub.net/29254281/viewspace-1401413/
本文出自 “夫臣” 博客,请务必保留此出处http://fucheng.blog.51cto.com/2404495/1619359
发表评论
-
主从延迟
2019-06-17 16:08 291主从复制原理 主从延 ... -
python脚本连接mysql
2018-02-24 12:18 528文件db #!/usr/bin/python #codi ... -
Shell脚本中执行sql语句操作mysql的5种方法
2018-01-22 21:41 1449源:http://www.jb51.net/article/5 ... -
MySQL Explain详解
2018-01-02 16:42 409源:https://www.cnblogs.com/x ... -
Mysql经mysql连接的空闲时间超过8小时后 MySQL自动断开该连接解决方案
2016-07-06 17:16 2174源:http://www.jb51.net/artic ... -
新安装mysql 第三方工具连接不上问题
2015-08-24 00:25 817源:http://blog.csdn.net/dongdong ... -
CentOS源码编译安装MySQL 5.5.15
2014-11-17 01:38 680源:https://www.centos.bz/2011/09 ... -
Mysql中limit的用法详解
2014-07-17 16:58 822源:http://blog.csdn.net/zhqingyu ... -
mysql重连,连接丢失:The Last Packet Successfully Received From the Server
2014-07-15 18:48 2017源:http://nkcoder.github.io/ 评: ... -
Lock wait timeout exceeded
2014-04-23 15:28 943源:http://my.oschina.net/jiaoya/ ... -
Spring事务配置的五种方式
2014-04-14 16:57 434源:http://www.blogjava.net/robbi ... -
Fedora 8下的MySQL源码安装手记
2014-03-18 15:00 424源:http://blog.sina.com.cn/s/blo ... -
MySQL数据库添加一个字段
2014-03-14 11:14 657源:http://hi.baidu.com/pianxicun ... -
mysql查询 分组后前 N条数据
2014-01-17 16:04 1528源:http://www.jb51.net/article/3 ...
相关推荐
REPEATABLE-READ 即可重复读,set autocommit= 0或者START TRANSACTION状态下select表的内容不会改变。这种隔离级别可能导致读到的东西是已经修改过的。 比如: 回话一中读取一个字段一行a=1 在回话二里这个字段该行...
- **可重复读(REPEATABLE-READ)**:在事务内多次读取同一数据始终一致,但可能产生幻读。 - **序列化(SERIALIZABLE)**:最严格的隔离级别,通过锁定事务期间的所有读取行,防止脏读、不可重复读和幻读,但可能降低...
6. **事务处理**:支持各种事务隔离级别,包括读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化(SERIALIZABLE)。 7. **多版本并发控制**(MVCC):MySQL 8.0引入...
6. **事务处理**:支持多种事务隔离级别,包括读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化(SERIALIZABLE)。 7. **批处理操作**:允许一次发送多条SQL语句,...
3. **事务支持**:支持JDBC的事务处理,包括读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)等隔离级别。 4. **结果集处理**:提供了处理查询结果的方法,可以将结果集转换为Java对象,如`ResultSet`。 ...
MySQL的可重复读(Repeatable Read)隔离级别是其事务管理机制的一部分,旨在解决数据库并发操作中的一些问题,如脏读、不可重复读和幻读。然而,标题中提出的问题在于,可重复读隔离级别是否能完全防止幻读。在这个...
6. **交易隔离级别**:在MySQL中,有四种交易隔离级别可供选择:读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化(SERIALIZABLE)。根据描述,此精简包已经预设为...
2. **InnoDB增强**:默认事务隔离级别提升到Repeatable Read,提供更好的并发控制;支持自适应hash索引,能动态调整以优化查询性能。 3. **分区功能**:增强了对分区表的支持,允许更大规模的数据管理和分析。 4. ...
MySQL支持四种隔离级别:读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化(SERIALIZABLE)。在可重复读隔离级别下,MySQL使用Next-Key Locks(包括行锁和间隙锁)...
7. **事务处理**:支持多种事务隔离级别,如 READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE,满足不同应用场景的需求。 8. **结果集缓存**:通过 Result Set Caching,可以将查询结果缓存...
6. 全面的事务支持:包括读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化(SERIALIZABLE)四种隔离级别。 7. 集成到应用服务器:可以无缝集成到诸如 Tomcat、JBoss...
- **读锁(Read Locks, 或 Shared Locks)**:允许多个事务同时读取同一表,但阻止其他事务写入。 - **写锁(Write Locks, 或 Exclusive Locks)**:只允许一个事务对表进行写操作,其他事务无法读取或写入。 2. ...
5. 交易隔离级别:支持可重复读(Repeatable Read)隔离级别,防止幻读问题,提高了并发事务处理的安全性。 二、Windows下的MySQL 5.6.45安装 1. 下载与解压:首先,从官方网站下载“mysql-5.6.45-winx64.zip”...
在可重复读(Repeatable Read,RR)隔离级别下,InnoDB默认使用MVCC和Next-Key 锁来防止幻读。然而,有一种观点认为,在某些特定情况下,如引用一中提到的,如果事务T1先执行SELECT,然后另一个事务T2插入数据并提交...
7. **事务特性**:支持各种事务隔离级别,如READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。 8. **异常处理**:封装了MySQL的错误代码和消息,转换为Java的SQLException。 9. **连接优化**:...
在RR级别下,MySQL使用Next-Key Locks(包括行锁和间隙锁)来阻止幻读,确保事务内部的查询结果不会因为其他事务的INSERT操作而改变。 - 串行化是最高的隔离级别,通过锁定事务期间的所有读写操作,确保无脏读、不可...
在MySQL的InnoDB存储引擎中,插入操作不仅涉及到行级锁,还可能涉及Gap锁和Next-Key Locks,这些锁机制的设计是为了防止幻读(Phantom Read)和其他并发问题。 1. 数据库版本:文中提到的是MySQL 5.6.27。不同版本...
7. **事务支持**:支持ACID(原子性、一致性、隔离性、持久性)特性,提供不同级别的事务隔离,如READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。 8. **多语种支持**:支持多种字符集,包括...
- **隔离级别**: 此案例中提到的隔离级别是可重复读(Repeatable Read),这是InnoDB存储引擎的默认隔离级别,它能防止幻读现象,但可能会导致死锁。 - **索引**: 死锁涉及到的是`order_pay_status`表的主键索引。 ...