【发布时间】:2015-12-09 09:46:45
【问题描述】:
我的目标是创建一个系统来预订旅行。我的系统是内置在 MySQL + PHP 中的。我在 MySQL 中使用 InnoDB 作为引擎。
当用户选择他想要预订的旅行时,我希望虚拟页面“*.php”将其中一个旅行锁定一段时间(例如 10 分钟),然后在此时间后释放它。
在 DB 中锁定行程的最佳方式是什么?
请注意,我没有谈论行或表,因为我要求最简单的方式来实现这种功能,我不确定我的是否是那个。所以我尝试设计一个表格来包含旅行,看起来像这样:
CREATE TABLE IF NOT EXISTS Trip (
id INT(1) NOT NULL AUTO_INCREMENT,
descr VARCHAR(50) NOT NULL,
quantity INT(2) NOT NULL DEFAULT 10,
PRIMARY KEY (id)
) Engine=InnoDB
【问题讨论】:
-
我会在那个表中设置一个标志,我们称之为
locked (timestamp),在“ipothetic page.php”中设置它now。下次您要访问该行时,请检查now减去保存的时间戳是否大于 10 分钟,...明白我的想法了吗? -
...不使用 MySQL 框架的 transaction nor LOCK 并在表,如果时间戳和“现在”之间的差异大于 10 分钟,则更新该行中的该列!有你的想法吗? :)
-
但这不符合我的目标。想象一下这种情况:我有 10 个用户正在寻找相同的行程,所以他们锁定了他们。第 11 个用户将看到没有可用的行程。相反,在您的场景中,除一个之外的所有用户都可以预订行程。
-
@AniruddhaChakraborty 完成,非常抱歉这个错误。
-
和我为这种有效的问题+1,这种问题对新程序员真的很有帮助
标签: mysql transactions locking create-table