事务处理
框架为DAO提供了一套简单的事务处理机制,默认是关闭的,可以通过Datebase::start()
方法开启
注意:
请确保连接的数据表是innodb
的存储引擎,否者事务并不会生效。
在Datebase::start()
之后可以通过Datebase::commit()
来进行完整事务的提交保存,但并不会影响start
之前的操作
同理,可以通过Datebase::rollback()
进行整个事务的回滚,回滚所有当前未提交的事务
当程序调用Datebase::end()
方法后事务会全部终止,未提交的事务也会自动回滚,另外,程序析构时,也会自动回滚未提交的事务
// 在事务开始前的操作都会默认提交,num:0 $this ->testDAO ->filter (['id' =>1])->update (['num' =>0]);// 开始事务 - Database::
start ();// set num = num+2 $this ->testDAO ->filter (['id' =>1])->update (['num' =>['+' =>1]]);$this ->testDAO ->filter (['id' =>1])->update (['num' =>['+' =>1]]);// 回滚事务 - Database::
rollback ();// 当前num还是0 $num =$this ->testDAO ->filter (['id' =>1])->find ()['num' ];// set num = num+2 $this ->testDAO ->filter (['id' =>1])->update (['num' =>['+' =>1]]);$this ->testDAO ->filter (['id' =>1])->update (['num' =>['+' =>1]]);// 提交事务 - Database::
commit ();// num = 2 $num =$this ->testDAO ->filter (['id' =>1])->find ()['num' ];// 关闭事务 - Database::
end ();
另外,事务的开启并不会影响select
操作,只对增加,删除,修改操作有影响