zoukankan      html  css  js  c++  java
  • 数据库事务(六)

    数据库事务

    含义

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

    特点

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

    相关步骤:

    1、开启事务
    2、编写事务的一组逻辑操作单元(多条sql语句)
    3、提交事务或回滚事务
    

    事务的分类:

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

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

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

    ①开启事务
        set autocommit=0;
        start transaction;#可以省略
    
    ②编写一组逻辑sql语句
        注意:sql语句支持的是insert、update、delete
    
    设置回滚点:
        savepoint 回滚点名;
    
    ③结束事务
        提交:commit;
        回滚:rollback;
        回滚到指定的地方:rollback to 回滚点名;
    

    使用到的关键字

    set autocommit=0;设置自动提交事务为0
    start transaction;开始事务
    commit;提交事务
    rollback;回滚
    
    savepoint  断点
    commit to 断点
    rollback to 断点
    

    事务的隔离级别:

    事务并发问题如何发生?

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

    事务的并发问题有哪些?

    脏读:一个事务读取到了另外一个事务未提交的数据
    不可重复读:同一个事务中,多次读取到的数据不一致
    幻读:一个事务读取数据时,另外一个事务进行更新,导致第一个事务读取到了没有更新的数据
    

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

    通过设置事务的隔离级别
    1、READ UNCOMMITTED
    2、READ COMMITTED 可以避免脏读
    3、REPEATABLE READ 可以避免脏读、不可重复读和一部分幻读
    4、SERIALIZABLE可以避免脏读、不可重复读和幻读
    

    设置隔离级别:

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

    查看隔离级别:

    select @@tx_isolation;
    
    脏读 不可重复读 幻读
    read uncommitted:读未提交 × × ×
    read committed:读已提交 × ×
    repeatable read:可重复读 ×
    serializable:串行化
  • 相关阅读:
    Row Cache lock Problem
    AIX操作系统上安装Oracle数据库必不可少的几项检查工作
    如何使用MOS风格的代码背景?
    在Ubuntu 10上使用DLink DWA 130无线网卡
    PL/SQL Developer View SQL功能的一个Bug
    11g新特性SQL PLUS 错误日志
    生病了。。。
    ORA00600: [7005], [192]内部错误一例
    Linux:vmware下ubuntu更换网卡后无法识别网卡
    Linux:LFS:第一天:今天开始学习,计划7天时间
  • 原文地址:https://www.cnblogs.com/akiz/p/11179060.html
Copyright © 2011-2022 走看看