Mysql_11 事务

事务是数据库操作的基本单位,确保数据的一致性和完整性。本文详细介绍了事务的原子性、一致性、隔离性和持久性四大特性,并讨论了并发事务可能导致的脏读、不可重复读和幻读问题。通过设置不同的事务隔离级别,如READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE,可以解决这些问题。理解这些概念对于数据库管理和高性能应用的开发至关重要。

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

学习自b站骆昊 jackfrued 老师的网课以及黑马网课。
事务是一组不可分割的操作集合,要么都成功执行,要么都失败。如银行账户数据库操作,一个人给另一个人转账1000元,那么这两个人的update操作就是不可分割的,不然如果有一个操作成功执行另一个没有,就可能银行平白无故少了1000或者收款人没收到钱。

事务的步骤:

  1. 开启事务
  2. 执行一条条操作。这期间如果有失败则事务回滚。或者手动进行事务回滚。
  3. 全部执行完后提交事务。默认mysql是自动提交事务的,每执行一条语句就会提交一条。

开启事务

select @@autocommit;-- 1:自动提交;0:手动提交
set @@autocommit=0;-- 开启手动提交

rollback;-- 回滚

commit;-- 提交

或者在@@autocommit=1时临时开启事务:

start transaction;-- 开启事务

事务四大特性 ACID

atomicity 原子性:事务是不可分割的最小操作单元。

consistency 一致性:所有数据保持一致状态。

isolation 隔离性:事务不受外部干扰,独立进行。

durability 持久性:提交或回滚后,事务对数据库的操作就是永久的。

并发事务问题及解决办法

多个事务同时进行时会出现的问题。

以下是数据库事务可以设置的几种隔离级别,分别是应对不同问题用的。

image-20220801231316895

select @@TRANSACTION_ISOLATION;-- 查看数据库隔离级别
set session/global TRANSACTION ISOLATION LEVEL SERIALIZABLE;-- 设置当前会话/全局事务隔离级别为serializable

read uncommitted 是数据库最低隔离级别,即:一个事务中的数据还未提交别的事务就可以读得到。

问题1:脏读:一个事务读到另一个事务未提交的数据(Read uncommitted会发生)

image-20220802212804661

解决办法:read committed 限制一个事务修改的数据要等到提交后别的数据才能读得到。解决了脏读问题,但是没有解决不可重复读问题,事务2第一次读和第二次读数据可能值不一样。

解决后:(给要读取的左边的窗口设置 read-committed 隔离级别)

image-20220802212544087

问题2:不可重复读:一个事务前后读了同一个数据两次,两次值不一样。因为其他事务在这中间提交过一次。

image-20220802213646432

解决办法:repeatable 使得事务2开启后事务1才提交的数据事务2读取不到,避免了不可重复读的问题。但是没有解决串行化问题,即事务2再对数据的修改会覆盖事务1的修改。

问题3:幻读:每个事务开启时把数据读入缓存内,这样重复读取的时候直接从缓存中读取,避免了重复读取数据不一样。但是数据不及时更新,比如事务1删库了,事务2还能读;或者事务1新增了一条主键为i的数据提交了,事务2随后也想新增一条主键为i的数据,提交的时候发现1已经写过了,交不进去了。

image-20220802221507795

解决办法:serializable 让事务1在操作当前数据库时,别的事务直接操作不了。

问题4:开启序列化后,其他事务插入会卡住,等待当前事务插入完成后再执行插入操作。会导致用户体验差,需要等待。所以序列化等级还是很少使用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

灰海宽松

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

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

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

打赏作者

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

抵扣说明:

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

余额充值