MySQL系列之二四种隔离级别及加锁
事务
1、定义:所有操作必须成功完成,否则在每个操作中所作的所有更改都会备撤销。
2、事务的ACID
原子性atomicity 一致性consistency 隔离性isolation 持续性durability
2-1、原子性: 事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做
2-2、一致性: 事务执行的结果必须是数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,
就说明数据库处于一致性状态。
2-3、隔离性: 一个事务的执行不能被其他事务干扰。
2-4、持续性: 即永久性,一个事务一旦提交,它对数据库中数据的改变就应该是永久行的。
3、MySQL的四中隔离级别
3-1、read uncommitted(读取未提交的内)
所有事务都可以看到其他未提交事务的执行结果。 也称之为脏读,很少应用与实际
3-2、read committed(读取提交内容)
一个事务只能看见已提交事务所做的改变。
3-3、repeatable read(可重复读)
MySQL默认事务隔离级别,确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过,会导致幻读。
幻读指用户读取某一范围数据行时,另一个事务又在该范围内插入了新行。当用户再读取该范围的数据行时,会发现出现新的幻影行
3-4、serializable(可串行化)
在每个读的数据行上加上共享锁。这个级别可能导致大量的超时现象和锁竞争。
4、事务隔离的原理
1、一次封锁or两段锁
在大量并发访问时候,为了预防死锁,一般应用中推荐使用一次封锁法,就是在方法的开始阶段,已经预先知道会用到哪些数据,
然后全部锁住,在方法运行之后,在全部解锁。但这种方式不适用于数据库,因为数据库不知道会用到哪些数据。
数据库采用的是两段锁协议,将事务分成两个阶段,加锁阶段和解锁阶段。
加锁阶段: 在对任何数据进行读操作之前要申请并获得S锁(共享锁,其他事务可以继续加共享锁,但不能加排它锁),在进行写
操作之前要申请X锁(排它锁,其他事务不能再获得任何锁)。如果加锁不成功的话,则事务进入等待状态,直到加锁成功才能继续执行。
解锁阶段: 当事务释放了一个封锁以后,事务进入解锁阶段,在该阶段只能进行解锁操作不能再解析加锁操作。
不可重复读与幻读的区别:
不可重复读重点在于update和delete,而幻读在于insert
5、mvcc在MySQL的innodb实现
在innodb中,会在每行数据后添加两个额外的隐藏的值来实现MVCC,这两个值一个记录这行数据何时被创建,另一个记录这行
数据何时过期(或者被删除)在实际操作中,存储的并不是时间,而是事务的版本号,每开启一个新事务,事务的版本号就会
递增。在可重复读的事务隔离级别下:
select时,读取创建版本号不大于当前事务版本好,删除版本号为空或大于当前事务版本号
insert时,保持当前事务版本号为行的创建版本号
delete时,保持当前版本号为行的删除版本号
update时,插入一条新记录,保存当前事务版本号为行创建的版本号,同时保持当前事务版本号到原来删除的行
MySQL系列之二四种隔离级别及加锁的更多相关文章
- MySQL数据库中的四种隔离级别
事务的隔离性比想象的要复杂,在 SQL 标准中定义了四种级别的隔离级别.通常而言,较低级别的隔离通常可以执行更高的并发,系统的开销也更低 READ UNCOMMITTED 该级别为未提交读.在该级别中 ...
- mysql四大特性与四种隔离级别
四大特性 1:原子性.事务是一个不可分割的整体,事务开始的操作,要么全部执行,要么全部不执行. 2:隔离性.同一时间,只允许一个事务请求同一组数据.不同的事务彼此之间没有干扰. 3:一致性.事务开始前 ...
- MySql四种隔离级别
什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事务的结束有 ...
- 面试问烂的 MySQL 四种隔离级别,看完吊打面试官!
阅读本文大概需要 5.6 分钟. 来源:网络 什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操 ...
- 【转载】mysql 四种隔离级别分析
sql标准中,有四种隔离级别,各个离级别都有各自的规则,隔离级别越低,允许并发越大,消耗的资源越少,但是越不安全,下面就mysql数据库来分别介绍一下(每个存储引擎实施的隔离级别会有稍微的不同)mys ...
- MySQL 四种隔离级别
什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事务的结束有 ...
- SQL事务的四种隔离级别和MySQL多版本并发控制
SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的那些改变时可见的,那些是不可见的.低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销. ReadUncommitted( ...
- 数据库操作事物的四大特性以及MySQL数据库的四种隔离级别
1 .事物操作数据库的四大特性(ACID) 1.原子性 (Atomicity) 原子性:就是事物的所包含的所有操作,要么全部成功,要么全部失败回滚. 2.一致性 (Consistency) 一致性:简 ...
- 简单理解:数据库的一致性与四种隔离级别(+MySQL实现)
并行数据库存在着几种常见不一致问题: 1.更新丢失:两个并发的写进程同时修改某内容,一个没修改完提交之后另一个又提交,导致其覆盖了第一个提交的写进程内容. 2.脏读:一个操作读到了另外一个操作没有提交 ...
随机推荐
- Linux学习-基于CentOS7的ProxySQL实现读写分离
一.实验环境 主机:3台,一台ProxySQL(192.168.214.37),两台主从复制,master(192.168.214.17),slave(192.168.214.27) 系统:CentO ...
- springboot整合 thymeleaf 案例
1.运行环境 开发工具:intellij idea JDK版本:1.8 项目管理工具:Maven 4.0.0 2.GITHUB地址 https://github.com/nbfujx/springBo ...
- 一种算法的实现,几个相同大小的div组合在一起,判断是不是矩形
- Java控制台输入字符串及字符串比较
需求描述:茵茵很喜欢研究车牌号码,从车牌号码上可以看出号码注册的早晚,据研究发现,车牌号码是按字典序发放的,现在她收集了很多车牌号码,请你设计程序帮她判断注册较早的号码.车牌号码由5个字母或数字组成. ...
- webpack-使用html-webpack-plugin和ejs-loader将侧栏、头部、底部公共html做成模板,并生成合并后的html页面
在学习前端自动化之前一直使用 PHP,JSP 将在每个页面将头部.侧栏.底部等部分引入,现在前端 "娱乐圈" 一直噼里啪啦的每天出新东西,自从接触了前端自动化我就觉得这种工作可以交 ...
- JS-Promise(使异步操作同步执行)
单个异步操作同步 <div id="box"></div> <script> var box = document.querySelector( ...
- 理解CSS中position的各个值
static position的默认值,没有定位,元素在normal flow中: fixed 相对于浏览器左上角定位: relative 相对定位元素,其位置根据其在normal flow中的位置来 ...
- java c 标签的使用
头部需要引入: <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 需要 ...
- JSP+JavaBean 登陆验证
1.java package cn.gs.ly; import java.util.HashMap; import java.util.Map; public class Register { pri ...
- Recurrent Neural Network(1):Architecture
Recurrent Neural Network是在单个神经元上,除了输入与输出外,添加了一条Recurrent回路.也就是说,节点当前的状态将会影响其未来的状态.下式可以表征此关系: st= f(s ...