事务

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系列之二四种隔离级别及加锁的更多相关文章

  1. MySQL数据库中的四种隔离级别

    事务的隔离性比想象的要复杂,在 SQL 标准中定义了四种级别的隔离级别.通常而言,较低级别的隔离通常可以执行更高的并发,系统的开销也更低 READ UNCOMMITTED 该级别为未提交读.在该级别中 ...

  2. mysql四大特性与四种隔离级别

    四大特性 1:原子性.事务是一个不可分割的整体,事务开始的操作,要么全部执行,要么全部不执行. 2:隔离性.同一时间,只允许一个事务请求同一组数据.不同的事务彼此之间没有干扰. 3:一致性.事务开始前 ...

  3. MySql四种隔离级别

    什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事务的结束有 ...

  4. 面试问烂的 MySQL 四种隔离级别,看完吊打面试官!

    阅读本文大概需要 5.6 分钟. 来源:网络 什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操 ...

  5. 【转载】mysql 四种隔离级别分析

    sql标准中,有四种隔离级别,各个离级别都有各自的规则,隔离级别越低,允许并发越大,消耗的资源越少,但是越不安全,下面就mysql数据库来分别介绍一下(每个存储引擎实施的隔离级别会有稍微的不同)mys ...

  6. MySQL 四种隔离级别

    什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事务的结束有 ...

  7. SQL事务的四种隔离级别和MySQL多版本并发控制

      SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的那些改变时可见的,那些是不可见的.低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销. ReadUncommitted( ...

  8. 数据库操作事物的四大特性以及MySQL数据库的四种隔离级别

    1 .事物操作数据库的四大特性(ACID) 1.原子性 (Atomicity) 原子性:就是事物的所包含的所有操作,要么全部成功,要么全部失败回滚. 2.一致性 (Consistency) 一致性:简 ...

  9. 简单理解:数据库的一致性与四种隔离级别(+MySQL实现)

    并行数据库存在着几种常见不一致问题: 1.更新丢失:两个并发的写进程同时修改某内容,一个没修改完提交之后另一个又提交,导致其覆盖了第一个提交的写进程内容. 2.脏读:一个操作读到了另外一个操作没有提交 ...

随机推荐

  1. luoguP2365 任务安排 斜率优化 + 动态规划

    Code: #include<bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) # ...

  2. Linux下MySQL 5.5的修改字符集编码为UTF8(彻底解决中文乱码问题)

    一.登录MySQL查看用SHOW VARIABLES LIKE 'character%';下字符集,显示如下: +--------------------------+---------------- ...

  3. vue定义自定义事件方法、事件传值及事件对象

    1.自定义事件 例如v-on:click="run" 或者 @click="run" <template> <div id="app ...

  4. html、css、js分工,内核,html头,html表单

    html:内容css:样式js:交互 内核 浏览器控制台输入navigator.userAgent,回车显示出内核"Mozilla/5.0 (Windows NT 6.1; WOW64) A ...

  5. php strtotime,mktime,DateTime函数处理时间累加问题

    时间戳(年月日时分秒)  使用strtotime函数,结合+1 month,-1 month,next month,last month的时候会出现一些问题. demo示例: //时间"20 ...

  6. springboot编程之全局异常捕获

    springboot编程之全局异常捕获 1.创建GlobalExceptionHandler.java,在类上注解@ControllerAdvice, 在方法上注解@ExceptionHandler( ...

  7. 002-JS-SDK开发使用,网页获取授权,扫一扫调用

    一.概述 在申请响应的公众号之后,实名认证或者企业认证之后,可以进行对应开发 二.开发步骤 2.1.开发前提[服务号]-域名设置 登录后台之后→左侧设置→公众号设置→功能设置,设置好“JS接口安全域名 ...

  8. ELK 日志系统入门及通过 Docker 部署

    1. ELK 系统是什么 ELK 是一套日志中心解决方案,其三个字母分别表示: Elasticsearch:负责日志存储及检索 Logstash:负责日志收集.过滤及格式化 Kibana:数据看板,负 ...

  9. WebService登陆验证四种方式

    在这个WEB API横行的时代,讲WEB Service技术却实显得有些过时了,过时的技术并不代表无用武之地,有些地方也还是可以继续用他的,我之所以会讲解WEB Service,源于我最近面试时被问到 ...

  10. Python 图片格式的转换和尺寸修改

    import cv2 import os import numpy as np from PIL import Image import shutil import sys image_size=14 ...