当我在 Laravel 中 运行 事务时,带有 InnoDB 的 MySQL 实例是否锁定行?

Does a MySQL instance with InnoDB lock the rows when I run a transaction in Laravel?

我正在尝试使用 Laravel 4.2 实施应用内积分系统。我打算将用户信用存储在 table 中。由于我希望用户信用不受竞争条件的影响,因此我在互联网上进行了研究以寻求正确的实施方式。一些答案暗示如果我将 Laravel transactions + MySQL instance 与 InnoDB 一起使用,则不会出现任何竞争条件。一些答案建议我使用 lockForUpdate,但我担心使用不当可能会导致死锁。

我该如何实施?如果我只使用交易,我安全吗?

我查看了源代码,发现 Laravel 4.2 的交易是基于 PDO 交易的(例如 PDO::beginTransaction)。使用 MySQL 的 PDO 事务有 种行为。由于遵循了 ACID 规则,我假设我的用例是安全的。