mysql:锁定没有效果?

xzlaal3s  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(317)

我有一张“报价”表,里面也有“订单”。通过添加唯一的增量订单号,可以将报价更改为“订单”。
我愿意:

$DB->Sql("SELECT GET_LOCK('ORDERNO')");
$n = $DB->resultSql("SELECT max(orderno) FROM orders");
$n += 1;
$DB->Sql("UPDATE orders SET orderno=".$n." WHERE id=".$actualId);
$DB->Sql("SELECT RELEASE_LOCK('ORDERNO')");

但最近,我得到了两个相同的订单号。
我想避免使用

SELECT max(orderno) FOR UPDATE

因为这会阻塞整个表,并且orderno只在代码的这一部分设置,所以我的想法是使用锁来加快速度。
你知道为什么可以得到相同的数字两次吗?

p4rjhz4m

p4rjhz4m1#

可以使用单个update语句:

update orders t
cross join (select max(orderno) as maxno from orders) x
set t.orderno = x.maxno + 1
where id = ?;

演示:http://rextester.com/gejhx43916
这样你就不需要手动锁定任何东西。

相关问题