zoukankan      html  css  js  c++  java
  • mysql事务

    事务是存储引擎实现的。

    特性ACID:

    1.原子性:要么全都执行,要么全都不执行

    2.一致性:事务完成时,所有数据保持一致状态

    3.隔离性:一个事务发生不影响其他事物

    4.持久性:事务完成后,对系统的影响是永久性

    事务并发时,可能发生的问题

    1.丢失更新:一个事务更新之后,另一个事务也更新了,但是第二个事务回滚了,则第一个事务也被回滚了。

    2.脏读:一个事务读取到另一个事务未提交的数据。

    3.不可重复读:一个事务因读取到另一个事务已提交的数据。导致对同一条记录读取两次以上的结果不一致。update操作

    4.幻读:一个事务因读取到另一个事务已提交的数据。导致对同一张表读取两次以上的结果不一致。insert、delete操作

    上面几个问题,都是基于2个事务同时处理的时候的问题

    脏读:A事务更新了一条数据,但是事务后面还有工作,事务未提交;B事务同时在工作,读到了A事务刚更新的一条数据,然而由于A事务未完成,A事务有可能被回滚,刚刚更新的这条数据就可能被还原,那么B事务就等于读到了一条无效的数据。

    不可重复读:A事务开始工作,读取id=1的数据,然后开始做其他工作;此时B事务开始工作,修改id=1的数据,事务提交;A事务继续工作,第二次读取id=1的数据,这次居然发现和第一次读到的不一样了。

    幻读:A事务开始工作,读取了整张员工表,然后开始做其他工作;此时B事务开始工作,添加了2个员工,事务提交;A事务继续工作,第二次读取整张员工表,这次居然发现和第一次相比,多了2个员工。

    推荐阅读:https://blog.csdn.net/JIESA/article/details/51317164

    隔离等级:

    1. Read uncommitted (读未提交):最低级别,任何情况都无法保证。

    2. Read committed (读已提交):可避免脏读的发生。

    3. Repeatable read (可重复读----mysql 默认选择):可避免脏读、不可重复读的发生。

    4. Serializable (串行化):可避免脏读、不可重复读、幻读的发生。

    ps: 值得注意的是,如果使用InnoDB,隔离等级到”可重复读(RR)“就已经可以解决幻读了,因为InnoDB有间隙锁

    事务日志:

    undo log: 每次事务开始执行时,先把原始数据记录在这个日志,如果失败则靠这个日志回滚

    redo log: 事务修改信息时,会把修改的数据记录到这个日志,事务提交时,会把这个日志的数据持久化

    bin log: 事物提交成功后,会把事务操作记录到bin log

    事物操作流程:

  • 相关阅读:
    在ubuntu上搭建turnserver
    如何将R包安装到自定义路径
    R读取MySQL数据出现乱码,解决该问题的方法总结
    利用百度API(js),通过地址获取经纬度的注意事项
    通过地址获取经纬度的三种方法; 通过经纬度获取省市的方法
    软件工程-第一周作业汇总
    软件工程作业-采访本课程往届学生记录
    动手实现混合四则运算
    历年学生软件作品点评
    软件工程-东北师大站-第一次作业
  • 原文地址:https://www.cnblogs.com/amiezhang/p/10171531.html
Copyright © 2011-2022 走看看