PDO 事物功能|学习笔记

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 快速学习 PDO 事物功能,本节学习PDO的事物功能。MySQL学习中了解到MySQL支持事务操作,事务操作可以保证数据的完整性、事务的一些特性。PDO中也可以实现事务操作需求。

开发者学堂课程【PHP 进阶教程-由浅入深掌握面向对象开发-第三阶段PDO 事物功能】学习笔记,与课程紧密联系,让用户快速学习知识。  

课程地址:https://developer.aliyun.com/learning/course/713/detail/12736


PDO 事物功能

 

内容介绍:

一、前言

二、步骤

三、示例

四、小结

 

一、前言

1、目标:掌握PDO对于MySQL事务的封装,能够利用PDO实现事务操作需求

2、概念:

PDO事务功能:并非PDO额外多出了一项功能,而是将原来MySQL所支持的事务操作进行了一定的封装实现

(1)事务执行是否成功是由MySQL对应的存储引擎(InnoDB支持)是否支持决定的

(2)PDO只是对具体的操作步骤进行了封装而已(将原先的代码例如beginTransaction()进行封装)

PDO::beginTransaction():开启事务   (MySQL中为start)

PDO:exec():执行事务(写操作)

PDO::rollBack():回滚所有事务

PDO::commit():成功提交所有事务

以上是四个方法,四个方法支持了该操作。其中缺少了两个方法例如回滚点(可以自己操作)

 

二、步骤

1、初始化数据库操作

2、开启事务

3、执行事务(可能是一些连续的增删改查操作,操作完成后判定事务是否可以提交结果)

4、根据结果选择对事务操作的处理(结果正确提交事务,结果失败回滚事务)

 

三、示例

1、事务操作的基本实现

#实例化PDO对象

$pdo = new PDO( 'mysql:host=localhost; port=3306; dbname=db_2;charset=utf8' , ' root ' , ' root'); //操作的数据库例如现在为db_2,将代码修改为dbname=db_2。可以补充charset=utf8。如果不编写,那么只需要连接上执行SQL,选择数据库时use db_2,写好该SQL指令,然后使用exec执行即可。字符集类似。

#开启事务

$pdo->beginTransaction() or die('事务开启失败’);  //开启未必成功,需要考虑到数据库是否支持事务

/*

#PDO类内部

public function beginTransaction(){

$sql = ‘start transaction’;

#写方法执行

$res=$this ->exec($sql);

#判定结果

if($res===false)return false;

return true;

}

*/

#执行事务

$pdo->exec( 'insert into t_40 values( )');   //执行事务即是写操作,写好对应的SQL操作,此处不做额外案例。数据库中只需要输入start transaction     commit    rollback即可。

#连续操作    //执行操作定是连续操作,单个没有必要,只存在成功或失败,本事即是原子性,用不到事务特点:原子性是保证多个步骤同时成功或失败。

#终止事务:判定结果

$pdo->commit();#成功提交

$pdo->rollback();#失败回滚

事务操作在真正操作时会出现业务比较多的情况,为了让事务尽可能成功,将过程进行记录,回滚到上一步就用到第二个步骤:

2、在事务操作中,有一种回滚点机制,在PDO中没有实现,如果有必要,可以通过SQL指令设置来实现

#实例化PDO对象

$pdo = new PDO( 'mysql:host=localhost;port=3306; dbname=db_2 ' , ' root ' , ' root');

#开启事务

$pdo->beginTransaction() or die('事务开启失败’);

#执行事务

$pdo->exec( 'insert into t_40 values()' );

#设置回滚点

$pdo->exec( ' savepoint sp1 ');

/*

#封装设置回滚点的函数

function savepoint($pdo,$name){   //需要一个PDO对象执行,提供一个名字

$sql = “savepoint{$name}”;

#执行

$res= $pdo->exec($sql);   //对象方法exec,如果在内部则使用方法this。此处只封装函数

#判定结果

return $res ==== false ? false : true;   //判断恒等于,结果成功返回true,失败返回false

}

*/

#继续执行事务...

#回滚

$pdo->exec( ' rollback to sp1 ' );  //回滚与上述封装类似,使用 rollback to函数,提供回滚点名字,与上述类似执行。

#终止事务

$pdo->commit();  #成功提交

$pdo->rollback();#失败回滚

PDO只是做了一些伪装,将一些代码固定好例如beginTransaction等。savepoint是因为用户需要传参数,提供名字,所以自己操作。

以上就是回顾点的操作,不做具体代码实现。效果为事物本身操作的效果,掌握事务操作、原理、特性后就可以进行执行。

 

四、小结

1、事务的本质不是由PDO决定,是由既定SQL指令完成,而事务具体操作内容一定是外部指定的SQL(写操作)来处理(具体例如实现事务insert、update,银行转账updateA减少,updateB增加都为外部指令)

2、PDO提供了事务固定内容的封装,包括开启事务(PDO:beginTransaction())和事务终止(PDO:.commit(和PDO::rollback())。没有对应的savepoint,因为savepoint需要用户参与。

3、回滚点可以通过PDO:.exec()方法写入具体的指令来设定和回滚

4、如果不采用PDO的事务机制,只采用自身的SQL指令:也可以完全利用PDO::exec()来实现.

PDO::exec('start transaction'):开启事务

PDO::exec('commit’):提交事务

PDO::exec('rollback'):回滚事务

以上就是PDO对事务功能提供支持,进行简单封装。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
SQL 关系型数据库 MySQL
PHP与数据库交互的艺术:深入探讨PDO扩展
【8月更文挑战第28天】在数字信息时代的海洋里,PHP作为一艘灵活的帆船,承载着无数网站和应用的梦想。而PDO扩展,则是这艘帆船上不可或缺的导航仪,指引着数据安全与效率的航向。本文将带你领略PHP与数据库交互的艺术,深入浅出地探索PDO的世界,从连接数据库到执行复杂的查询,每一步都清晰可见。我们将一起航行在这段奇妙的旅程上,解锁数据的奥秘,体验编程的乐趣。
36 1
|
SQL 关系型数据库 MySQL
MySQL高级【事务】第十章
MySQL高级【事务】第十章
|
SQL 关系型数据库 MySQL
MySQL数据库之事物(详解)
MySQL数据库之事物(详解)
111 0
|
关系型数据库 MySQL 数据库
事务管理秘籍:MySQL引擎的黄金法则
事务管理秘籍:MySQL引擎的黄金法则
事务管理秘籍:MySQL引擎的黄金法则
|
SQL 关系型数据库 MySQL
一文带你学透MySQL核心——DQL语言
DQL:英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录。
252 0
|
SQL 关系型数据库 MySQL
[MySQL]一文带你学明白数据库控制语言——DCL
嗨咯,小伙伴大家好呀!好几天没见了,周末过得怎么样啊!之前学过的SQL语句不会都忘了吧。如果忘了的话大家可以看一下前几期的文章。本期要学习的是SQL语句中的数据库控制语句——DCL,学习完毕之后MySQL中的SQL语句也就结束了。
155 0
|
存储 SQL Oracle
八、MySQL之事务控制语言
八、MySQL之事务控制语言
105 0
|
存储 SQL Oracle
【MySQL技术内幕】7.8-不好的事物习惯和长事务
【MySQL技术内幕】7.8-不好的事物习惯和长事务
151 0
|
SQL 缓存 关系型数据库
【MySQL四大属性底层实现原理】
【MySQL四大属性底层实现原理】
151 0
【MySQL四大属性底层实现原理】
|
存储 网络协议 关系型数据库
重新认识一下--MySQL数据库
我理解发MySQL以及MySQL是怎样运行的
429 3
重新认识一下--MySQL数据库