MySQL-TCL语言
MySQL-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的處理的區別
#演示delete
SET autocommit=0;
START TRANSACTION;
?
DELETE FROM account;
ROLLBACK;
#delete刪除后可以回滾
?
#演示truncate
SET autocommit=0;
START TRANSACTION;
?
TRANCATE TABLE account;
ROLLBACK;
?#truncate刪除后不能回滾
?
#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;
?
轉載于:https://www.cnblogs.com/LXL616/p/10840834.html
總結
以上是生活随笔為你收集整理的MySQL-TCL语言的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL注入与防护
- 下一篇: 从Storm到Flink,有赞五年实时计