MySQL学习-MySQL事务(三)

本文复习了数据库事务,介绍其四个特性:原子性、一致性、隔离性、持久性。阐述事务并发下可能出现的脏读、不可重复读、幻读问题,以及四种隔离级别及其作用。还提及事务的启动方式、相关参数设置,最后推荐了MySQL实战课程。

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

先来复习下数据库的事务

事务是数据库提供的一种机制,把一系列的数据库操作作为一个工作单元,要么全部执行成功,要么全部执行失败回滚到这组操作之前的数据库状态,保证数据的完整性一致性。

事务的四个特性A(Atomicity)原子性、C(Consistency)一致性、I(Isolation)隔离性、D(Durability)持久性

A:指的是事务是一组原子操作,要么全部成功,要么全部失败。

C:事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。

I:原则上指一个事务的数据中间状态对另外一个事务是不可见的,但是如果坚持原则执行,所有的事务可能需要排队列顺序执行,效率很低。所以隔离性又分为了几个隔离级别,允许在不影响正确性的情况下提高事务的效率。

D:事务提交后,数据应该永久保存在数据库(有可能只是在日志中和内存中而不在磁盘中,但最终还是保存到磁盘中)

要想理解隔离级别,首先要理解事务并发下可能出现的错误情况:脏读、不可重复读、幻读、

脏读:是指一个事物读取了另外一个事务未提交的数据的中间状态。比如A事务修改了X的值但还未提交,此时B事务查询的时候读取到了X被修改的值。

不可重复读:是指同一事务中的两次查询同一个值却得到不同的结果,这是因为读取到了其他事务提交的数据导致的。

幻读:指一个事务得到的数据里面有未操作的数据,比如A事务在修改id<10的所有数据的一列值,此时事务B插入了一条id=9的数据并提交了。事务A拿到的数据就多出来一条未修改的数据。

隔离级别就是为了解决上面的问题,下面再来看看四种隔离级别:

1、READ_UNCOMMITTED(读未提交)

顾名思义,可以读取到未提交的数据,这是最低的隔离级别。解决不了上述三个问题

2、READ_COMMITED(读已提交)

顾名思义,可读取到已提交的内容,明显可以防止脏读的出现。但是不可重复度和幻读解决不了

3、REPEATABLE_READ(重复读取)

顾名思义,可以重复读取并且读到的值是一致的,解决了不可重复度和脏读,但是解决不了幻读。

4、SERLALIZABLE(串行化)

顾名思义,就是一个事务一个事务顺序执行(加锁实现,当锁冲突时,就必须等待锁释放才能进行下一个事务的操作),事务不是并发执行当然不会出现上述三种错误,但是效率极低。这是最高级别的隔离。

事务的启动方式

相关参数设置:set autocommit=0/1  0:表示事务自动提交关闭,需要手动提交事务,否则所有操作将存在与一个长事务中。

开启事务:begin 或者是 start transaction

提交事物:commit

回滚事务:rollback

 

 

给大家推荐一个MySQL的实力课程,前阿里资深技术专家林晓斌的技术分享,总共45节课程,总时长大约12个小时。

花费12个小时时间从此不再害怕MySQL,从sql执行的每一个细节到MySQL的事物、索引、锁的机制的理解,将帮助你在工作中解决关于mysql的绝大部分问题。

从此不再问度娘这条sql怎么这么慢!!!哈哈哈

欢迎撩我,大家共同探讨学习MySQL。

上一篇:MySQL学习-MySQL日志(二)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值