PDO 事物功能|学习笔记

简介: 快速学习 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对事务功能提供支持,进行简单封装。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的作业提交与查收系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的作业提交与查收系统的详细设计和实现(源码+lw+部署文档+讲解等)
111 1
|
安全 Java 开发者
Java并发编程中的线程安全问题及解决方案探讨
在Java编程中,特别是在并发编程领域,线程安全问题是开发过程中常见且关键的挑战。本文将深入探讨Java中的线程安全性,分析常见的线程安全问题,并介绍相应的解决方案,帮助开发者更好地理解和应对并发环境下的挑战。【7月更文挑战第3天】
335 0
|
架构师 关系型数据库 分布式数据库
实战秘籍 | 《学姐和你一起学PolarDB-X》课程拓展资料(第二讲)
本期课程,由阿里云的开源架构师——黄心雨学姐为大家带来《使用云起实验室体验PolarDB分布式版》,在课后学姐还精心准备了拓展学习资料,供各位开发者们进一步探索和学习,早日成为数据大师!
|
Kubernetes 安全 API
打造成功的 SRE 团队
打造成功的 SRE 团队
430 0
|
存储 算法 Linux
《Linux操作系统编程》第二章 进程运行与调度: 了解进程的定义与特征、进程的状态与切换、进程管理的数据结构、进程的创建与终止、阻塞与唤醒、挂起与激活以及处理机调度的相关概念
《Linux操作系统编程》第二章 进程运行与调度: 了解进程的定义与特征、进程的状态与切换、进程管理的数据结构、进程的创建与终止、阻塞与唤醒、挂起与激活以及处理机调度的相关概念
619 0
|
缓存 JSON 应用服务中间件
Nginx系列:图片过滤处理
默认http_image_filter_module模块是不会编译进nginx的,所以要在configure时候指定编译http_image_filter_module模块。另外http_image_filter_module模块需要依赖gd-devel的支持,可以使用yum install gd-devel先安装,如果未安装会报“/configure: error: the HTTP image filter module requires the GD library.”错误。
882 0
Nginx系列:图片过滤处理
|
机器学习/深度学习 人工智能 自然语言处理
如何用PyTorch训练图像分类器
如果你刚刚开始使用PyTorch并想学习如何进行基本的图像分类,那么你可以参考本教程。
982 0
|
弹性计算 应用服务中间件 云计算
阿里云服务器价格表 ECS最新价格优惠汇总
阿里云服务器优惠精选 近期阿里云在服务器价格优惠方面频频发力,连续推出了多种服务器优惠活动,尤其是8月份推出的2折限时抢活动。阿里云老用户需要购买优惠服务器的情况,可以参考:阿里云优惠活动限制老用户购买的解决方法 阿里云2000优惠券免费领取(阿里云优惠券的作用:购买阿里云产品,最后支付结算的时候,阿里云优惠券可抵扣一部分费用。
2797 0
|
Oracle 关系型数据库 Java
Linux下VNC的安装和开机启动
1.确认VNC是否安装默认情况下,Red Hat Enterprise Linux安装程序会将VNC服务安装在系统上。确认是否已经安装VNC服务及查看安装的VNC版本[root@testdb ~]# rpm -q vnc-servervnc-server-4.
1790 0