1. 程式人生 > 實用技巧 >lty經典版MySQL基礎——TCL事務控制語言

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;#回滾到儲存點