事務控制語句
阿新 • • 發佈:2018-06-22
true lse one 原子 事務控制 轉賬 失敗 兩個 img
語法
commit; 提交(確認操作,寫到硬盤上) rollback; 回滾(回退) savepoint; 保存點名 rollback to ; 回滾(回退)到某個點
事務的四大特性
transaction 事務(交易)
(是一組語句組成的主體)DML才有事務,select語句,DDL語句是沒有的,它們一旦操作就自動提交
- 原子性
事務中的語句是一個整體,要麽一起成功,要麽一起失敗就像A轉賬到B對應的操作簡單地看有:
update account set money=money-5000 where ano/*賬戶名*/=’A’ ;
- - 這裏不能提交,因為不能確保後面的會成功
- -執行狀態保留為a
update account set money=money+5000 where ano/*賬戶名*/=’B’ ;
- - 這兩個操作要麽一起成功,要麽一起失敗
- -執行狀態保留為b
****偽代碼:**** if(a&&b){ commit; }else{ ollback; } 淘寶上買東西和結賬也是一樣
- 隔離性
當進行dml操作時,如果沒有提交,那對另外一個事務而言數據是不可見的(自己可以看操作後的數據,並且給數據加了鎖,不提交自己不能修改,別人也是看不見、不能修改的)
- 持久性
- 一致性
保存點 savepoint 保存點名
能打破原子性,允許部分成功,部分失敗(大部分情況下要遵循原子性,但有的時候也有要突破的)
insert /*發送短信*/ update savepoint shoufei /*收費*/ insert /*收到短信*/ - - 執行狀態為c insert ... if(!c){ rollback to shoufei; - - 到收費斷點後面的語句全部不執行了 } commit ; /*一定會提交*/
查詢一下表的現在的狀態:
select * from empn;
傳入兩個數據並保存點:
insert into empn values(2, niuniu, 2345678);
回退到保存點a,存入的結果是存入一個數據:
rollback to a; commit; select * from empn;
事務控制語句