MySQL(三):MySQL事务

Mysql事务

1. 事务的概念

​ 如果一个业务操作中有多条DML语句增删改执行,如:转账操作。有两条DML执行。这所有的DML语句必须全部执行成功,如果有一条语句执行失败。已经执行的SQL语句要进行回滚,回到没有执行前的状态。要么所有的SQL语句全部执行成功,要么全部执行失败。称为事务。

四大特性
名称含义
原子性一个事务不可分割,要么全部成功,要么失败回滚。
一致性事务提交前和提交后数据库状态是一致的。
隔离性有多个事务对同一个表进行操作时,事务和事务之间不会相互影响。
持久性事务提交后所造成的改变会永久保存到数据库中。

2. Mysql手动提交事务

Mysql默认自动提交事务,每执行完一条语句就把它提交数据库。

手动提交事务的逻辑如下

在这里插入图片描述

具体的SQL语句

功能SQL语句
开启事务start transaction
提交commit
回滚rollback

Mysql事务原理

在这里插入图片描述

  1. 客户端连接数据库之后,MySQL服务端会为用户自动创建临时日志文件
  2. 没有开启手动提交事务进行操作时,服务端会将SQL语句执行直接写到数据库中,不使用日志文件。
  3. 开启事务之后,所有的写操作会写到日志文件中,查询操作会经过日志文件加工再返回给客户端。
  4. 使用commit和rollrack结束事务并清空日志文件,commit会直接将日志文件的操作写到数据库,rollback直接清空日志文件。

3. 事务的隔离级别

隔离性:事务隔离性指事务和事务之间不相互影响。这是一种理想状况,在事务并发访问时会出现问题。

3.1 并发访问问题

并发访问指多个事务同时访问同一条记录。

并发访问的三个问题

并发访问的问题说明
脏读一个事务读到另一个事务未提交的数据。
不可重复读同一个事务中多次读取同一条记录,发生多次读取数据不一致的情况。
原因:因为一个事务在查询,另一个事务在更新这条记录
幻读一个事务多次统计结果出现不同的情况。
原因:一个事务在统计记录行数,另一个事务在插入或删除记录。

脏读

T2读到T1未提交的数据

在这里插入图片描述

不可重复读

T2事务两次读取同一个变量 var 得到的数据不一致。

在这里插入图片描述

幻读

T1两次读取Customer的数目不一致。

在这里插入图片描述

3.2 隔离级别

为了消除并发访问带来的问题,我们需要设置事务的隔离级别。

隔离级别含义
读未提交一个事务可以读到另一个事务未提交的数据。
读已提交一个事务只能读到另一个事务已经提交的数据。
可重复读在一个事务不管查询多少次都能得到相同的结果。
串行化事务和事务之间只能顺序执行。
级别名称隔离级别脏读不可重复读幻读数据库默认隔离级别
1读未提交read uncommited
2读已提交read commitedOracle和SQL Server
3可重复读repeatable readMysql
4串行化serializable
3.3 mysql关于隔离级别的命令

查询隔离级别

select @@tx_isolation

设置全局事务隔离级别

set global transaction isolation level 隔离级别
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值