• 事务的总结笔记(详解很仔细),mysql事务隔离级别演示,,,


    一.事务 (Trasaction)           关系型数据库 RDBMS
         1.1:事务的定义
            一条或者多条事务的集合!
            一些列的数据操作捆绑在一起,成为一个整体;
         1.2:事务的特性
            A(Atomicity)原子性:在事务操作过程中,要么执行,要么都不执行!
            C(Consistency)一致性:事务必须保证数据库是从一个一致性状态到达另一个一致性状态!
            I(Isolation)隔离性:确保每个事务之间互不干扰!
            D(Durability)持久性:事务一旦操作,那么对数据库中的操作是永久性的!
    1.3:小例子
    -- 模拟小黑给小白转账   小黑-1000  小白+1000
    UPDATE bank  SET money=money-1000 WHERE `name`='小黑';
    UPDATE bank  SET money=money+1000 WHERE `name`='小白2';
    -- 开启事务 begin或者是 start  transaction
    BEGIN;
    UPDATE bank  SET money=money-1000 WHERE `name`='小黑';
    UPDATE bank  SET money=money+1000 WHERE `name`='小白2';
    COMMIT;
    -- mysql是自动提交事务的  所以我们要关闭自动提交事务
    SET autocommit=0;  -- 默认是1 自动提交事务
    BEGIN;
    UPDATE bank  SET money=money-1000 WHERE `name`='小黑';
    UPDATE bank  SET money=money+1000 WHERE `names`='小白2';
    ROLLBACK; --如果不设置rollback,小黑的钱还是会减少,因为实际过程中我们会使用异常处理机制!
    COMMIT
    1.4:使用jdbc和事务模拟转账操作!
       注意点:
          01.connection连接必须是同一个
          02.connnection.setAutoCommit(fasle)
          03.自已模拟出现一个异常,在catch代码块中增加connection.rollback()
          04.connnection.commit()提交事务
     
    1.5:事务的书写原则
        01.事务尽可能简短     
             因为事务启动后,数据库会专门保留资源来保证事务的ACID特定!如果事务繁多会影响我们的系统性能!
        02.事务中涉及到的数据量尽量小
           当高并发的情况产生时,事务操作的数据量越小,各个事务之前对数据的争夺就越小!
        03.查询数据的时候尽量不要使用事务
          因为查询不会对数据库的数据做改变!
     
        04.事务操作过程中,尽量不要出现用户输入等待的情况
          如果等待时间过长,会占用系统资源,导致系统崩溃!
    二:事务隔离级别
    int  num=0;
          num=10;
    2.1:为什么引入事务隔离级别
          01.更新丢失
            两个事务,同时操作同一条数据,一个事务把另一个事务的操作结果覆盖了!
          02.脏读
            一个事务读取到了另一个事务没有提交的数据!这是相当危险的!
     
          03.不可重复读
              一个事务对同一条数据读取了2次,但是得到的结果不一样
             001.虚读
                A事务在查询数据之后,B事务对这条数据做了修改,A再次查询这条数据,已经发生了变化!
             002.幻读
                 A事务在查询数据之后,再次查询的时候,发现数据中少了或者多了一些数据!
     
    2.2:什么是事务隔离级别
     
          针对于上诉所阐述的问题,数据库给我们提供一个解决的方案===》    事务隔离级别
     
     
     
    2.3:事务隔离级别的分类
     
          01.读未提交(ReadUncommitted):允许脏读取,但是不允许更新丢失!
          02.读提交(Read Committed):不允许脏读取,但是允许不可重复读!
          03.可重复读取(Repeatable Read):不允许不可重复读和脏读取!  mysql 默认的事务隔离级别
          04.串行化(Serializable):最严格的事务隔离级别!事务必须一个一个执行!
      注意点:
         事务隔离级别越高,效率越低,但是安全性越高!
    2.4:mysql事务隔离级别演示
         01.查询mysql默认的事务隔离级别
             SELECT @@tx_isolation;
         02.修改事务隔离级别为读未提交(ReadUncommitted)
             SET  tx_isolation="Read-Uncommitted"
         03.演示脏读
             cmd命令行:
               begin;
               修改数据
               在小海豚中查询,发现能看到没有提交的数据!
     
        04.演示更新丢失
              cmd命令行:
     
    begin;
               修改数据
             在小海豚中也修改同一行数据,发现老转圈(等待)

  • 相关阅读:
    Flutter开发指南之理论篇:Dart语法05(单线程模型,事件循环模型,Isolate)
    跨平台将终结
    一万字详解 Redis Cluster Gossip 协议
    Java实现简单的计算器
    CSDN开发者周刊第 22期:谷歌 DeepMind 第四代:不学规则就可以玩游戏;图灵奖得主 Edmund Clarke 因感染“新冠”逝世;
    理解Python闭包,这应该是最好的例子
    sscanf函数用法详解
    web项目中配置多个数据源
    web项目中配置多个数据源
    动态表格之查看、删除、编辑
  • 原文地址:https://www.cnblogs.com/s122/p/9445139.html
Copyright © 2020-2023  润新知