commit; 提交(確認操做,寫到硬盤上) rollback; 回滾(回退) savepoint; 保存點名 rollback to ; 回滾(回退)到某個點
(是一組語句組成的主體)DML纔有事務,select語句,DDL語句是沒有的,它們一旦操做就自動提交sql
事務中的語句是一個總體,要麼一塊兒成功,要麼一塊兒失敗就像A轉帳到B對應的操做簡單地看有:blog
update account set money=money-5000 where ano/*帳戶名*/=’A’ ;
- - 這裏不能提交,由於不能確保後面的會成功
- -執行狀態保留爲a事務
update account set money=money+5000 where ano/*帳戶名*/=’B’ ;
- - 這兩個操做要麼一塊兒成功,要麼一塊兒失敗
- -執行狀態保留爲bit
****僞代碼:**** if(a&&b){ commit; }else{ ollback; } 淘寶上買東西和結帳也是同樣
當進行dml操做時,若是沒有提交,那對另一個事務而言數據是不可見的(本身能夠看操做後的數據,而且給數據加了鎖,不提交本身不能修改,別人也是看不見、不能修改的)io
能打破原子性,容許部分紅功,部分失敗(大部分狀況下要遵循原子性,但有的時候也有要突破的)class
insert /*發送短信*/ update savepoint shoufei /*收費*/ insert /*收到短信*/ - - 執行狀態爲c insert ... if(!c){ rollback to shoufei; - - 到收費斷點後面的語句所有不執行了 } commit ; /*必定會提交*/
查詢一下表的如今的狀態:date
select * from empn;
傳入兩個數據並保存點:select
insert into empn values(2, niuniu, 2345678);
回退到保存點a,存入的結果是存入一個數據:淘寶
rollback to a; commit; select * from empn;