Mysql事务隔离级别
在说Isolation之前,需要谈谈关系型数据库的ACID特性。
A(atomicity,原子性),指一个事务要么完全完成,要么全部回滚到起始状态,不存在中间状态。
C(Consistency,一致性),指在事务开始前与事务结束后,及在事务内部,数据的完整性结束不被破坏,即不存在新旧数据的混合情况。如在一个事务处理过程中,有些数据被其他事务修改,则在事务中要么只出现旧值,要么只出现新值,决不能是旧值混在该事务内。
I(Isolation,隔离性),指事务在执行过程中互不干扰,也不能看到其他事务未提交的数据;这种隔离性是通过锁机制来实现的,可以通过调整隔离级别(isolation level)来提升性能或并发性。
D(Durability,持久性),指事务一旦完成,便不可撤消。
在谈隔离级别之前,还有一点要知道:事务是原子性的,要么完成要么回滚,所以对于事务可以很轻易地完成A,D.
对于C,I,就需要通过隔离级别来限制。
另一个常识是:隔离级别越高,ACID特性实现的越好,但数据库的并发性越低,效率越差。
Mysql支持四种隔离级别:
READ UNCOMMITED(读未提交),一个事务可以看到另一个事务未提交的数据,会出现脏数据(dirty data)
READ COMMITTED (读已提交),一个事务只能看到已被提交的数据,可能会出现不可重复读。即在同一事务内同一SELECT会出现不同结果。
REPEATABLE READ(可重复读),通过快照和锁,使得事务只在一个快照上操作,不会出现不可重复读的情况。
SERIALIZABLE(串行化),通过保守的锁策略【修改被别的事务读取的数据的事务都要处于等待状态】,在实现ACID。
具体实验,可参看:http://xm-king.iteye.com/blog/770721。
还需要注意:并不是所有操作都能回滚的,DDL操作就不能。
还有一些隐式提交的事务:
1,DDL
2,对mysql库中的想关使用和修改,如用户等ALTER USER
, CREATE USER
, DROP USER
, GRANT
, RENAME USER
, REVOKE
, SET PASSWORD
.
3,事务控制和锁语句, BEGIN
, LOCK TABLES
, SET autocommit = 1
(if the value is not already 1), START TRANSACTION
, UNLOCK TABLES
.
4,DATALoading
5,Administrative statements. ANALYZE TABLE
, CACHE INDEX
, CHECK TABLE
, FLUSH
, LOAD INDEX INTO CACHE
,OPTIMIZE TABLE
, REPAIR TABLE
, RESET
.
6,Replication control statements. START SLAVE
, STOP SLAVE
, RESET SLAVE
, CHANGE MASTER TO
.
最新文章
- Centos7下安装python,查看python版本
- hibernate(十)双向关联关系的CRUD
- JS添加MD5,JS提示框
- 关于在EXCEL中输入01-01-01被转换为2001/1/1怎么解决
- transform animation transition css3动画
- HTTP 请求未经客户端身份验证方案“Anonymous”授权。从服务器收到的身份验证标头为“Negotiate,NTLM”
- Tomcat创建虚拟目录和程序热部署
- uva 1378 A Funny Stone Game (博弈-SG)
- GO语言可以直接输出数组
- nodejs教程:安装express及配置app.js文件
- WPF学习(8)数据绑定
- 编程获取linuxservercpu、内存和磁盘使用
- 监听JVM关闭
- 关于EF第一次加载慢或过一段时间不访问时再次访问加载慢问题的总结
- Java 反射(二)
- fragment滑动界面
- 持续集成-Jenkins安装部署
- 在前台根据传过来的XX级别的数字转XX的名字
- SQL数据库存储过程
- B树,B+树,B*树以及R树的介绍