php pdo 表锁定,php - PDO,mysql,事务和表锁定 - SO中文参考 - www.soinside.com

我花了很多时间来解决这个问题,而且这方面的PHP文档充其量是模糊的。我发现的一些事情,使用MySQL InnoDB表运行PHP 7:

PDO :: beginTransaction不只是关闭自动提交,测试了Olhovsky提供的答案,代码失败,回滚不起作用;没有交易行为。这意味着它不能这么简单。

开始一个事务可能会锁定已使用的表...我急切地等待有人告诉我我错了,但这里有原因:$db->beginTransaction();

$db->exec('LOCK TABLES t1, t2, ...');

# do something with tables

$db->commit();

$db->exec('UNLOCK TABLES');,它显示一个表在交易开始时无法访问,没有被锁定。 This comment,最后滑入:

...当交易处于活动状态时,您可以保证在您工作的过程中没有其他人可以进行更改

对我来说,这种行为非常聪明,并且还为PDO提供了足够的摆动空间来应对每个数据库,这毕竟是目标。如果这是正在发生的事情,它只是大量记录下来,应该被称为其他东西,以避免与真正的数据库事务混淆,这并不意味着锁定。

我认为查尔斯的答案可能是最好的,如果你确定需要高并发性的工作量;使用对数据库的显式查询手动完成,然后您可以通过数据库的文档。

更新我已经使用PDO事务功能启动并运行生产服务器一段时间了,最​​近使用AWS的Aurora数据库(与MySQL完全兼容但是可以自动扩展等)。我已经向自己证明了这两点:

事务(纯粹是一起提交所有数据库更改的能力)使用PDO :: beginTransaction()。简而言之,我知道许多脚本在数据库选择/更新的一半时间内已经失败,并且数据完整性得到了维护。

表锁定没有发生,我有一个索引重复错误来证明这一点。

因此,为了进一步得出结论,看起来这些函数的行为似乎基于数据库引擎(以及可能的其他因素)而改变。据我所知,从经验和文档中可以看出,没有办法以编程方式知道发生了什么......呐喊......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值