思考:在MySql中,有一种事务功能,能够帮助实现哪些需要多个步骤操作,然后一次性完成的,那么PDO中是如何实现的呢?
引入:其实,事务操作本质上是一种SQL操作,也就是说利用前面所说的写操作(事务都是写操作),就可以实现,而在PDO中,当然也提供
了一定的封装来实现这个功能,从而避免了一些简单的固定SQL执行的操作
PDO事务功能【了解】
定义:PDO事务功能,并非PDO额外多出了一项功能,而是将原来MySql所支持的事务操作进行了一定的封装实现。注意:事务执行是否成功是由MySql对应的存储引擎是否支持决定的
1.事务功能回顾:事务是指改变默认的一次操作一次写入数据表的机制,而是通过事务日志记录操作,在最后通过一次性操作写入到数据表。事务过程如下
- 开始事务:start transaction,写操作停止直接写入数据表,而是记录事务日志
- 事务操作:具体的写操作,通常多个步骤多条指令
- 提交事务:即事务操作结束
- 成功提交:commit,所有事务日志内容同步到数据表,并清空当前事务日志
- 失败提交 rollback ,直接清空当前事务日志
2.PDO类中提供一套方案来实现事务操作
- PDO::beginTransction()开启事务
- PDO::exec()执行事务-----写操作
- PDO::rollBack()回滚所有事务
- PDO::commit()成功提交事务
<?php //实例化PDO函数 封装 function PDO_ini($dsn){ $obj[email protected]new PDO($dsn,‘root‘,‘root‘); if(!$obj){ exit(‘数据库连接失败‘); }else{ return $obj; } } $dsn=‘mysql:host=localhost;port=3306;dbname=senven;charset=utf8‘; $obj=PDO_ini($dsn); //开启事务 $obj->beginTransction() or die("事务开启失败"); //执行事务 $obj->exec(‘insert into hylist (hyid,hyname,hysex,hyphone) values (‘‘,‘‘,‘‘,‘‘,‘‘)‘); //省略下面步骤,使用事务必须是多条指令,一条没由意义 //终止事务 $obj->commit(); //成功提交事务 $obj->rollBack(); //失败回滚 ?>
3.在事务中,由一种回滚点机制,在PDO中没有实现,如果有必要,可以通过SQL指令设置实现
//我们在MySql中操作事务的时候,可以通过下面代码设置会给你点 start transction; #回滚点 savepoint sp1; rollback to sp1; //那么php中如何回滚点设置呢 $PDO->exec(‘savepoint sp1‘);$PDO->exec(‘rollback to sp1‘);
总结:
事务的本质是由既定SL指令完成,二事务具体操作内容一定是外部指定的SQL(写操作)来处理
PDO提供了事务固定内容的封装,包括开启事务(PDO::beginTransction) 执行事务(PDO::exec()) 终止事务(PDO::commit()成功提交事务
PDO::rollBack()失败回滚事务);
回滚点可以通过PDO::exec();方法来设定
如果不采用PDO的事务机制,也可以完全利用PDO::exec()来实现
原文地址:https://www.cnblogs.com/xiaowie/p/12545240.html
时间: 2024-10-10 11:44:09