MySQL事务(Transaction)

一、事务定义

事务:一个最小的不可再分的工作单元;通常一个事务对应一个完整的业务(例如银行账户转账业务,该业务就是一个最小的工作单元)。
一个完整的业务需要批量的DML(insert、update、delete)语句共同联合完成。
事务只和DML语句有关,或者说DML语句才有事务

在事务进行过程中
未结束前,DML语句是不会更改底层数据,只是将历史操作记录一下,在内存中完成记录。
在结束时,而且是成功的结束的时候,才会修改底层硬盘文件中的数据。

二、事务四大特征(ACID)

原子性(A):事务是最小单位,不可再分
一致性(C):事务要求所有的DML语句操作的时候,必须保证同时成功或者同时失败
隔离性( I ):事务A和事务B之间具有隔离性
持久性(D):是事务的保证,事务终结的标志(内存的数据持久到硬盘文件中)
AID -> C

三、事务开始、结束标志

时间标志
开始任何一条DML语句(insert、update、delete)执行,标志事务的开启
结束提交:成功的结束,将所有的DML语句操作历史记录和底层硬盘数据来一次同步
回滚:失败的结束,将所有的DML语句操作历史记录全部清空

四、MySQL相关命令

set autocommit = 0; -- 禁用事务
start transaction; -- 开启一个事务 
commit -- 提交事务
rollback -- 回滚

五、隔离级别

  • MySQL默认的事务隔离级别为 repeatable-read
  • Oracle 默认的事务隔离级别为 read-committed

5.1 隔离级别与异常情况

隔离级别脏读不可重复读幻读
读未提交:read uncommitted事物A和事物B,事物A未提交的数据,事物B可以读取到
读已提交:read committed只允许读取已提交数据Oracle默认
可重复读:repeatable read读取期间,其他事务不能进行update操作,但是可以进行insert操作MySQL默认
串行化:serializable
现象事务T1,T2。
T1修改数据但未提交;
T2查询,已发现T1修改后的数据
事务T1,T2。
如果T1读了一条数据,之后T2更新提交了这条数据,T1再次读取就发现值变了。
事务T1,T2。
如果T1读了一条数据,之后T2插入了一些新的数据,T1新增数据时就可能会报错。主键重复
多出现在查询多出现在增删改

5.2 补充:Spring 五种声明性事务

基于元数据的 Spring 声明性事务 (比MySQL多了个默认)
Isolation属性一共支持五种事务设置,具体介绍如下:

  • DEFAULT 使用数据库设置的隔离级别 ( 默认 ) ,由 DBA 默认的设置来决定隔离级别 .
  • READ_UNCOMMITTED 会出现脏读、不可重复读、幻读 ( 隔离级别最低,并发性能高 )
  • READ_COMMITTED 会出现不可重复读、幻读问题(锁定正在读取的行)
  • REPEATABLE_READ 会出幻读(锁定所读取的所有行)
  • SERIALIZABLE 保证所有的情况不会发生(锁表)

5.3 设置事务隔离级别

法一:在配置文件中设置

可以在my.ini文件中使用transaction-isolation选项来设置服务器的缺省事务隔离级别。

-- 选项值:
-- READ-UNCOMMITTED
-- READ-COMMITTED
-- REPEATABLE-READ
-- SERIALIZABLE
-- 例如:
[mysqld]
transaction-isolation = READ-COMMITTED

法二:命令行设置

SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL <isolation-level>
        其中的<isolation-level>可以是:
 -- READ UNCOMMITTED
 -- READ COMMITTED
 -- REPEATABLE READ
 -- SERIALIZABLE
 -- 例如: SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

事务隔离级别的作用范围分为两种:

  • GLOBAL 全局级:对所有的会话有效
  • SESSION 会话级:只对当前的会话有效 (默认值)

欢迎大家评论哟!如果本文对您有帮助,请点个赞,您的点赞对我很重要!这次一定!感谢!!!
转发请注明出处呦!感谢!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Mr.Letian

您的打赏是我最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值