一、事务描述
1、事务的四个特性 ACID
  1. A:原子性 = 一个事务或者都成功、或者都失败;
  2. C:一致性 = 在整个事务的生命周期里面,查询到的数据是一致的;
    MVCC多版本并发控制:利用undo保存某一时刻数据快照,通过版本号来减少锁的争用,保证各个事务互不影响。
  3. I:  隔离性 = 隔离级别;
  4. D:持久性 = 只要事务commit,这个事务不会因为系统的崩溃而丢失;
  持久性和原子性对于所有的支持事务的数据库都是一样的,都满足。
2、常见事务格式
start transaction;
  DML ( insert; delete; update; )
commit;
3、MySQL 默认每一条 DML 是一个事务
  通过参数 'autocommit' 进行控制是否默认提交事务;
mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set (0.01 sec)

  SQL 自动提交开启,有一定的危险性(没有 rollback )。

  墙裂推荐:关闭 SQL 的自动提交;
  血泪教训:曾经自信过了头的一次 sitesup (其实也是有反复确认),同时疏忽了备份,命令行下一个回车敲下去,发现问题大发了……所以,备份 + 显式 Commit 很重要。
4、大事务+长事务
  数据库的大事务和长事务会带来undo的持续增加、undo暴增,空间不可复用;
  事务信息表:information_schema.INNODB_TRX,用来查看长事务、大事务。
5、空闲事务+锁
start transaction;
  update;
  ……    // 空闲等待,时间可能不可控
  ……    // 空闲等待
  update;
commit;
  1. 事务和事务锁有一定的关系:事务不提交、行锁就不会释放、事务锁就不会消失
  2. 死锁:是指两个或两个以上的事务在执行过程中,因争夺锁资源而造成的一种相互等待的现象。死锁出现的概率是非常低的,因为innodb内置有死锁检查机制,当出现死锁时会自动回滚占用undo资源少的事务。
 
二、事务隔离级别
0、隔离性
  1. MySQL 有多个隔离级别,可以调整,隔离性越弱并发性越好;
  2. 每个数据库都有自己默认的隔离级别
mysql> show variables like '%iso%';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| tx_isolation | REPEATABLE-READ |
+---------------+-----------------+
1 row in set (0.01 sec)

  会话级别设置:set @@session.tx_isolation=……

1、READ-UNCOMMITED
  未提交读,隔离性最弱,但并发性最好;
  事务中的修改,即使没有提交,对其他事务也都是可见的,也就是说事务可以读取未提交的数据,读到脏数据(脏读,dirty read);
2、READ-COMMITED
  大部分数据库系统的默认隔离级别都是READ-COMMITED,但MySQL不是;
  1. 提交读,一个事务从开始直到提交之前,所做的任何修改对其他事务都是不可见的;
  2. 不可重复读,在同一个事务中,同一个SQL执行多次(该记录修改事务提交前、提交后),得到的结果可能不同:幻读;
3、REPEATABLE-READ
  可重复读,MySQL默认隔离级别;
  在同一个事务中,同一个SQL执行多次,得到的结果是相同的;
  1. 对于普通 select 来说,通过 MVCC 来实现,解决脏读问题、幻读问题;
  2. 对于 dml、select for update,通过范围锁实现,解决幻读问题;
4、SERIALIZABLE
  (serializable 连载、串行化) 隔离性最高,没有并发;
  对于同一个数据来说,在同一个时间段内,只能有一个会话可以访问,包括select和dml,通过执行事务串行执行,避免幻读问题;
  也就是说,对于同一行记录,“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。
  注意:业务有串行化的需求,但是我们不会设置数据库事务为串行化隔离级别,而是在应用端设置解决(例:U盾)。

【不错】MySQL 事务隔离级别的更多相关文章

  1. [51CTO]新说MySQL事务隔离级别!

    新说MySQL事务隔离级别! 事务隔离级别这个问题,无论是校招还是社招,面试官都爱问!然而目前网上很多文章,说句实在话啊,我看了后我都怀疑作者弄懂没!本文所讲大部分内容,皆有官网作为佐证,因此对本文内 ...

  2. 查询mysql事务隔离级别

    查询mysql事务隔离级别 查询mysql事务隔离级别 分类: DB2011-11-26 13:12 2517人阅读 评论(0) 收藏 举报 mysqlsessionjava   1.查看当前会话隔离 ...

  3. MySQL事务隔离级别测试实例

    https://www.cnblogs.com/huanongying/p/7021555.html MySQL事务隔离级别 事务隔离级别 脏读 不可重复读 幻读 读未提交(read-uncommit ...

  4. Mysql事务-隔离级别

    MYSQL事务-隔离级别 事务是什么? 事务简言之就是一组SQL执行要么全部成功,要么全部失败.MYSQL的事务在存储引擎层实现. 事务都有ACID特性: 原子性(Atomicity):一个事务必须被 ...

  5. MySQL事务隔离级别 解决并发问题

    MySQL事务隔离级别 1. 脏读: 骗钱的手段, 两个窗口或线程分别调用数据库转账表,转账后未提交,对方查看到账后,rollback,实际钱没转. 演示方法: mysql默认的事务隔离级别为repe ...

  6. mysql事务隔离级别、脏读、幻读

    Mysql事务隔离级别本身很重要,再加上可能是因为各大公司面试必问的缘故,在博客中出现的概率非常高,但不幸的是,中国的技术博客要么是转载,要么是照抄,质量参差不齐,好多结论都是错的,对于心怀好奇之心想 ...

  7. mysql事务隔离级别与设置

    mysql数据库,当且仅当引擎是InnoDB,才支持事务: 1.隔离级别 事务的隔离级别分为:未提交读(read uncommitted).已提交读(read committed).可重复读(repe ...

  8. MySQL事务隔离级别(二)

    搞清楚MySQL事务隔离级别 首先创建一个表 account.创建表的过程略过(由于 InnoDB 存储引擎支持事务,所以将表的存储引擎设置为 InnoDB).表的结构如下: 为了说明问题,我们打开两 ...

  9. MySQL事务隔离级别(一)

    本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一.事务的基本要素(ACID) 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做 ...

  10. 面试突击61:说一下MySQL事务隔离级别?

    MySQL 事务隔离级别是为了解决并发事务互相干扰的问题的,MySQL 事务隔离级别总共有以下 4 种: READ UNCOMMITTED:读未提交. READ COMMITTED:读已提交. REP ...

随机推荐

  1. Eureka实现高可用及为Eureka设置登录账号和密码

    本文通过两个eureka相互注册实现注册中心的高可用,同时为注册中心配置认证登录. 需要用到的maven配置 <dependency> <groupId>org.springf ...

  2. 树上独立集数量 树型DP

    题目描述: 对于一棵树,独立集是指两两互不相邻的节点构成的集合.例如,图1有5个不同的独立集(1个双点集合.3个单点集合.1个空集),图2有14个不同的独立集,图3有5536个不同的独立集.  输入: ...

  3. Js中JSON.stringify()与JSON.parse()

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.因为采用独立于语言的文本格式,也使用了类似于C语言家族的习惯,拥有了这些特性使使JSON称为理想的数据交换语 ...

  4. squid之------基础知识

    squid是什么? 缓存服务器,即用来存储(内存及硬盘)用户访问的网页.图片.文件等等信息的专用服务器,这种服务器不仅可以使用户最快的得到他们想要的信息,而且大大减少了网络传输的数据量,缓存服务器经常 ...

  5. IntelliJ IDEA设置项目和properties文件编码为UTF-8

    https://blog.csdn.net/u012430402/article/de IntelliJ IDEA设置项目和properties文件编码为UTF-8   tails/79633245

  6. DOM例子小结(一)

    一.点击按钮切换图片 核心思路: 1.首先获取元素 2.为元素添加点击事件 3.当事件被触发时运行代码 <!DOCTYPE html> <html lang="en&quo ...

  7. Python 爬虫十六式 - 第七式:正则的艺术

    RE:用匹配来演绎编程的艺术 学习一时爽,一直学习一直爽   Hello,大家好,我是 Connor,一个从无到有的技术小白.上一次我们说到了 pyquery 今天我们将迎来我们数据匹配部分的最后一位 ...

  8. UML——概述

    1. 静态视图(类图)      静态视图不描述与时间相关的系统行为,这种行为在其他视图中描述,因此称之为静态试图.      静态视图用类图来实现,正因为它以类图为中心,因此也称之为类图.     ...

  9. SpringBoot2.2发行版新特性

    Spring Framework升级 SpringBoot2.2的底层Spring Framework版本升级为5.2. JMX默认禁用 默认情况下不再启用JMX. 可以使用配置属性spring.jm ...

  10. SWPU2019 伟大的侦探

    01editor 选择 EBCDIC编码得到压缩包的密码 这里用到的是福尔摩斯里面的跳舞的小人加密 结果是:iloveholmesandwllm