首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP、MySQL中的数据阻塞

PHP、MySQL中的数据阻塞
EN

Stack Overflow用户
提问于 2012-11-18 19:47:12
回答 1查看 273关注 0票数 1

我正在为一家小诊所写一个队列管理系统。会有多个用户尝试做相同的事情,所以这是一个并发问题。我熟悉ACID保证,也了解事务的概念。我知道两个人不能同时更改相同的数据。

但这是我的问题:我有一个PHP函数isFree($time),它可以确定特定的医生在那个时间是否有空。我担心如果两个用户尝试调用相同的函数,他们可能都会得到积极的结果并搞砸事情,所以我需要以某种方式将并发用户排入队列,或者只接受一个。

解决这个问题的最简单的方法是限制,这样我的函数可以一次调用一个。我可能需要某种标志或阻塞系统,但我不知道该怎么做。

或者从另一方面来说,如果只限制那些可能重叠的函数调用,速度会更快。例如,同时调用星期一和星期二的isFree($time)函数不会产生任何问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-18 20:06:24

你实际上是在要求一个锁。

我猜您的队列系统是在数据库的MySQL上运行的。如果是这样,您可以LOCK您正在使用的表(或在一些数据库引擎上,您正在使用的特定行!)。它的结构是LOCK TABLES yourTableName READ

这将有效地防止其他任何人读取表中的任何内容,直到:

使用UNLOCK)释放锁结束您的会话is

所有数据库存储引擎都是如此。InnoDB支持通过事务进行行级锁定。不使用SELECT查询,而是给它加上FOR UPDATE后缀,以获得对刚刚读取的行的完整锁定。

This有望进一步阐明MySQL/innoDB的锁定机制。为了释放锁,要么更新行,要么提交事务。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13439814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档