MySQL数据库事务以及事务隔离级别

逃离我推掉我的手 2023-02-11 03:23 28阅读 0赞

文章目录

    • 数据库事务以及事务隔离级别
    • MySQL数据库事务
    • 事务的特性
    • 事务的隔离级别

数据库事务以及事务隔离级别

MySQL数据库事务

数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。

事务的特性

事务特性有四个:
原子性:就是说一个事务要么执行成功,要么执行失败。
一致性:事务中的数据要保持一致,要从一个状态转变为另一个状态。
隔离性:事物之间相互独立,互不干扰。
持久性:一般保存的数据保存在硬盘上,就算是停电数据库关闭,数据都不会丢失。

事务的隔离级别

事务的隔离级别主要说的就是事务的隔离性

不使用事务的隔离级别就会出现什么情况

一、脏读
就是事务1访问到事务2的中间数据,比如就是事务2就是把一个数字进行两次i++操作,但是事务1访问的数据本应该是,两次i++之后的值,但是事务1访问的第一次i++之后的值,将第一次i++之后读取的数据称为脏读。主要就是查询操作

二、不可重复读
就是事务1在读取数据时,第一次读取的数据和第二次读取的数据不一致,就是事务1两次读取数据的期间,数据被另一个事务修改了,以至于事务1第二次读取的数据是事务2修改后的值,所以导致了数据两次读取的数据不一致的结果。

三、幻读
就是事务1进行多次读取时,第一次读取没有数据,第二次读取的时候有数据的结果,也是因为在两次读取期间,其他事务进行的插入操作,以至于事务1第二次读取的数据是其他事务插入或者删除后的值,所以导致了数据两次读取的数据不一致的结果。

从而引出了事务的隔离级别

事务的隔离级别

一、未提交读:就是可以读到未提交的数据,在这种隔离级别下,查询不会进行加锁,这是最低级的隔离级别,可能会发生脏读,不可重复读,幻读的情况。

二、已提交读:就是只能读到事务提交后的数据,SQL Server和Oracle默认的隔离级别,这种隔离级别解决了脏读的问题,但是并不能解决不可重复读和幻读的问题。

三、可重复读:专门解决“不可重复读的”这一情况而制定的,解决了不可重复读这一情况,是MySQL数据库默认的隔离级别。

四、串行化:这是数据库最高的隔离级别,就是事务串行化的进行执行,就是一个一个排队进行执行事务,这个有效的解决了脏读,不可重复读,幻读的情况。

看一下张图,可以看出事务的隔离级别解决的问题
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,28人围观)

还没有评论,来说两句吧...

相关阅读

    相关 数据库事务隔离级别

    数据库事务:所谓事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全部不做,是一个不可分割的工作单位。      对数据库的操作全都是以事务的方式进行! 事务的开始