zoukankan      html  css  js  c++  java
  • 事务

    一.事务 (Transaction)关系型数据库 RDBMS
    1.1事务的定义
       一条或者多条sql语句的集合!
       一系列的数据捆绑操作捆绑在一起,成为一个整体
    1.2:事务的特性
       A(Atomicity) 原子性:在事务操作过程中,要么都执行,要么都不执行
       C(Consistency) 一致性:事务必须保证数据库是从一个一致性转到另一个一致性状态
       I(Isolation) 隔离性:确保每个事物之间互不干扰
       D(Durability) 持久性:事务一旦操作,那么对数据库的操作是永久的

    1.3:例子

    --模拟小黑给小白转账  小黑-1000  小白+1000
       updata bank set money=money-1000 where name='小黑';
       updata bank set money=money+1000 where name='小白2';
       --开启事务 begin或者是 start transcation
       begin;
       updata bank set money=money-1000 where name='小黑';
       updata bank set money=money+1000 where name='小白2';
       commit;
       --musql是自动提交事务的 所以我们要关闭自动提交事务
       set autocommit=0;
       updata bank set money=money-1000 where name='小黑';
       updata bank set money=money+1000 where name='小白2';
       rollback;--如果不设置rollback,小黑的钱还是会减少,因为实际和过程中我们使用异常处理机制
       commit;

     1.5:事务的书写原则

      01.事务尽可能的简短

        因为事务启动后,数据库会专门保留资源来保证事务的ACID特定!如果事务繁琐会影响我们的系统性能

      02.事务中涉及到的数据量尽量小

        到高并发的情况产生时,事务操作的数据量1小,各个事务之前对书局的争夺就越小!

            03.查询数据时尽量不要使用事务

        因为查询不会对数据库的数据做改变

          04.事务操作过程中,尽量不要出现用户输入等待的情况

        如果等待时间过长,会占用系统资源,导致系统崩溃

    二.事务隔离级别

       int num=0

            num=10

      2.1:为什么引入事务隔离级别

       01.更新丢失

        两个事务同事操作同一条数据,一个事务把另一个事务的操作结果覆盖了

       02.脏读

        一个事物读取到了另一个事务没有提交的数据,这是相当危险的

       03.不可重读读

        一个事务对同一条数据读取了两次,但是得到的结果不一样

      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;
    修改数据

    在小海豚中也修改同一行数据,发现老转圈(等待)

  • 相关阅读:
    JS递归状态回退
    JS中自定义迭代协议
    深入浅出解析cookie与session
    node.js哲学与核心原理
    深入解析canvas画布游戏机制
    final关键字用法
    static关键字用法
    四:Java设计模式之单例模式
    三:java设计模式之工厂模式
    IntelliJ IDEA 设置Java开发自动格式化
  • 原文地址:https://www.cnblogs.com/wang2386033566/p/9378201.html
Copyright © 2011-2022 走看看