Mysql的事务是什么?什么是脏读?幻读?不可重复读?

目录

一、事务

        事务的概念:

        事务的ACID原则:

        事物的隔离级别:

二、脏读

三、幻读

四、不可重复读

五、总结


一、事务

        事务的概念:

                事务(transaction):是一组SQL语句操作的集合,这些操作要么全部执行,要么全部不执行,是一个不可分割的整体。

                特点:一个事务中如果有一个操作失败,那么整个事务中所有的操作都会失败,数据库中的数据会回滚到事务开始之前的状态。

                限制:mysql数据库中仅innoDB和DBD类型的数据库表支持事务。

        事务的ACID原则:

                原子性(atomicity):事务中的操作是一个不可分割的整体,整个操作要么执行要么不执行。

                一致性(consistency):事务的执行会从一个一致性状态变为另一个一致性状态。比如:牛魔王银行余额300元,小铁余额1000元,牛魔王给小铁转账200元后,那么牛魔王的余额就会扣200变成100,小铁的余额就会加200变成1200。那么此时事务就会从转账前的一致性状态变成转账后的一致性状态。而如果牛魔王的余额扣了200,小铁的余额没有加200,那么这个就是一个不一致状态。

                隔离性(lsolation):事务与事务之间的操作是互不影响的,一个事务看不到另一个事务的操作的过程,他们之间不会相互干扰。

                持久性(durability):事务的操作是持久性的,在对数据库进行操作完成后这些数据会永久地保存在数据库,不会被回滚。

        事物的隔离级别:

                Read Uncommited(读未提交):在该隔离级别,所有的事务都可以看见其他未提交事务的执行结果,所以会容易出现脏读

                Read Commited(读提交,也叫不可重复读):这是大多数数据库系统默认的隔离级别(但不是mysql的默认隔离级别)。一个事务只能看见别的已经提交的事务对数据库所做的改变。可能会出现以下问题,一个事务读取某条数据读取两遍,读取到的是不一样的数据,即就是一个事务在进行中,读取到了其他事务对旧数据修改的结果。

                Repeatable Read(可重读):此隔离级别是MySQL默认的隔离级别。可重读相当于在事务开启之前取到数据库的一个数据副本,在该事务执行中,读取到的数据都是开启事务之前的数据。

                Serializable(串行化):最高的隔离级别。该隔离级别会在每个事务上加一个锁,其他事务要操作该事务正在操作的数据,必须等到其操作完成并释放锁之后才能操作该条数据。即一个事务必须等到另一个事务提交后才能操作该事务操作的数据。但是会出现阻塞,超时等负面现象。

二、脏读

        脏读(Dirty Read):事务A修改了数据库中的某条数据后,事务B读取了该数据,但事务A由于某些原因回滚了该数据,那么事务B就读取的是一个错误的数据,这边是脏读。

三、幻读

        幻读(Phantom Read):即一个事务两次查询到的数据条数不一致,如事务A查询到了3条数据,此时事务B新增并提交了一条新数据,那么事务A再次查询的时候会发现多了一条数据,好像出现了幻觉,这便是幻读。

四、不可重复读

        不可重复读(non-reaptable read):即一个事务的两次查询,查询到的数据不一致,如事务A查询到了一条数据,此时事务B修改了这条数据,那么事务A再次读取的时候会发现两次读取的数据不一致。

五、总结

        幻读和不可重复读是类似的,只不过幻读查询到的是多了一条新增的数据,即查询到的是另一个事务对数据的插入(insert),而不可重复读查询到的是另一个事务对数据的修改或删除(update/delete)。

  • 26
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值