#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;