zoukankan      html  css  js  c++  java
  • MySQL_基础_TCL事务控制语言

    事务(ACID)的特性

    原子性(Atomicity)    一个事务不可再分割,要么都执行要么都不执行
    一致性(Consistency)  一个事务执行会使数据从一个一致状态切换到另外一个一致状态
    隔离性(Isolation)    一个事务的执行不受其他事务的干扰
    持久性(Durability)   一个事务一旦提交,则会永久的改变数据库的数据

    事务的并发问题

    脏读:读到未提交更新数据,就是读到另一个事务未提交数据,就是脏数据
    不可重复读:对同一记录两次读取不一致,因为另一事务对该记录做了修改
    幻读:对同一张表的两次查询不一致,因为另一事务插入了一条数据

    事务的隔离级别

    隔离级别                    脏读       不可重复读        幻读
    未提交读(READ-UNCOMMITTED)   √            √            √
    已提交读(READ-COMMITTED)     ×            √            √
    可重复读(REPEATABLE-READ)    ×            ×            √
    可串行化(SERIALIZABLE)       ×            ×            ×
    
    Oracle 支持的 2 种事务隔离级别: READ-COMMITTED, SERIALIZABLE。 Oracle 默认的事务隔离级别为: READ-COMMITTED
    Mysql 支持 4 种事务隔离级别. Mysql 默认的事务隔离级别为: REPEATABLE-READ
    
    查看隔离级别
    SELECT @@[session.]tx_isolation;                        # 查看会话隔离级别
    SELECT @@global.tx_isolation;                           # 查看全局隔离级别
    
    设置隔离级别
    SET [SESSION] TRANSACTION ISOLATION LEVEL 隔离级别;     # 设置会话隔离级别
    SET GLOBAL TRANSACTION ISOLATION LEVEL 隔离级别;        # 设置全局隔离级别

    事务的使用

    事务提交
        SET autocommit = 0;                                           # 关闭自动提交
        START TRANSACTION;                                            # 开启事务
        INSERT INTO user(username, password) VALUES ('张三', '123');    # 执行SQL1
        INSERT INTO user(username, password) VALUES ('李四', '456');    # 执行SQL2
        COMMIT;                                                       # 提交所有
        SET autocommit = 1;                                           # 开启自动提交
    
    事务回滚
        1、回滚所有
        SET autocommit = 0;                                           # 关闭自动提交
        START TRANSACTION;                                            # 开启事务
        INSERT INTO user(username, password) VALUES ('张三', '123');    # 执行SQL1
        INSERT INTO user(username, password) VALUES ('李四', '456');    # 执行SQL2
        ROLLBACK;                                                     # 回滚所有
        SET autocommit = 1;                                           # 开启自动提交
    
        2、回滚至保存点
        SET autocommit = 0;                                           # 关闭自动提交
        START TRANSACTION;                                            # 开启事务
        INSERT INTO user(username, password) VALUES ('张三', '123');    # 执行SQL1
        SAVEPOINT a;                                                  # 设置保存点
        INSERT INTO user(username, password) VALUES ('李四', '456');    # 执行SQL2
        ROLLBACK TO a;                                                # 回滚至保存点
        SET autocommit = 1;                                           # 开启自动提交
  • 相关阅读:
    spring之通过实例工厂方法配置Bean
    spring之通过静态工厂方法配置Bean
    spring之添加后置处理器的bean的生命周期
    spring之未加后置处理器的bean的生命周期
    TreeMap源码分析——基础分析(基于JDK1.6)
    HashMap源码分析(基于JDK1.6)
    left join 和 left outer join 的区别
    开发者必备的6款源码搜索引擎
    理想的技术面试过程
    一篇学习HTTP状态码的神文:我与依依的橙色岁月
  • 原文地址:https://www.cnblogs.com/Small-music/p/9274339.html
Copyright © 2011-2022 走看看