java 学习之路--mysql事务

本文详细介绍了数据库事务的概念,包括其ACID四大特性——原子性、一致性、隔离性和持久性。接着,讨论了事务的四个隔离级别,分别是读未提交、读已提交、可重复读和串行化读,以及它们各自可能引发的问题,如脏读、不可重复读和幻读。此外,还提到了如何在MySQL中开启和设置事务隔离级别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一。什么是事务?

mysql事务就是一组sql语句操作,一个事务内的所有sql操作要么同时失败,要么同时成功

二。事务的特点:

ACID:

A指的是原子性:事务是最小的工作单位,不可再分

C指的是一致性:事务必须保证多条DML语句同时成功或者同时失败

I指的是隔离性:事务与事务之间有隔离级别

D指的是持久性:最终数据必须持久化到硬盘中,事务才算成功的结束

三。事务的隔离级别

事务有4个隔离级别:

读未提交(read uncommitted) 

读已提交(read committed)

可重复读(repeatable read)

串行化读或叫序列化读(serializable read)

为什么要设置隔离级别呢?

因为不设置事务隔离级别会存在一些问题:

假如我开启了两个事务,事务A和事务B

1.读未提交:意思是对方事务为提交,我们当前事务也可以读取到对方提交的数据

存在问题:脏读问题,就是由于对方事务为提交,可能回滚,这样读到的未提交的数据不会持久化到硬盘中,读的就是假的数据

2.为了解决脏读问题,出现了第二级别:读已提交:

意思是只能读到对方事务提交的数据

存在的问题:不可重复读,就是我们当前事务从开启到结束之间,读取到的数据不一致

3.为了解决不可重复读,出现了第三级别:可重复读

隔离的级别更厚,即使对方事务提交了,也读不到,即只要我们当前事务没有接受,读取到的数据都是一样的

存在的问题:幻读:就是对方事务提交了,数据已经持久化到了硬盘当中,但是我们却读不到,即我们读取的数据时假象

使用start transaction开启事务,关闭了制动提交机制

使用set global transaction isolation level 隔离级别

使用select @@global transaction_isolation 查看事务的隔离级别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值