gpt4 book ai didi

mysql - mysql 5.7版本默认make lock table吗?

转载 作者:行者123 更新时间:2023-11-29 15:40:54 25 4
gpt4 key购买 nike

我正在研究锁定表,但我有一些疑问,并且找不到我的问题的答案。

我有一个 mysql 数据库(版本 5.7)和一个网站(PHP 7.0),您可以在其中购买一些音乐会的门票。
所以,我有一张表,其中列出了每场音乐会的门票数量。
当用户单击预订按钮时,我会调用 mysql 中的一个过程来检查是否有门票,如果答案是肯定的,则减少数量并下订单。
所有表都有 InnoDB 引擎。

表格
名称:音乐会门票
:id(主键,自动增量),concert_id,ticket_number

代码

$querySituation = $db->query("CALL decrementConcert('".$idConcert."',@response)");
$requestSituation = $db->Query("SELECT @response as result;");
$resultProcedure = $requestSituation->fetch_assoc();
if($resultProcedure['result'] != 0){
//insert order
}

现在,我的问题是:
1、这种情况下是否需要主动锁表?
2.在mysql 5.7中,默认情况下是否需要锁表?或者我必须在我的代码中手动执行此操作?
3.要使用锁定表,我必须在过程之前使用查询锁定表并在插入后解锁表?

最佳答案

  1. 首先,您的表应该使用支持事务的 InnoDB 引擎。
  2. 其次,您应该在带有 START TRANSACTION; 的事务下运行以下命令
  3. 您的程序应使用SELECT ... FOR UPDATE;读取当前可用的票证计数。这将锁定该行。
  4. 如果门票可用,您可以更新可用门票数量并提交交易。
  5. 如果票证不可用,您可以ROLLBACKCOMMIT(您未进行任何更改)。

关于mysql - mysql 5.7版本默认make lock table吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57672405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com