zoukankan      html  css  js  c++  java
  • MySQL学习之事务

    MySQL学习之事务

    前言:今天学习锁的时候讲到了事务,有些都忘了,所以写一篇随笔来复习一下

    1.事务及其ACID

    事务是由一组SQL语句组成的逻辑处理单元。事务具有以下4个特性,简称为事务ACID属性。

    ACID属性 含义
    原子性(Atomicity) 事务是一个原子操作单元,其对数据的修改,要么全部成功,要么全部失败。
    一致性(Consistent) 在事务开始和完成时,数据都必须保持一致状态。
    隔离性(Isolation) 数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的 “独立” 环境下运行。
    持久性(Durable) 事务完成之后,对于数据的修改是永久的。

    并发事务处理带来的问题

    问题 含义
    丢失更新(Lost Update) 当两个或多个事务选择同一行,最初的事务修改的值,会被后面的事务修改的值覆盖。
    脏读(Dirty Reads) 当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。即A事务读取到了B事务修改但未提交的数据
    不可重复读(Non-Repeatable Reads) 一个事务在读取某些数据后的某个时间,再次读取以前读过的数据,却发现和以前读出的数据不一致。即A事务读取到了B事务更新的数据
    幻读(Phantom Reads) 一个事务按照相同的查询条件重新读取以前查询过的数据,却发现其他事务插入了满足其查询条件的新数据。即A事务读取到了B事务增加或删除的数据,仿佛产生了幻觉

    不可重复读和幻读的重要区别是 不可重复读为 B事务 更新 数据,而幻读是B事务增加一行数据或删除一行数据。

    事务隔离级别

    为了解决上述提到的事务并发问题,数据库提供一定的事务隔离机制来解决这个问题。数据库的事务隔离越严格,并发副作用越小,但付出的代价也就越大,因为事务隔离实质上就是使用事务在一定程度上“串行化” 进行,这显然与“并发” 是矛盾的。

    数据库的隔离级别有4个,由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable,这四个级别可以逐个解决脏写、脏读、不可重复读、幻读这几类问题。

    隔离级别 丢失更新 脏读 不可重复读 幻读
    Read uncommitted ×
    Read committed × ×
    Repeatable read(默认) × × ×
    Serializable × × × ×

    备注 : √ 代表可能出现 , × 代表不会出现 。

    Mysql 的数据库的默认隔离级别为 Repeatable read , 查看方式:

    show variables like 'tx_isolation';
    
  • 相关阅读:
    PHP面试:实现动态获取函数参数的方法
    PHP面试:什么是类的多态性,请写出一个例子
    php相关操作
    客户端app支付宝登录接口
    商品分类设计
    Git连接远程服务器
    iptables/mysql设置指定主机访问指定端口
    CMake安装grpc生成gRPCTargets.cmake文件
    Linux下Springboot解决`APR based Apache Tomcat Native library`提示
    java双重检测或枚举类实现线程安全单例(懒汉模式)
  • 原文地址:https://www.cnblogs.com/gttttttt/p/13689725.html
Copyright © 2011-2022 走看看