0


MySQL的事务是什么?并发事务带来的问题

一.MySQL的事务是什么

    事务就是将一组sql语句放在同一批次去执行,如果一条语句出错则该批次内所有 语句都取消

a:原子性

    事务中的语句要么都执行成功,要么都不执行

b:一致性

    即事务开始之前和事务结束以后,数据库的完整性约束没有被破坏

c:隔离性

    事务之间的执行是互不干扰的

d:持久性

    事务完成以后,该事务对数据库的更改会持久的保存在数据库之中,不会被回滚

二.实现事务的方法

a:先关闭mysql的自动提交

            SET AUTOCOMMIT=0;

b:开启一个事务,标记事务的起点

            START  TRANSACTION;

c:向数据库提交数据 或者 回滚

            COMMIT;   #提交数据(结束了事务)

            ROLLBACK:#事务回滚,回到事务开启之前的数据(结束了事务)

d:开启mysql自动提交

             SET AUTOCOMMIT=1;

三.隔离级别

    mysql中的四个隔离级别

    在mysql8中查看事务隔离级别的语句是

    ![](https://img-blog.csdnimg.cn/0b1be4ac177b4601ad7ca8c5daf4e8c5.png)

    下图的查询的结果,可以看到在mysql8中事务的隔离级别默认是可重复读

     ![](https://img-blog.csdnimg.cn/a62609a683c2432d8f3994bd6d2b2d45.png)

a:READ-UNCOMMITTED读取未提交的

            最低的隔离级别,允许读取尚未提交的数据变更,**可能造成脏读、不可重复读、幻读**

b:READ-COMMITTED读提交

            允许读取并发事务已经提交的数据,**可以避免脏读,但是可能造成不可重复、幻读。**

c:REPEATABLE-READ可重复读

            对同一字段多次读取的结果都是一致的,除非本身事务修改,**可以避免脏读和不可重复读,但是可能造成幻读**

d:SERIALIZABLE可穿行化的

            最严格的隔离级别,相当于对事物读操作,写操作都上锁所以的事务依次执行,**可以避免脏读、不可重复读、幻读。但是高并发下效率最低。**

四.并发事务带来的问题

    可以看出不同的隔离级别在高并发操作下会带来不同的问题,所以我们在修改隔离级别时要根据自身需求,选择最合适的方案

a:脏读

           简言之就是一个事务可以读取到另一个事务没有提交的数据,由于某些原因这条没有提交的数据执行了Rollback,那么这个事读取到的数据就是不正确的。

b:幻读

            一个事务内两次读到的同一条件数据的(行数)结果不同,好像出现了幻觉。比如一个事务在做对全部数据的统一修改操作,与此同时第二条事务也对此表进行插入一条新数据,那么在第一个事务在后面就会发现还有未修改的数据。

c: 不可重复度

            一个事务两次读到的同一条件数据的(内容)结果不同。比如在一个事务内,两次读同一数据。在第一次读完之后但是事务还没有结束时,另外一个事务也访问并修改同一数据。那么,在第一个事务中的第二次读数据时数据可能是不一样的。

   
标签: mysql 数据库 java

本文转载自: https://blog.csdn.net/weixin_72696823/article/details/126611700
版权归原作者 快去吃姜 所有, 如有侵权,请联系我们删除。

“MySQL的事务是什么?并发事务带来的问题”的评论:

还没有评论