MySql事务原理介绍及特性

目录
  • 1. 什么是事务
  • 2. 事务是如何做到同时成功失败
  • 3. 如何提交回滚事务
    • 1. mysql 中默认的事务行为是怎样的
    • 2. 回滚事务
    • 3. 提交事务
  • 4. 事务的4个特性
  • 5. 事务的隔离性

1. 什么是事务

一个事务就是一个完整的业务逻辑。

什么是一个完整的业务逻辑?

假设转账,从A账户向B账户中转账10000.

将A账户的钱减去10000 ( update语句)

将B账户的钱加上10000 ( update语句)

这就是一个完整的业务逻辑。

以_上的操作是-一个最小的工作单元,要么同时成功,要么同时失败,不可再分。

这两个update语句要求必须同时成功或者同时失败,这样才能保证钱是正确的。

仅有 DML (insert、delete、update)才会有事务一说,其他语句与事务无关!!!

本质上说,一个事务其实就是多条 DML 语句同时成功,或者同时失败!!!

2. 事务是如何做到同时成功失败

InnoDB 存储引擎:提供了一组用来记录事务性活动的日志文件

在事务的执行的过程中,每一条 DML 的操作都会记录到 “事务性活动的日志文件” 中。

在事务的执行过程中,我们可以提交事务,也可以回滚事务。

提交事务?

清空事务性活动的日志文件,将数据全部彻底持久化到数据库表中。

提交事务标志着,事务的结束。并且是一种全部成功的结束。

回滚事务?

将之前所有的 DML 操作全部撤销,并且清空事务性活动的日志文件。

回滚事务标志着,事务的结束,并且是一种全部失败的结束。

3. 如何提交回滚事务

提交事务:commit;

回滚事务:rollback;

事务对应的英语单词是:transaction

1. mysql 中默认的事务行为是怎样的

mysql 默认情况下是支持自动提交事务的。(自动提交)

什么是自动提交?

每执行一次 DML 语句,则提交一次。

如何将 mysql 的自动提交机制关闭呢?

mysql> start transaction;

2. 回滚事务

回滚只能回滚到上一次的提交点

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from dept_bak;
Empty set (0.00 sec)
mysql> insert into dept_bak values(10, 'abc', 'beijing');
Query OK, 1 row affected (0.00 sec)
mysql> insert into dept_bak values(10, 'abc', 'beijing');
Query OK, 1 row affected (0.00 sec)
mysql> select * from dept_bak;
+--------+------+---------+
| deptno | name | loc     |
+--------+------+---------+
|     10 | abc  | beijing |
|     10 | abc  | beijing |
+--------+------+---------+
2 rows in set (0.00 sec)
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from dept_bak;
Empty set (0.00 sec)

3. 提交事务

mysql> select * from dept_bak;
Empty set (0.00 sec)
mysql> insert into dept_bak values(10, 'aaa', 'bbb');
Query OK, 1 row affected (0.01 sec)
mysql> insert into dept_bak values(10, 'aaa', 'bbb');
Query OK, 1 row affected (0.00 sec)
mysql> select * from dept_bak;
+--------+------+------+
| deptno | name | loc  |
+--------+------+------+
|     10 | aaa  | bbb  |
|     10 | aaa  | bbb  |
+--------+------+------+
2 rows in set (0.00 sec)
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from dept_bak;
+--------+------+------+
| deptno | name | loc  |
+--------+------+------+
|     10 | aaa  | bbb  |
|     10 | aaa  | bbb  |
+--------+------+------+
2 rows in set (0.00 sec)

4. 事务的4个特性

A:原子性

说明事务是最小的工作单元。不可再分。

C:一致性

所有事务要求,在同一个事务当中,所有操作必须同时成功,或同时失败,以保证数据的一致性。

I:隔离性

A事务和B事务之间具有一定的隔离性。

D:持久性

事务最终结束的一个保障。事务提交,就相当于将没有保存到硬盘上的数据保存到硬盘上。

5. 事务的隔离性

事务隔离性的4个级别:

1. 读未提交:read uncommitted(最低隔离级别)

事务 A 可以读取到事务 B 未提交的数据

存在的问题:脏读现象(Dirty Read)

2. 读已提交:read committed

事务 A 只能读取到事务 B 提交之后的数据

这种隔离级别解决了脏读现象!!!

存在的问题:不可重复读取数据。

不可读取数据:

在事务开启之后,第一次读到的数据是3条,当前事务还没有结束,可能第二次再读取的时候,读到的数据是4条,3不等于4,称为不可重复读取。

3. 可重复读:repeatble read

事务 A 开启之后,不管是多久,每一次在事务A中读取的数据都是一致的。即使事务B将数据已经修改,并且提交了,事务A读取到的数据还是没有发生改变,这就是可重复读。

该隔离级别解决了不可重复读。

存在的问题:幻影读。

可重复读,事务提交之后,只有事务不结束,读到的数据永远都是事务刚开始时的数据。

mysql 中默认的事务隔离级别!!!!

4. 序列化/串行化:serializable(最高隔离级别)

这是最高隔离级别,效率最低。解决了所有问题。

这种隔离级别表示事务排队,不能并发!

每一次读取到数据都是最真实的,并且效率是最低的。

到此这篇关于MySql事务原理介绍及特性的文章就介绍到这了,更多相关MySql事务内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MySql事务及ACID实现原理详解

    目录 逻辑架构和存储引擎 自动提交 特殊操作 ACID 特性 原子性 持久性 隔离性 脏读.不可重复读和幻读 事务隔离级别 MVCC 一致性 逻辑架构和存储引擎 自动提交 MySQL 中默认采用的是自动提交(autocommit)模式,如下所示: 在自动提交模式下,如果没有 start transaction 显式地开始一个事务,那么每个 sql 语句都会被当做一个事务执行提交操作. 通过如下方式,可以关闭 autocommit;需要注意的是,autocommit 参数是针对连接的,在一个连接中

  • MySQL数据库的触发器和事务

    目录 一.触发器 概念 二. 触发器的操作 触发器的增删改操作 触发器的查看删除操作 三.事务 概念 四.事务的操作 基本流程 基础操作 事务的提交方式 事务的隔离级别 隔离操作 一.触发器 概念 触发器是SQL server提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,是由事件来触发.触发器经常用来加强数据的完整性约束和业务规则. 二. 触发器的操作 创建account和account_log数据表: CREATE TABLE account( id I

  • MySQL事务的隔离级别详情

    目录 一.隔离级别的概念 二.测试TRANSACTION_READ_UNCOMMITTED隔离级别 三.测试TRANSACTION_READ_COMMITTED隔离级别 四.测试TRANSACTION_REPEATABLE_READ隔离级别 五.测试TRANSACTION_SERIALIZABLE隔离级别 一.隔离级别的概念 为什么要考虑隔离级别? 因为事务要并发执行,而并发执行可能会出现一些问题:脏读.不可重复读和虚读,有的是允许出现的,有的不允许出现,对于这种不同程度上的出现或不出现的并发控

  • MySql索引和事务定义到使用全面涵盖

    目录 索引是什么 索引的使用场景 索引的常见操作 索引背后的数据结构 事务是什么 事务的基本特性 小结 索引是什么 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针.可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现.索引就相当于一本书的目录,通过索引 可快速定位.检索数据.使用索引大大提高了查找效率,但同时索引也占用了更多的空间,拖慢了增删改的速度. 索引的使用场景 1.数据量较大,且经常对这些列进行条件查询. 2.该数据库表的插入操作,及对这些列的修改操作

  • MySQL事务管理的作用详解

    目录 1.为何使用事务管理 2.数据库事务的原理 3.什么是事务 3.1 事务的特性ACID 3.2 事务的并发问题 3.3 隔离级别 4.Spring事务管理 1.为何使用事务管理 可以保证数据的完整性.事务(Transaction),就是将一组SQL语句放在同一批次内去执行,如果一个SQL语句出错,则该批次内 的所有SQL都将被取消执行. 例子: 转账为例. 金庸向张无忌转账1000元.----在数据库中修改两个账号的余额. 发生意外情况,则出现金庸减钱成功,而张无忌加钱失败. 如何解决?

  • MySql事务原理介绍及特性

    目录 1. 什么是事务 2. 事务是如何做到同时成功失败 3. 如何提交回滚事务 1. mysql 中默认的事务行为是怎样的 2. 回滚事务 3. 提交事务 4. 事务的4个特性 5. 事务的隔离性 1. 什么是事务 一个事务就是一个完整的业务逻辑. 什么是一个完整的业务逻辑? 假设转账,从A账户向B账户中转账10000. 将A账户的钱减去10000 ( update语句) 将B账户的钱加上10000 ( update语句) 这就是一个完整的业务逻辑. 以_上的操作是-一个最小的工作单元,要么同

  • mysql事务详细介绍

    目录 简介 事务四个特性 事务隔离级别 验证 MVCC 当前读 快照读 当前读.快照读.MVCC关系 mvcc 解决的问题 MVCC实现原理 可见性规则 简介 事务是由一组sql语句组成的逻辑处理单元 事务四个特性 原子性(Atomicity): 要么都成功要么都失败 undo log实现 一致性(Consistent): 如转账前后两个数额总合保持不变 隔离性(lsolation):数据库提供一定的隔离机制,保证事务在不受外部并发操作影响的"独立"环境下运行 锁,mvcc多版本并发控

  • MySQL事务控制流与ACID特性

    目录 一.ACID 特性 二.事务控制语法 三.事务并发异常 1.脏读 2.不可重复读 3.幻读 四.事务隔离级别 一.ACID 特性 事务处理是一种对必须整批执行的 MySQL 操作的管理机制,在事务过程中,除非整批操作全部正确执行,否则中间的任何一个操作出错,都会回滚 (Rollback) 到最初的安全状态以确保不会对系统数据造成错误的改动. MySQL 5.5 之后,默认的存储引擎从 MyLSAM 替换成了 InnoDB,这其中的一个重要原因就是因为 InnoDB 支持事务,我们用 SHO

  • mysql事务和隔离级别底层原理浅析

    目录 前言 一.事务底层原理浅析 原子性: 持久性 隔离性: 一致性: 二.隔离级别底层原理浅析 三.总结 前言 首先回顾一下什么是事务,事务是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作:这些操作作为一个整体一起向系统提交,要么都执行.要么都不执行:事务是一组不可再分割的操作集合(工作逻辑单元). 事务的特性: 原子性(Atomicity):原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚.一致性(Consistency):事务执行的结果必须是使数据库从一个一致性

  • MySQL数据库本地事务原理解析

    在经典的数据库理论里,本地事务具备四大特征: 原子性 事务中的所有操作都是以原子的方式执行的,要么全部成功,要么全部失败: 一致性 事务执行前后,所有的数据都应该处于一致性状态---即要满足数据库表的一致性约束,也要达到业务一致性(完成了业务目标): 隔离性 并发执行的事务不应该相互干扰:隔离性的强度由隔离级别决定: 持久性 事务一旦被提交,它添加/修改的数据不会随着系统崩溃而丢失: 在MySQL(InnoDB引擎)中,原子性和持久性是通过Redo Log来实现的,一致性是通过Undo Log实

  • MySQL事务的ACID特性以及并发问题方案

    目录 一.事务的概念 二.ACID特性 三.事务并发存在的问题 四.事务相关命令 一.事务的概念 一个事务是由一条或多条对数据库操作的SQL语句所组成的一个不可分割的单元,只有当事务中所有操作都正常执行完了,整个事务才会被提交给数据库,如果有部分事务处理失败,那么事务就要回滚到最初的状态,因此,事务要么全部执行成功,要么全部失败. 所以要记住事务几个基本概念,如下: 事务是一组SQL语句的执行,要么全部成功,要么全部失败,不能出现部分成功,部分失败的结果,保证事务执行的原子操作.事务的所有SQL

  • MySQL事务视图索引备份和恢复概念介绍

    目录 一.事务 二.事务的特性 三.MySQL事务处理 四.视图 五.管理视图 六.索引 七.常见索引类型 八.管理索引 九,创建索引的指导原则 十,优化SQL语句的意识 一.事务 事务(TRANSACTION)是一种机制.一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库操作命令要么都执行,要么都不执行. 事务是一个不可分割的工作逻辑单元 . 二.事务的特性 事务必须具备以下四个属性,简称ACID 属性 原子性(Atomicity)

  • MySQL数据库事务原理及应用

    目录 1 事务的使用 1.1 事务概念 1.2 事务的提交 1.3 事务的常见操作 2 事务隔离 2.1 事务并发时出现的问题 2.2 事务隔离级别 1 事务的使用 1.1 事务概念 事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体.MySQL提供一种机制,保证我们达到这样的效果.事务还规定不同的客户端看到的数据是不相同的. 事务就是要做的或所做的事情,主要用于处理操作量大,复杂度高的数据.假设一种场景:你毕业了,学校的教务系统后台

  • 聊聊MySQL事务的特性和隔离级别

    网上对于此类的文章已经十分饱和了,那还写的原因很简单--作为自己的理解笔记. 前言   此篇文章作为自己学习MySQL的一些个人理解,使用的引擎是InnoDb.首先先讲讲事务的概念,在<高性能MySQL>第三版中其对事务的描述是这样的: 事务就是一组原子性的SQL查询,或者说一个独立的工作单元.如果数据库引擎能够成功地对数据库应用该组查询的全部语句,那么就执行该组查询.如果其中有任何一条语句因为崩溃或其他原因无法执行,那么所有的语句都不会执行. ​​  换句话说,事务就是一个整体单位,里面的S

随机推荐