MySQL事务浅析

事务的设置

在有活动事务时不允许设置全局或会话的事务:即在start transaction语句中,使用set语句设置事务;

事务的隔离级别:可以在运行时通过tx_isolation进行设置,SET GLOBAL tx_isolation='REPEATABLE-READ';SET SESSION tx_isolation='SERIALIZABLE';

事务的基本要素(ACID)

原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态;

一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到;

隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰;

持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚

事务的并发问题

脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据

不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致。

幻读:指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。

小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表

四个隔离级别 

READ-UNCOMMITTED:未提交读,出现脏数据

READ-COMMITTED:提交读,多次重复读出来的数据不一致(大多数数据库默认事务隔离级别)

REPEATABLE-READ:可重复性读(MySQL的默认事务隔离级别),多次重复读出来的数据一致,但是可能会出现幻读;InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题

SERIALIZABLE :最高隔离级别,通过读数据行加共享锁,增加了超时及锁竞争

不同隔离级别存在问题如下表

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 事务是什么 事务是指,作为单个逻辑工作单元执行的一系列操作。这些操作要么都执行,要么都不执行,它是一个不可分割的工...
    JJNile阅读 240评论 0 2
  • MySQL 事务的四种隔离级别 1 事务的基本要素(ACID) 原子性(Atomicity):事务开始后所有操作,...
    4a873e424089阅读 666评论 0 0
  • 一、(了解)定义 全称(Transaction Control Language)翻译成中文 事务控制语言,事务是...
    唯老阅读 720评论 0 2
  • 一、(了解)定义 全称(Transaction Control Language)翻译成中文 事务控制语言,事务是...
    任未然阅读 207评论 0 0
  • 分享阿肆/林宥嘉的单曲《致姗姗来迟的你 》:http://music.163.com/song/432506809...
    横塘水阅读 278评论 0 0