TCL
/*
Transaction Control Language 事務(wù)控制語言
事務(wù):
一個或一組sql語句組成一個執(zhí)行單元眼刃,這個執(zhí)行單元要么全部執(zhí)行,要么全部不執(zhí)行片习。
案例:轉(zhuǎn)賬
張三豐 1000
郭襄 1000
update 表 set 張三豐的余額=500 where name='張三豐'
意外
update 表 set 郭襄的余額=1500 where name='郭襄'
事務(wù)的特性:
ACID
原子性:一個事務(wù)不可再分割,要么都執(zhí)行要么都不執(zhí)行
一致性:一個事務(wù)執(zhí)行會使數(shù)據(jù)從一個一致狀態(tài)切換到另外一個一致狀態(tài)
隔離性:一個事務(wù)的執(zhí)行不受其他事務(wù)的干擾
持久性:一個事務(wù)一旦提交,則會永久的改變數(shù)據(jù)庫的數(shù)據(jù).
事務(wù)的創(chuàng)建
隱式事務(wù):事務(wù)沒有明顯的開啟和結(jié)束的標(biāo)記
比如insert掸茅、update、delete語句
delete from 表 where id =1;
顯式事務(wù):事務(wù)具有明顯的開啟和結(jié)束的標(biāo)記
前提:必須先設(shè)置自動提交功能為禁用
set autocommit=0;
步驟1:開啟事務(wù)
set autocommit=0;
start transaction;可選的
步驟2:編寫事務(wù)中的sql語句(select insert update delete)
語句1;
語句2;
...
步驟3:結(jié)束事務(wù)
commit;提交事務(wù)
rollback;回滾事務(wù)
savepoint 節(jié)點(diǎn)名;設(shè)置保存點(diǎn)
事務(wù)的隔離級別:
臟讀 不可重復(fù)讀 幻讀
read uncommitted:√ √ √
read committed: × √ √
repeatable read: × × √
serializable × × ×
mysql中默認(rèn) 第三個隔離級別 repeatable read
oracle中默認(rèn)第二個隔離級別 read committed
查看隔離級別
select @@tx_isolation;
設(shè)置隔離級別
set session|global transaction isolation level 隔離級別;
開啟事務(wù)的語句;
update 表 set 張三豐的余額=500 where name='張三豐'
update 表 set 郭襄的余額=1500 where name='郭襄'
結(jié)束事務(wù)的語句;
*/
SHOW VARIABLES LIKE 'autocommit';
SHOW ENGINES;
1.演示事務(wù)的使用步驟
開啟事務(wù)
SET autocommit=0;
START TRANSACTION;
編寫一組事務(wù)的語句
UPDATE account SET balance = 1000 WHERE username='張無忌';
UPDATE account SET balance = 1000 WHERE username='趙敏';
結(jié)束事務(wù)
ROLLBACK;
commit;
SELECT * FROM account;
2.演示事務(wù)對于delete和truncate的處理的區(qū)別
SET autocommit=0;
START TRANSACTION;
DELETE FROM account;
ROLLBACK;
3.演示savepoint 的使用
SET autocommit=0;
START TRANSACTION;
DELETE FROM account WHERE id=25;
SAVEPOINT a;#設(shè)置保存點(diǎn)
DELETE FROM account WHERE id=28;
ROLLBACK TO a;#回滾到保存點(diǎn)
SELECT * FROM account;