• mysql事务


    1.事务的理解:

    事务就是一段sql的批处理,考虑到现在的很多程序或软件都是多线程的,对于同一个表可能同时有多个人在操作,为了保持数据的一致性,我们提出这个事务

    2.事务的四大特性(ACID):

    1)原子性:一个事务必须视为一个不可分割的最小工作单元,这个事务的操作要么全部提交成功,要么全部失败回滚

    2)一致性:数据库总数从一个一致性的状态转换到另一个一致性的状态

    3)隔离性:一个事务在进行修改等操作时,对于其他事务来说是不可见的,也就是说其他事务不能与这个事务同时进行修改

    4)持久性:一个事务操作完成一旦提交之后,对数据库的修改就是持久的,不能再后悔回滚的

    3.事务的操作

    1)开启事务:begin

    2)执行对数据的操作,如修改删除等

    3)确认操作提交:commit

    4)回滚操作:rollback在确认提交之前我们可以在后悔回滚,但是一旦事务提交之后就不能再回滚了

    4.事务的隔离级别

    在介绍隔离级别之前我们需要先搞清楚几个概念

    1)脏读:脏读指的是现在有a,b两个事务,b对数据进行了修改但是还未提交,这个时候a对这个数据进行了查询,查到的时b修改后的数据,这个时候b后悔回滚了,数据又恢复到之前的数据,那么a读到的数据就是脏的

    2)不可重复读:事务a重复读取一个数据,在这个事务还没有结束之前,事务b对这个数据进行了修改并且进行了提交,这个时候a接着读,读到的是b修改的数据,这样就造成了a前后读的数据不一致,这叫不可重复读

    3)幻读:a事务对数据表总的所有数据进行修改,这个事务还没进行完的时候,b事务又向这个表中插入一条数据,这个时候a事务发现这个表中还有没被修改的数据,就好像产生幻觉一样,这个就是幻读

    注:这里不可重复读与幻读容易混淆,不可重复读强调的是修改数据,二幻读更注重插入或者删除数据

    事务有四个隔离级别,如下面表格所示

    隔离级别 脏读 不可重复读 幻读
    读未提交
    读已提交
    可重复读
    串行化

    上面的隔离级别是依次增强的,也就是说串行化的隔离级别是最强的,但是我们通常不会用到他,当我们使用串行化的隔离级别的时候,三种情况都不会发生,读未提交是最低的隔离级别,当我们选择这种隔离级别的时候,这三种情况都会发生.mysql默认的隔离级别是可重复读

    查询事务的隔离级别

    1)查询全局的隔离级别select @@global.tx_isolation

    2)查询会话的隔离级别select @@tx_isolation

    修改事务的隔离级别

    SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}

    人生没有白走的路,每一步都算数 恐惧是万恶之源
  • 相关阅读:
    福大软工 · 第十二次作业
    Beta 冲刺(7/7)
    Beta 冲刺(6/7)
    Beta 冲刺(5/7)
    Beta 冲刺(4/7)
    Beta 冲刺(3/7)
    Beta 冲刺(2/7)
    福大软工 · 第十次作业
    Beta 冲刺(1/7)
    64位 CentOS NDK 编译 FFMPEG
  • 原文地址:https://www.cnblogs.com/niusha/p/10482026.html
Copyright © 2020-2023  润新知