【发布时间】:2013-06-21 01:00:45
【问题描述】:
我是使用事务的新手。
基本上,我可以使用START TRANSACTION 后跟SELECT ... FOR UPDATE 语句成功锁定MySQL 控制台中的一行。该行保持锁定状态,直到我在控制台中运行 COMMIT 命令
但是,当我在 PHP 脚本中使用$db->beginTransaction() 后跟$db->execute("SELECT ... FOR UPDATE") 执行相同操作时,在我运行$db->commit() 脚本之前,该行不会被锁定。
我的意思是,即使在我在 PHP 中运行提交脚本以结束事务之前,我仍然可以在控制台中成功地执行 SELECT ... FOR UPDATE 语句。这是否意味着我的 PHP 脚本在事务期间没有成功锁定行?我怎样才能检查?
【问题讨论】:
-
当您尝试在控制台上检查时,您确定您的事务仍处于打开状态并且尚未通过提交关闭吗?可能是隔离级别的问题,因此您的第一个和第二个示例的默认值不一样......也许这可以帮助找出它们是否不同? stackoverflow.com/questions/5347567/…
-
我刚刚又测试了一遍。我非常肯定我没有通过 PHP 关闭交易,因为我的脚本中没有
$db->commit()。但是,为什么我能够在 PHP 中关闭当前事务之前启动其他事务?当我在控制台中进行交易时,不会出现此问题。即使不运行commit()命令,PHP 是否会自动为我关闭事务?
标签: php mysql concurrency pdo transactions