gpt4 book ai didi

php - MyISAM 比赛条件/锁定表

转载 作者:行者123 更新时间:2023-11-29 16:10:55 26 4
gpt4 key购买 nike

我的“发票”表:

CREATE TABLE `invoices` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`invoice_id` int(11) NOT NULL,
PRIMARY KEY (`id`,`invoice_id`),
UNIQUE KEY `invoice_id` (`invoice_id`),
KEY `order_id` (`order_id`)
) ENGINE=MyISAM AUTO_INCREMENT=115 DEFAULT CHARSET=utf8

当我尝试查询时:

mysqli_query($conn, "LOCK TABLES 'invoices' WRITE");

在 php 脚本中,它不起作用,因为我可以在锁定期间使用 phpMyAdmin 的 SQL 控制台在“锁定”表中插入新行。

我可以完全相信这样的查询吗

INSERT INTO `invoices` (`invoice_id`) SELECT MAX(`invoice_id`)+100 FROM `invoices`

可以成功地防止竞争条件,因此可以使用它来代替 LOCK TABLES 查询;

注释:

  • 我没有创建此表。
  • 我不得更改表格。

最佳答案

当您编写 SQL 查询时,您应该使用反引号而不是单引号将表|列名称括起来。

就你的情况

 mysqli_query($conn, "LOCK TABLES `invoices` WRITE");

注意但我建议您停止尝试“解决”赛车状况。您为什么认为这是您案例中的一个问题?

对于某些项目来说,赛车状况可能是一个大问题。但我怀疑这是否是你的情况。我支持@Dave 评论,你已经有了自动递增索引。在许多情况下这已经足够了。

恕我直言,你不需要这个“锁”。

INSERT INTO `invoices` (`invoice_id`) SELECT MAX(`invoice_id`)+100 FROM `invoices`

这个查询几乎没有任何意义。你能解释一下你为什么要尝试做这个奇怪的插入吗?

关于php - MyISAM 比赛条件/锁定表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55267838/

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