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;