事务

本文介绍了事务的概述,强调了事务的四大特性:原子性、一致性、隔离性和持久性,并详细讲解了四种不同的事务隔离级别,包括它们的概念、优缺点以及可能产生的问题,如脏读、不可重复读和幻读。通过理解这些概念,读者可以更好地掌握数据库事务管理的核心要点。

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

 

事务的概述

           事务的概念

                      事务是由一个系列对系统中数据进行访问与更新 操作组成的一组程序执行逻辑单元

           事务的基本特征

                      事务的4大基本特征:ACID   原子性,一致性,隔离性,持久性

          事务的隔离级别

                      ACID中最难理解的是隔离性

                      在SQL规范中定义了4中隔离级别

                                           ①读未提交

                                           ②读已提交

                                           ③可重复读取

                                           ④顺序读

             原子性

                             ① 事务必须是一个原子的操作序列单元,要不全都操作成功,不要全都操作失败

                             ② 任何一项操作失败都会导致事务失败,同时其他的已经被执行的操作权不都要被撤销和回滚

            一致性

                             ①  事务的执行不能破坏数据库数据的完整性和一致性,一个事务执行之前和执行之后数据库都必须处在一致性                                     状态

                             ② 比如银行转账:A向B转账A转钱-100,但是B没有+100,这就违背了一致性

             隔离性(重要啊)

                            ① 事务的隔离性指的是在并发的情况下,并发事务相互隔离,不能被其他的事务干扰

                            ② 事务的隔离级别(见下文)

            持久性

                            ① 事务的持久性指的是,事务一旦被提交,数据库中的数据被永久的保存下来

                            ②  即使系统崩溃,那么重新启动数据库的话,会恢复到数据执行成功后的状态

事务的隔离级别

            1.未提交读(READ_UNCOMMITED)(不可以解决脏读)

                              一个事务对数据进行更新,但是没有完成提交事务,在同时允许另一个事务也能访问该数据

                              ① 隔离级别允许脏读

                              ② 隔离级别最低

                              脏读实例

                                         脏读:当前事务读到的数据是别的事务想要修改成为的但是没有修改成功的数据

                                         并发的情况下事务A应该希望的结果应该是总金额为1500元的

                                         T5查询的金额为0,这是事务B造成的,这个数据就是脏读数据

             2.提交读 (READ_COMMITED)(解决脏读但是解决不了不可重复读的问题)

                                    只能去读到别的事务提交后的数据,这样也就解决了脏读的问题

                                     不可重复读实例

                                                 不可重复读:事务先前读取了数据,再读取的时候,发现是其他修改后的数据

                                      在事务A在T4的时候读取余额为1000,,,但是在个时候,事务B把数据给改了,当事务A再读取的时候是0,,这个时候就是不可重复读

            3.可重复读(REPEATABLE_READ)(控制脏读和不可重复读但是可能出现幻读)

                                       在事务多次读取同一数据的时候,数据的值和数据开始的时候保持一致

                           幻读实例

                                       幻读:事务第一次读取的数据比第二次读取的数据少了(第二次对数据进行添加了,添加的数据正好满足事务的查询条件)

                                      T3的时候查询为1000,然后事务B又添加100元,导致A再查询的时候是1100元

                 4.顺序读

                                    要求事务只能一个一个的执行,不能并发执行 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值