【发布时间】:2013-03-08 01:01:33
【问题描述】:
我的理解是 Apache 为每个传入的请求创建一个单独的 PHP 进程。这意味着,如果我有类似的代码:
- 检查记录是否存在
- 如果记录不存在,则创建它
那么这很容易受到竞争条件的影响,不是吗?如果两个请求同时进入,并且它们都同时命中 (1),它们都会返回 false,然后都尝试插入新记录。
如果是这样,人们如何处理这个问题?围绕这 2 个请求创建一个 MySQL 事务会解决这个问题,还是我们需要做一个全表锁?
【问题讨论】:
-
INSERT IGNORE、LOCK TABLE 或在您不想复制的列上使用唯一索引都是不错的选择。
-
SELECT ... FOR UPDATE