MySQL 的 5.7 版默认制作锁定表?

  • 本文关键字:锁定 默认 MySQL mysql
  • 更新时间 :
  • 英文 :


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

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


名称:concert_ticket
: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. 如果票证可用,则可以更新可用票证计数并COMMIT事务。
  5. 如果门票不可用,您可以ROLLBACKCOMMIT(您没有进行任何更改(。

最新更新