MySQL——(五)MySQL事务

本文详细介绍了MySQL事务的四大特性——原子性、一致性、隔离性和持久性,并探讨了事务的四种隔离级别:读取未提交、读取已提交、可重复读和可串行化,以及它们对数据库操作的影响和防止的问题。MySQL的默认隔离级别为可重复读。
摘要由CSDN通过智能技术生成
一、MySQL事务有什么特性?
  • 事务:逻辑上 的一组操作,要不全部成功,要不全部失败回滚
  • 如果一个数据库,声称支持事务的操作,那么该数据库必须具备四个特性(ACID)

四个特征(ACID):

  1. 原子性(atomic)

    (1)原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚

    (2)因此事务的操作如果成功就必须要完全引用到数据库,如果操作失败则不能对数据库有任何的影响

  2. 一致性(consistency)

    (1)事务必须使数据库,从一个一致性状态变换到另一个一致性状态

    (2)例如转账,用户A和用户B余额总共5000,在A和B之间不管如何转账,转几次,事务结束后A和B总数还应该是5000

  3. 隔离性(isolation)

    (1)当多个用户并发访问数据库时,比如操作同一张表,多个并发事务之间要相互被隔离,不能被干扰

    (2)对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么T1之后才开始,这样每个
    事务都感觉不到有其他事务并发执行

  4. 持久性(durability)

    (1)一个事务一旦成功提交,那么对数据库中的数据改变就是永久性的

    (2)事务一旦提示成功处理,即便是在数据库系统遇到故障的情况下,也不会丢失提交事务的操作,必须要将事务完全执行完成


二、事务有哪些隔离级别?MySQL默认隔离级别是什么?

隔离性保证了操作中的事务互不影响,具有四种隔离级别

  • 读取未提交内容(Read Uncommitted)
  • 读取已提交内容(Read Committed)
  • 可重复读(Repeatable Read)
  • 可串行化(Serializable)
  1. 读取未提交内容(Read Uncommitted)

    (1)在该隔离级别,所有事务都可以看到事务未提交的执行结果

    (2)会产生脏读的情况
    在这里插入图片描述

  2. 读取已提交内容(Read Committed)

    (1) 一个事务只能看见,事务已经提交所做的改变,避免了脏读出现

    (2)会产生不可重复读:同一个事务中,两次读取的结果不一致
    在这里插入图片描述

  3. 可重复读(Repeatable Read)

    (1) 这是MySQL的默认事务隔离级别

    (2)保证一个事务只能读取一个事务提交的数据,还会在第一次读取到数据后,就将这些数据加锁(悲观锁),其他事务无法修改这些数据,因此实现可重复读

    (3)这样的事务隔离级别能够防止脏读不可重复读,但是无法避免幻读

    (4) 幻读:当用户读取某一范围的数据时,另一个事务又在该范围内插入了新数据,当用户再次读取该范围时,会发现有新的“幻影”行
    在这里插入图片描述

  4. 可串行化(Serializable)

    (1)这是花费代价最高,最可靠的事务隔离级别

    (2)事务被处理为顺序执行防止脏读、不可重复度、幻读

    (3)它是在每个读、写操作的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值