首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql的5.7版本默认设置锁表吗?

mysql的5.7版本默认设置锁表吗?
EN

Stack Overflow用户
提问于 2019-08-27 10:11:33
回答 1查看 57关注 0票数 0

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

我有一个mysql数据库(5.7版)和一个网站(PHP7.0),在那里你可以买到一些音乐会的门票。

所以,我有一张桌子,上面有每场音乐会的门票数量。

当用户点击预订按钮时,我调用mysql中的一个过程,检查是否有票,如果答案是肯定的,减少数量并下订单。

所有的表都有InnoDB引擎。

名称: concert_ticket

列: id (主键,自动增量),concert_id,ticket_number

代码

代码语言:javascript
复制
$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. 要使用锁表,必须先用查询锁定表,然后再插入解锁表?
EN

回答 1

Stack Overflow用户

发布于 2019-08-27 12:55:40

  1. 首先,您的表应该使用支持事务的InnoDB引擎。
  2. 第二,您应该在使用START TRANSACTION;的trasaction下运行以下操作
  3. 您的过程应该使用SELECT ... FOR UPDATE;读取当前可用的票证计数。这会锁住这排。
  4. 如果票是可用的,那么您可以更新可用的票务计数并COMMIT事务。
  5. 如果票不可用,您可以选择ROLLBACKCOMMIT (您没有做任何更改)。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57672405

复制
相关文章

相似问题

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