• 数据库事务


    一、含义

      通过一组逻辑操作单元(一组DML——sql语句),将数据从一种状态切换到另外一种状态。

    二、特点

      (ACID)

      原子性:要么都执行,要么都回滚
      一致性:保证数据的状态操作前和操作后保持一致
      隔离性:多个事务同时操作相同数据库的同一个数据时,一个事务的执行不受另外一个事务的干扰
      持久性:一个事务一旦提交,则数据将持久化到本地,除非其他事务对其进行修改

    三、相关步骤

      1、开启事务

      2、编写事务的一组逻辑操作单元(多条sql语句)

      3、提交事务或者回滚事务

      

    set autocommit=0;
    start transaction;
    commit;
    rollback;
    

    四、事务的分类

      隐式事务,没有明显的开启和结束事务的标志

      比如

        insert 、update、delete语句本身就是一个事务

      

      显式事务,具有明显的开启和结束事务的标志

        1、开启事务

          取消自动提交事务的功能

        2、编写事务的一组逻辑操作单元(多条sql语句)

          insert

          update

          delete

        3、提交事务或者回滚事务

    五、事务的隔离级别

      事务并发问题如何发生?

        当多个事务同时操作同一个数据库的相同数据时

      事务的并发问题有哪些?

        脏读:一个事务读取到了另外一个事务未提交的数据

          对于两个事物T1,T2.T1读取了已经被T2更新但还没有被提交的字段之后,若T2回滚,T1读取的内容就是临时 且无效的。

        不可重复读:同一个事务中,多次读取到的数据不一致

          对于两个事物T1,T2.T1读取了一个字段,然后T2更新了该字段,之后,T1再次读取同一个字段,值就不同了。

        幻读:一个事务读取数据时,另外一个事务进行更新,导致第一个事务读取到了没有更新的数据

          对于两个事物T1,T2.T1从一个表中读取了一个字段,然后T2在该表中插入了一些新的行。之后,如果T1再 次读取同一个表 ,就会多出几行。

      如何避免事务的并发问题?

        通过设置事务的隔离级别

          1、READ   UNCOMMITTED

          2、READ   COMMITTED         可以避免脏读

          3、REPEATABLE  READ         可以避免脏读、不可重复读和一部分幻读

          4、SERIALIZABLE                         可以避免脏读、不可重复读和幻读

      设置隔离级别:

        set session|global  transaction isolation level 隔离级别名;

      查看隔离级别:

        select @@tx_isolation;

    六、回滚点的演示

       演示savepoint的使用

        set autocommit = 0;

        start transaction;

        delete from  account  where id =25;

        savepoint a;  #设置保存点

         delete from  account  where id =29;

        rollback  to  a;  #回滚到保存点

      关键字 

        savepoint 断点

        commit to 断点
        rollback to 断点

     

  • 相关阅读:
    由AbstractQueuedSynchronizer和ReentrantLock来看模版方法模式
    Java并发编程-CAS
    Java并发编程-volatile
    Java并发编程-synchronized
    学习几个协议
    邻接矩阵存储简单路径(1070)
    输出利用先序遍历创建的二叉树的层次遍历序列(0980)
    中缀表达式转换为后缀表达式(1042)
    特定字符序列的判断(1028)
    舞伴问题(1027)
  • 原文地址:https://www.cnblogs.com/cleanlife/p/14502062.html
Copyright © 2020-2023  润新知