MySQL的事务的相关知识

一、事务的概述

1.1 概念

保证事务中的所有操作都作为一个工作单元来执行,即使出现了故障,都不能改变这种执行方式。

当在一个事务中执行多个操作时,要么所有的事务都被提交(commit),那么这些修改就永久地保存下来;要么数据库管理系统将放弃所作的所有修改,整个事务回滚(rollback)到最初状态。

1.2 事务的原理

事务开启之后,所有的操作都会临时保存到事务日志,事务日志只有在得到commit命令才会同步到数据库表中,其他任何情况都会清空事务日志(rollback,断开连接)。

1.3 事务的使用场景

如果在某个业务中需要执行多条SQL语句,这种情况一般是需要使用到事务,从而保证多条SQL语句执行同时成功或同时失败。

例如:转账、批量删除、从购物车中提交订单等等操作。

1.4 事务的四大特性(ACID)

1. 原子性

原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

2. 一致性

事务必须使数据库从一个一致性状态变换到另外一个一致性状态。

3. 隔离性

事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

4. 持久性

持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响。

二、MySQL进行事务管理操作

2.1 自动事务(MySQL默认)

MySQL默认是自动提交事务的,一条SQL语句就是一个事务。

2.2 开启事务

2.2.1 方式一:手动开启事务

START TRANSACTION

手动开启事务之后,执行的SQL语句都不会真正改变数据库中的数据,需要用户手动提交事务才能够真正执行SQL语句。

2.2.2 方式二:设置MySQL中的自动提交参数

  • 1、查看MySQL中事务是否自动提交
show variables like '%commit%'
  • 2、设置自动提交的参数为OFF
set autocommit = 0

2.2.3 提交和回滚事务

1、提交事务

当事务中的SQL语句执行完毕之后,没有出现任何问题,我们需要在最后提交事务,让这些SQL语句真正执行去改变数据库中的数据。

commit
2、回滚事务

当执行这个事务中的SQL语句的过程中,一旦出现问题或者异常,则需要回滚事务,从而回到SQL语句执行之前的状态。

rollback

三、事务的隔离级别

3.1 不考虑事务的隔离性会引发的问题

事务在操作时的理想状态如下:
所有的事务之间保持隔离,互不影响。因为并发操作,多个用户同时访问同一个数据。可能引发并发访问的问题。

并发访问的问题含义
脏读一个事务读取到了另一个事务中尚未提交的数据
不可重复读一个事务中两次读取的数据内容不一致,要求的是一个事务中多次读取时数据是一致的,这是事务update时引发的问题
幻读一个事务中两次读取的数据的数量不一致,要求在一个事务多次读取的数据的数量是一致的,这是insert或delete时引发的问题

3.2 事务隔离级别

级别名字隔离级别脏读不可重复读幻读数据库默认隔离级别
1读未提交read uncommitted
2读已提交read committedOracle
3可重复度repeatable readMySQL
4串行化serializable最高的隔离级别

隔离级别越高,性能(效率)越差,安全性越高。

3.2.1 设置隔离级别

  • 设置事务隔离级别
set session transaction isolation level 隔离级别;
  • 查询当前事务隔离级别
select @@tx_isolation

学海无涯苦作舟

请添加图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员丶星霖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值