MySQL——事务机制

事务

  • 什么是事务?

    举例说明:

    ​ 银行中A账户向B账户转账1000元,数据库执行两条update语句,两条update语句必须同时成功或者同时失败,不能出现一条成功一条失败的情况,而事务就是来处理这种情况的。

    需要注意的是只有DML语句才有事务机制,这个不难理解,因为只有DML语句对数据库中的数据进行操作

  • 事务的原理

    请添加图片描述

  • 事务的四大特性(ACID)

    • A:原子性:保证事务是最小的单位,不可再分
    • C:一致性:保证同一事务中的DML语句同时成功或者同时失败
    • I:隔离性:保证事务A和事务B相互隔离
    • D:持久性:持久性说的是最终数据必须持久化的硬盘中,整个事务才算结束
  • 事务的隔离性

    ​ 事务的隔离性存在于多个事务之间,假定事务A和事务B同时访问一个数据库并对其数据进行操作

    ​ 理论上事务的隔离性存在4个级别

    • 第一级别:读未提交(read uncommitted)

      ​ 事务A在操作数据,事务B进来读取数据,可以读到事务A为提交的数据

      ​ 出现的问题:脏读(dirty read),读取到脏数据(不一定有用的数据)

    • 第二级别:读已提交(read committed)

      ​ 事务A在操作数据,事务B来读取数据,可以事务A已提交的数据

      ​ 出现的问题:不可重复读。

      ​ 解释一下什么是不可重复读:事务B早上十点读取一条select语句,而在过程中事务A操作了事务B读到的数据并提交,这时候事务B在读数据就会出现与原数据不符的现象

    • 第三级别:可重复读(repeatable read)

      ​ 解决了不可重复读问题

      ​ 出现的问题:读到的数据是幻象

    • 第四级别:序列化读(serializable)

      ​ 解决了读到的数据是幻象的问题

      ​ 缺点:类似于多线程的锁机制,需要排队进行,效率低

    • Oracle数据库默认隔离级别为第二级别

    • MySQL数据可默认隔离级别为第三级别

  • 设置事务的全局隔离级别

    set global transaction isolation level 级别
    
  • 查看事务的全局隔离级别

    select @@global.transaction_isolation
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值