• TCL(事务控制语言)


    #TCL
    /*
    Transaction Control Language 事务控制语言

    事务:
    一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行。

    案例:转账

    张三丰 1000
    郭襄 1000

    update 表 set 张三丰的余额=500 where name='张三丰'
    意外
    update 表 set 郭襄的余额=1500 where name='郭襄'


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

    事务的创建
    隐式事务:事务没有明显的开启和结束的标记
    比如insert、update、delete语句

    delete from 表 where id =1;

    显式事务:事务具有明显的开启和结束的标记
    前提:必须先设置自动提交功能为禁用

    set autocommit=0;

    步骤1:开启事务
    set autocommit=0;
    start transaction;可选的
    步骤2:编写事务中的sql语句(select insert update delete)
    语句1;
    语句2;
    ...

    步骤3:结束事务
    commit;提交事务
    rollback;回滚事务

    savepoint 节点名;设置保存点

    事务的隔离级别:
    脏读 不可重复读 幻读
    read uncommitted:√ √ √
    read committed: × √ √
    repeatable read: × × √
    serializable × × ×


    mysql中默认 第三个隔离级别 repeatable read
    oracle中默认第二个隔离级别 read committed
    查看隔离级别
    select @@tx_isolation;
    设置隔离级别
    set session|global transaction isolation level 隔离级别;


    开启事务的语句;
    update 表 set 张三丰的余额=500 where name='张三丰'

    update 表 set 郭襄的余额=1500 where name='郭襄'
    结束事务的语句;

    */

    SHOW VARIABLES LIKE 'autocommit';
    SHOW ENGINES;

    #1.演示事务的使用步骤

    #开启事务
    SET autocommit=0;
    START TRANSACTION;
    #编写一组事务的语句
    UPDATE account SET balance = 1000 WHERE username='张无忌';
    UPDATE account SET balance = 1000 WHERE username='赵敏';

    #结束事务
    ROLLBACK;
    #commit;

    SELECT * FROM account;


    #2.演示事务对于delete和truncate的处理的区别

    SET autocommit=0;
    START TRANSACTION;

    DELETE FROM account;
    ROLLBACK;

    #3.演示savepoint 的使用
    SET autocommit=0;
    START TRANSACTION;
    DELETE FROM account WHERE id=25;
    SAVEPOINT a;#设置保存点
    DELETE FROM account WHERE id=28;
    ROLLBACK TO a;#回滚到保存点


    SELECT * FROM account;

  • 相关阅读:
    JS放在head和放在body中的区别
    模板模式(Template Pattern)
    原型模式
    Linux下的头文件搜索路径
    How to Change the Default Theme Appearance [editing with no theme]
    版本控制
    What is libacl.so.1 ?
    交叉编译器 arm-linux-gnueabi 和 arm-linux-gnueabihf 的区别
    mount --bind 的妙用
    mount的bind选项
  • 原文地址:https://www.cnblogs.com/Diyo/p/11364142.html
Copyright © 2020-2023  润新知