MYSQL四(TCL)
阿新 • • 發佈:2020-08-06
MYSQL基礎(四)
===========
(TCL)[transaction Control Language(事務控制語言)]
事物:
一個或者一組sql語句組成一個執行單元,這個執行單元要麼全部執行,要麼全部不執行。
案例; 轉賬
張三丰 1000
郭襄 1000
update 表 set 張三丰的餘額=500 where name=‘'張三丰';
update 表 set 郭襄的餘額=1500 where name=‘'郭襄';
- 事務和事務隔離級別
===========
# MYSQL基礎(四) /* <h2 style="color:green">(TCL)[transaction Control Language(事務控制語言)]</h2> 事物: 一個或者一組sql語句組成一個執行單元,這個執行單元要麼全部執行,要麼全部不執行。 案例; 轉賬 張三丰 1000 郭襄 1000 update 表 set 張三丰的餘額=500 where name=‘'張三丰'; 意外 update 表 set 郭襄的餘額=1500 where name=‘'郭襄'; 事務的特性:ACID 原子性:一個事務不可再分割了,要麼都執行,要麼都不執行 一致性:一個事務執行會使資料從一個一致狀態切換到另一個一致狀態 隔離性;一個事務的執行不受其他事物的干擾 永續性;一個事務一旦提交,則會永久的改變資料庫的資料 事務的建立 隱式事務;事物沒有明顯的開啟和結束的標記 比如insert、update、delete 語句 事務的隔離級別: 髒讀 不可重複讀 幻讀 read uncommitted: ✅ ✅ ✅ read committed: x ✅ ✅ repeatable read x x ✅ serializable: x x x oracle預設第二個 read committed msyql中預設第三個隔離級別 repeatable read 檢視隔離級別 select @@tx_isolation 設定隔離級別 set session|global transaction isolation level 隔離級別; */ show engines; show VARIABLES LIKE 'autocommit'; delete from 表 where id=1; 顯示事務:事務具有明顯的開啟 和結束的標記 前提;必須先設定自動提交功能為禁用 set autocommit=0; 步驟1;開啟事務 set autocommit=0; start trunsaction;可選的 步驟2;編寫事務中的sql語句(select insert update delete) 語句1; 語句2; ... 步驟3:結束事務 commit;提交事務 rollback;回滾事務 savepoint 節點名、設定儲存點 update 表 set 張三丰的餘額=500 where name=‘'張三丰'; #意外 update 表 set 郭襄的餘額=1500 where name=‘'郭襄'; # 演示事務的步驟 # 一、建立表時設定標識列 DROP TABLE IF EXISTS account; TRUNCATE TABLE account; CREATE TABLE account( id INT primary key auto_increment, `username` varchar(20), balance DOUBLE ) SELECT * from account; INSERT INTO account(username,balance) VALUES('張無忌',1000),('趙敏',1000); # 1366 - Incorrect string value:'\xE5\xBC\xA0\xE4\xB8\x89' for column 'name' a 錯誤修改 alter table account default character set utf8mb4; alter table account change username username varchar(20) character set utf8mb4; # 開啟事務 set autocommit=0; # 編寫一組事務的語句 UPDATE account set balance = 500 where username='張無忌'; UPDATE account set balance = 1500 where username='趙敏'; # 結束事務 ROLLBACK; commit; SELECT * from account; ALTER database students character set utf8mb4; # 演示savepoint 的使用 set autocommit=0; start transaction; delete FROM account where id=3; SAVEPOINT a;#設定儲存點 delete FROM account where id=4; ROLLBACK to a;# 回滾到儲存點 SELECT * FROM account;