php - 我在处理数据时是否需要锁定我的记录以避免不一致?

标签 php mysql sql multithreading synchronization

我担心防止同时写入相同数据。 (PHP + MySQL)

我有一个简单的流程:

选择一条记录 -> 在 PHP 中处理数据 -> 更新记录

我的噩梦场景(参见下面的示例)是 User1 和 User2 都从数据库中提取相同的记录,并且都更改并写回记录......导致其中一个用户的更改被冲掉而没有被看到.

是否可以在“单线程”模式下运行 PHP,这将使两个用户的操作排队?

谢谢!

编辑:

为了让事情更清楚,这里是我想避免的场景:

  • 用户 1 从数据库中获取数据 v1 (SELECT)
  • 用户 2 从数据库中获取数据 v1 (SELECT)
  • 用户 1 生成数据 v1.1 (PHP)
  • 用户 2 生成数据 v1.1' (PHP)
  • 用户 1 更新数据(更新:v1.1 在数据库中)
  • 用户 2 更新数据和删除数据 v1.1(更新:v1.1' 在 DB 中)

所以我想确保在用户 2 获取数据之前,用户 1 已经更新了它。我不知道这是否是事物的自然顺序,我无事可做,或者我是否需要加锁。

最佳答案

据我所知,PHP 中没有线程,但有像pthreads 这样的API http://www.php.net/manual/en/intro.pthreads.php

可用于线程:

It includes all the tools you need to create multi-threaded applications

顺便说一句,这个问题在 SO 上讨论了很多......

关于php - 我在处理数据时是否需要锁定我的记录以避免不一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39427873/

相关文章:

php - 尝试使用数组值作为 SQL 插入值

php - 根据具有重复值的列以 +1 增量更新列

PHP- SQLSRV_FETCH_ASSOC 和 sqlsrv_fetch_array 错误

sql - 从数据库中随机选择行子集的 SQL 查询的复杂性是多少?

PHP 分页不适用于表格的第二页

MySQL:如何在某些条件下选择特定时间范围之间的最大/最小时间数据?

asp.net - 将 ASP.NET 身份存储移动到 EF Sql 数据库

javascript - Silverstripe 图片上传为 javascript 变量

php - 当两者都被触发时,正则表达式多重前瞻不起作用

php - 计算两个连续日期之间的最大天数