欢迎来到IDC91站长网!
解决服务器各种技术问题,加微信uecomzsr

MySQL

当前位置: IDC91 > 数据库 > MySQL

全面解析MySQL中的隔离级别

时间:2022-05-30 13:57:42|栏目:MySQL|点击:

  数据库并发的对同一批数据进行增删改,就可能会出现我们所说的脏写、脏读、不可重复读、幻读等一系列问题。MySQL提供了一系列机制来解决事务并发问题,比如事务隔离、锁机制、MVCC多版本并发控制机制。今天来探究一下事务隔离机制。

事务是一组SQL组成的逻辑处理单元,先来看下事务的ACID特性:

  • 原子性(Atomicity) :事务是一个原子操作单元,对数据进行修改,要么全执行要么全不执行。是从执行层面上来描述的。
  • 一致性(Consistent) :在事务开始和完成时,数据都必须保持一致状态。是从执行结果层面上来描述的。
  • 隔离性(Isolation) :数据库系统提供一定的隔离机制,保证事务执行过程中对外部不可见,独立运行,不受外部影响。
  • 持久性(Durable) :事务完成之后,它对于数据的修改是永久性的,即使出现系统故障也能够保持。

并发事务的影响:

  • 脏写(更新丢失:Lost Update):多个事务选择了同一行,彼此不知道对方存在,会覆盖之前事务的数据操作。
  • 脏读(Dirty Reads):A事务读取了B事务未提交的数据,B事务回滚,A提交,最终结果不符合一致性原则
  • 不可重读(Non-Repeatable Reads):同一个事务,相同的查询语句,执行多次结果不一致,可能是外部事务修改导致的,不符合隔离性。
  • 幻读(Phantom Reads):事务A读取到了事务B提交的新增数据,不符合隔离性

事务隔离级别:

MySQL提供了上面四种隔离级别,隔离越严格,可能出现的问题就越少,但付出的性能代价就越大,默认的隔离级别是可重复读。下面使用客户端进行操作进行验证。

先加创建一张表和数据

CREATE TABLE `account` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `balance` int(11) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `account` (`id`, `balance`)
VALUES
  (1, 500),
  (2, 600),
  (3, 200);

上一篇:MySQL 游标的定义与使用方式

栏    目:MySQL

下一篇:MySQL DATEDIFF函数获取两个日期的时间间隔的方法

本文标题:全面解析MySQL中的隔离级别

本文地址:https://idc91.com/shujuku/4000.html

广告投放 | 联系我们 | 免责申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

Copyright © 2023 IDC91.COM 版权所有晋ICP备17006296号