了解pdo mysql事务

Webeng

PHP文件说:

如果您以前从未遇到过事务,则它们提供4个主要功能:原子性,一致性,隔离性和持久性(ACID)。用外行的话来说,事务中执行的任何工作,即使它是分阶段进行的,都可以保证在提交时安全地应用于数据库,并且不受其他连接的干扰。

问题:

这是否意味着我可以让两个单独的php脚本同时运行事务,而又彼此不干扰?


通过干扰”对我的意思进行细化

想象一下,我们有下employees表:

 __________________________
|  id  |  name  |  salary  |
|------+--------+----------|
|  1   |  ana   |   10000  |
|------+--------+----------|

如果我有两个脚本具有相似/相同的代码,并且它们在完全相同的时间运行:

script1.phpscript2.php(两者具有相同的代码):

$conn->beginTransaction();

$stmt = $conn->prepare("SELECT * FROM employees WHERE name = ?");
$stmt->execute(['ana']);
$row = $stmt->fetch(PDO::FETCH_ASSOC);

$salary = $row['salary'];
$salary = $salary + 1000;//increasing salary

$stmt = $conn->prepare("UPDATE employees SET salary = {$salary} WHERE name = ?");
$stmt->execute(['ana']);

$conn->commit(); 

并假设事件的顺序如下:

  • script1.php选择数据

  • script2.php选择数据

  • script1.php更新数据

  • script2.php更新数据

  • script1.php commit()发生

  • script2.php commit()发生

在这种情况下,ana的薪水是多少?

  • 会是11000吗?然后这是否意味着1个事务将与另一个事务重叠,因为该信息是在任一提交发生之前获得的?

  • 会是12000吗?那么这是否意味着无论更新和选择数据的顺序如何,commit()函数都会强制这些操作单独发生?

请随意详细说明事务和单独的脚本如何相互干扰(或不相互干扰)。

阴影

您不会在php文档中找到答案,因为这与php或pdo无关。

mysql中的Innodb表引擎提供了4个所谓的与sql标准一致的隔离级别隔离级别与阻塞/非阻塞读取一起将确定上述示例的结果。您需要了解各种隔离级别的含义,并根据需要选择适当的隔离级别。

总结一下:如果在自动提交关闭的情况下使用可串行化的隔离级别,则结果将为12000。在所有其他隔离级别和启用自动提交的可串行化的情况下,结果将为11000。如果开始使用锁定读取,则结果可能是在所有隔离级别下为12000。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PDO事务中多个MYSQL更新失败

来自分类Dev

PHP,MySQL,PDO事务-fetchAll()可以在commit()之前吗?

来自分类Dev

MySql PDO开始事务并将其传递给对象

来自分类Dev

PHP,MySQL,PDO事务-fetchAll()可以在commit()之前吗?

来自分类Dev

了解Hibernate事务

来自分类Dev

了解MySQL的内存使用情况会导致PHP(PDO)

来自分类Dev

了解MySQL的内存使用情况会导致PHP(PDO)

来自分类Dev

PHP,MySQL,PDO事务-在调用commit()之后可以使用rollBack()吗?

来自分类Dev

PHP,MySQL,PDO事务-在调用commit()之后可以使用rollBack()吗?

来自分类Dev

了解Django中的原子事务

来自分类Dev

了解pdo和oop

来自分类Dev

了解实体框架事务及其行为

来自分类Dev

通过提交进行pdo事务澄清

来自分类Dev

执行会破坏 PDO 事务吗?

来自分类Dev

MySQL事务时序

来自分类Dev

MySQL事务时序

来自分类Dev

使用BasicDataSource的MYSQL事务

来自分类Dev

MySQL事务-事务期间读取

来自分类Dev

MySQL事务-事务期间读取

来自分类Dev

PHP PDO-对初学者的了解

来自分类Dev

了解PDO类的初始化

来自分类Dev

了解EJB和Hibernate上下文中的事务

来自分类Dev

了解MySQL说明输出

来自分类Dev

了解MySQL中的索引

来自分类Dev

MySQL:了解SQL代码

来自分类Dev

了解MySQL中的死锁

来自分类Dev

了解MySQL中的索引

来自分类Dev

MySQL错误-了解它

来自分类Dev

了解MySQL返回