事务以及MySQL事务隔离级别+MySQL引擎的区别
- 1、事务的基本要素:ACID
- 1、原子性(Atomicity):
- 事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。
- 2、一致性(Consistency):
- 事务开始前和结束后,数据库的完整性约束没有被破坏 。比如 A 向 B 转账,不可能 A 扣了钱,B 却没收到。
- 3、隔离性(Isolation):
- 同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如 A 正在从一张银行卡中取钱,在 A 取钱的过程结束前,B 不能向这张卡转账。
- 4、持久性(Durability):
- 事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。
- 1、原子性(Atomicity):
- 2、事务的并发问题
- 脏读:
- 事务 T1 修改了 1 行数据,事务 T2 在事务 T1 提交之前读到了该行数据
注:即事务1修改数据,但未提交事务,事务2可以看到。
- 事务 T1 修改了 1 行数据,事务 T2 在事务 T1 提交之前读到了该行数据
- 不可重复读:
- 事务 T1 读取了一行数据,事务 T2 接着修改或者删除了该行数据,当 T1 再次读取同一行数据的时候,读到的数据是修改之后的或者发现已经被删除
注:即事务1可以读到事务2修改前和修改提交后的数据。但事务2修改或删除了数据。
- 事务 T1 读取了一行数据,事务 T2 接着修改或者删除了该行数据,当 T1 再次读取同一行数据的时候,读到的数据是修改之后的或者发现已经被删除
- 幻读:
- 事务 T1 读取了满足某条件的一个数据集,事务 T2 插入了一行或者多行数据满足了 T1 的选择条件,导致事务 T1 再次使用同样的选择条件读取的时候,得到了比第一次读取更多的数据集。
注:即事务1可以读到事务2修改前和修改提交后的数据。但事务2新增了数据。
- 事务 T1 读取了满足某条件的一个数据集,事务 T2 插入了一行或者多行数据满足了 T1 的选择条件,导致事务 T1 再次使用同样的选择条件读取的时候,得到了比第一次读取更多的数据集。
- 区别:以解决方式为区分。
- 脏读:事务A读取到另一事务B提交之前的数据
注:- 单次读取,读取到错误数据。 - 不可重复读:事务A多次读取同一数据,事务 B 在事务 A 多次读取的过程中,对数据作了更新或者删除,导致事务 A 多次读取同一数据时,结果 不一致。(锁行解决)
注:- 多次读取数据不同,侧重于对某一行的操作 - 幻读:事务A读取某一条件的数据,事务B插入了一行或多行。事务A前后读取不一致。(锁表解决)
注:- 多次读取数据不同,侧重于对整张表的操作
- 脏读:事务A读取到另一事务B提交之前的数据
- 脏读:
- 3、MYSQL 事务的隔离级别
- 图示:
- 事务说明:
- 读未提交(read-uncommitted)【会脏读】【会不可重复读】【会幻读】
注:即事务1修改数据,但未提交事务,事务2可以看到。 - 不可重复读(也叫读已提交)(read-committed)【会不可重复读】【会幻读】( oracle 默认)
注:即事务1修改数据,但未提交事务,事务2不可以看到。然后引发另一个问题,事务1在事务2开始前和结束后读取到的数据不一致(修改和删除导致)。 - 可重复读(repeatable-read)【会幻读】(mysql 默认)
注:事务1在事务2开始前和结束后读取到的数据不一致(新增导致)。 - 串行化(serializable)【都不会】
- 读未提交(read-uncommitted)【会脏读】【会不可重复读】【会幻读】
- 事务锁说明:
- 1、事务隔离级别为读提交时,写数据只会锁住相应的行。
- 2、事务隔离级别为可重复读时:
- 如果检索条件有索引(包括主键索引)的时候,默认加锁方式是 next-key 锁;
- 如果检索条件没有索引,更新数据时会锁住整张表。一个间隙被事务加了锁,其他事务是不能在这个间隙插入记录的,这样可以防止幻读。
- 3、事务隔离级别为串行化时,读写数据都会锁住整张表
- 4、隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。
- 4、Innodb 和 MyISAM 引擎之间的区别,以及应用场景
- 区别
- 1、MyISAM 是非事务安全的,而 InnoDB 是事务安全的
- 2、MyISAM 锁的粒度是表级的,而 InnoDB 支持行级锁
- 3、MyISAM 支持全文类型索引,而 InnoDB 不支持全文索引
- 4、MyISAM 相对简单,效率上要优于 InnoDB,小型应用可以考虑使用 MyISAM
- 5、MyISAM 表保存成文件形式,跨平台使用更加方便
- 应用场景:
- 1、MyISAM 管理非事务表,提供高速存储和检索以及全文搜索能力,如果再应用中执行大量 select 操作,应该选择 MyISAM
- 2、InnoDB 用于事务处理,具有 ACID 事务支持等特性,如果在应用中执行大量 insert 和 update 操作,应该选择 InnoDB
- 区别
- 5、参考:
- MySQL 的四种事务隔离级别 - 花弄影 - 博客园 https://www.cnblogs.com/huanongying/p/7021555.html
注:特别棒的一篇教程。 - mysql 的事务隔离级别_ITPUB 博客 http://blog.itpub.net/15412087/viewspace-2152465/
- Mysql 的两种引擎的区别 - printwsl 的博客 - CSDN 博客 https://blog.csdn.net/printwsl/article/details/80058841
- MySQL 的四种事务隔离级别 - 花弄影 - 博客园 https://www.cnblogs.com/huanongying/p/7021555.html
事务以及MySQL事务隔离级别+MySQL引擎的区别的更多相关文章
- Mysql加锁过程详解(6)-数据库隔离级别(2)-通过例子理解事务的4种隔离级别
Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...
- spring事务和mysql的隔离级别
mysql事务.mysql隔离级别.mysql锁.mysql数据一致性.Spring事务.Spring事务传播性之间的关系 一直有些模糊,整理一下. mysql事务: 在mysql中,只有使用了I ...
- MySQL进阶15--TCL事务控制语言--建立结束事务/设置断点--默认隔离级别--脏读/幻读/不可重复读
#TCL事物控制语言 : /* Transaction control language : 事物控制语言 事务: 一个或者一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行; ...
- 粗谈MySQL事务的特性和隔离级别
网上对于此类的文章已经十分饱和了,那还写的原因很简单--作为自己的理解笔记. 前言 此篇文章作为自己学习MySQL的一些个人理解,使用的引擎是InnoDb.首先先讲讲事务的概念,在<高性能 ...
- 【MySQL】:事务四大特性与隔离级别
目录 一.事务的概念 二.事务的四大特性 1.原子性 2.一致性 3.隔离性 4.持续性 三.事务语句 1.开启事务:start transaction 2.事务回滚:rollback 指定回滚点 3 ...
- Mysql得隔离级别
一.首先什么是事务? 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事 ...
- Mysql的隔离级别
一.首先什么是事务? 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事 ...
- 数据库事务ACID特性及隔离级别
数据库ACID特性介绍 1.原子性(Atomic)一个事务被视为一个不可分割的最小工作单元,这个事务里的所有操作要么全部成功执行,要么全都不执行,不能只执行其中的一部分操作.实现事务的原子性,要支持回 ...
- MySQL 不同隔离级别,都使用了什么锁?
大家好,我是树哥. 在上篇文章,我们聊了「MySQL 啥时候会用表锁,啥时候用行锁」这个问题.在文章中,我们还留了一个问题,即:如果查询或更新时的数据特别多,是否从行锁会升级为表锁?此外,还有朋友留言 ...
- MySql的隔离级别和锁的关系
一.事务的4个基本特征 Atomic(原子性): 事务中包括的操作被看做一个逻辑单元.这个逻辑单元中的操作要 么所有成功.要么所有失败. Consistency(一致性): 仅仅有合法的数据能 ...
随机推荐
- php比较函数,判断安全函数
一.字符串比较函数: int strcasecmp ( string $str1 , string $str2 ) int strcmp ( string $str1 , string $str2 ) ...
- Atitit.多媒体区----web视频格式的选择总结
Atitit.多媒体区----web视频格式的选择总结 1. 因为现阶段不同的浏览器支持的视频格式是不同的 1 2. 各浏览器Html5 Video支持的影音格式: 2 3. 解决方案是什么?Flas ...
- django中ModelForm save方法 以及快速生成空表单或包含数据的表单 包含错误信息
django中ModelForm学习系列一~save方法 Model代码 from django.db import models # Create your models here. class P ...
- C++-教程2-VS2010C++相关文件说明
stdafx.h说明:stdafx的英文全称为:Standard Application Framework Extensions(标准应用程序框架的扩展).所谓头文件预编译,就是把一个工程(Proj ...
- mysql5.5和5.6版本间的坑
mysql 5.5 int类型 设置不为null,无填充,添加新数据会自动填充0 而5.6同样的配置新建数据没值时,不让添加 5.5 datetime 不能设置默认时间(可以通过某些复杂的方式,这里说 ...
- UCOS2系统内核讲述(四)_创建任务
Ⅰ.写在前面 学习本文之前可以参看我前面的文章: UCOS2_STM32移植详细过程(汇总文章) UCOS2系统内核讲述(一)_总体描述 UCOS2系统内核讲述(二)_初始化调用函数 UCOS2系统内 ...
- CSS——你所不知的 CSS ::before 和 ::after 伪元素用法(转)
你所不知的 CSS ::before 和 ::after 伪元素用法 CSS 有两个说不上常用的伪类 :before 和 :after,偶尔会被人用来添加些自定义格式什么的,但是它们的功用不仅于此.前 ...
- selenium:chromedriver与chrome版本的对应关系
转自:http://blog.csdn.NET/huilan_same/article/details/51896672 再使用selenium打开chrome浏览器的时候,需要用chromedriv ...
- 近似推断(Approximate Inference)
1.变分推断(Variational Inference) 1.1.分解概率分布(Factorized distributions) 1.2.分解近似的性质(Properties of factori ...
- php -- 魔术方法 之 序列化和反序列化的触发函数:__sleep(),__wakeup()
__sleep():当对象被当做文件保存时会自动触发的方法. 该方法要做的事情,就是返回一个要保存的对象数据的数组 DB.class.php中修改 再次保存效果 读取db对象 因为没有连接数据,不能操 ...