博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mysql事务隔离级别
阅读量:7261 次
发布时间:2019-06-29

本文共 1108 字,大约阅读时间需要 3 分钟。

在说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库中的想关使用和修改,如用户等, , , , , , .

  3,事务控制和锁语句, , , SET autocommit = 1 (if the value is not already 1), , .

  4,DATALoading

  5,Administrative statements. , , , , ,, , .

   6,Replication control statements. , , , .

转载于:https://www.cnblogs.com/itdev/p/5814236.html

你可能感兴趣的文章
[精华翻译] Rxjava 2.x : What's different in 2.0
查看>>
Android 异步任务知识梳理(3) AsyncQueryHandler 源码解析
查看>>
antd源码解读(6)- Affix
查看>>
scrollTop兼容各种浏览器
查看>>
UICollectionView(二)
查看>>
Spring Boot 中使用 LogBack 配置
查看>>
leetcode题解(链表类)
查看>>
用Elasticsearch构建电商搜索平台
查看>>
Refresh your Java skills--聊聊Java9 中模块化设计是如何实现类似IOC依赖注入效果及与其区别...
查看>>
链表实现两个多项式的加法
查看>>
Egg 实现一个 mTime 时光网
查看>>
前端中的简单编程题-数组(1)
查看>>
LeetCode之Squares of a Sorted Array(Kotlin)
查看>>
TiDB 在新乐视云联“月光宝盒”项目中的应用与实践
查看>>
自动化构建工具gulp的学习心得
查看>>
JS 类型
查看>>
利用UIPageViewController实现图片轮播(简单实用版本)
查看>>
Python 数据库骚操作 -- MongoDB
查看>>
Linux服务器上搭建svn服务器
查看>>
underscore 源码阅读系列 -- for...in 循环的兼容性问题
查看>>