1. 程式人生 > >事務控制語句

事務控制語句

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;

技術分享圖片

事務控制語句