• lty经典版MySQL基础——TCL事务控制语言


      1 #TCL
      2 /*
      3 Transaction Control Language事务控制语言
      4 事务:
      5 一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行。
      6 
      7 案例:转账
      8 张三丰  1000
      9 郭襄    1000
     10 
     11 update 表 set 张三丰的余额=500 where name='张三丰';
     12 意外
     13 update 表 set 郭襄的余额=1500 where name='郭襄';
     14 
     15 经典面试题:
     16 事务的特性:
     17 ACID
     18 原子性:一个事务不可再分割,要么都执行要么都不执行
     19 一致性:一个事务执行会使数据从一个一致状态切换到另外一个一致状态
     20 隔离性:一个事务的执行不受其他事务的干扰
     21 持久性:一个事务一旦提交,则会永久的改变数据库的数据
     22 
     23 事务的创建
     24 隐式事务:事务没有明显的开启和结束的标记
     25 比如insert、update、delete语句
     26 
     27 delete from 表 where id=1;
     28 
     29 显式事务:事务具有明显的开启和结束的标记
     30 前提:必须先设置自动提交功能为禁用
     31 
     32 set autocommit=0;
     33 
     34 步骤1:开启事务
     35 set autocommit=0;
     36 start transaction;可选的
     37 步骤2:编写事务中的sql语句(select insert update delete)
     38 语句1;
     39 语句2;
     40 ...
     41 
     42 步骤3:结束事务
     43 commit;提交事务
     44 rollback;回滚事务
     45 
     46 
     47 savepoint 节点名;设置保存点
     48 
     49 
     50 
     51 事务的隔离级别:
     52             脏读        不可重复读    幻读    
     53 read uncommitted    √        √        √
     54 read committed        x        √        √
     55 repeatable read        x        x        √
     56 serializable        x        x        x
     57 mysql中默认 第三个隔离级别 repeatable read
     58 oracle中默认第二个隔离级别 read committed
     59 查看隔离级别
     60 select @@tx_isolation;
     61 设置隔离级别
     62 set session|global transaction isolation level 隔离级别;
     63 */
     64 
     65 SHOW ENGINES;
     66 SHOW VARIABLES LIKE 'autocommit';
     67 
     68 #1.演示事务的使用步骤
     69 DROP TABLE IF EXISTS account;
     70 CREATE TABLE account(
     71     id INT PRIMARY KEY AUTO_INCREMENT,
     72     username VARCHAR(20),
     73     balance DOUBLE
     74 );
     75 
     76 INSERT INTO account(username,balance)
     77 VALUES('张无忌',1000),('赵敏',1000);
     78 #开启事务
     79 SET autocommit=0;
     80 START TRANSACTION;
     81 #编写一组事务的语句
     82 UPDATE account SET balance=1000 WHERE username='张无忌';
     83 UPDATE account SET balance=1000 WHERE username='赵敏';
     84 #结束事务
     85 ROLLBACK;
     86 #commit;
     87 
     88 SELECT * FROM account;
     89 
     90 #2.演示事务对于delete和truncate的处理的区别
     91 
     92 #演示delete
     93 SET autocommit=0;
     94 START TRANSACTION;
     95 
     96 DELETE FROM account;
     97 ROLLBACK; -- 回滚可以恢复数据
     98 
     99 #演示truncate
    100 SET autocommit=0;
    101 START TRANSACTION;
    102 TRUNCATE TABLE account;
    103 ROLLBACK; -- 回滚也不能恢复数据
    104 
    105 #3.演示savepoint的使用
    106 SET autocommit=0;
    107 START TRANSACTION;
    108 DELETE FROM account WHERE id=25;
    109 SAVEPOINT a;#设置保存点
    110 DELETE FROM account WHERE id=28;
    111 ROLLBACK TO a;#回滚到保存点
  • 相关阅读:
    【转】关于Vue打包的一个要注意的地方
    ES6 简介
    java ee / JVM Tuning
    network / ifconfig
    My live Read / Oray.com / huashengke / peanut shell / dnspod.cn
    network / VXLAN spine和bord-leaf
    hd + TP-Link SG2008MP / switch
    elasticSearch+ik_smart 支持 符号检索
    使用java+http+Range头 实现视频分段下载
    springBoot+elasticSearch 使用function_score自定义评分
  • 原文地址:https://www.cnblogs.com/yanwuliu/p/13391168.html
Copyright © 2020-2023  润新知