【发布时间】:2020-08-10 10:02:42
【问题描述】:
我需要为收到的每个订单生成条形码参考。第一个条码为 200000,随后的每个订单增加 1。我必须绝对确定我不会将相同的条形码分配给多个订单。该项目收到大量订单,而且很多订单接连不断。
为了克服这个问题,我创建了一个名为 barcodes 的 MySQL 数据库表,并带有一个自动递增的主键。第一行的ID是200000。
每次我需要生成条形码时,我都会插入barcodes 表,然后使用PHP 的mysqli_insert_id() 来插入ID。然后我更新orders 表,以便将条形码设置为此值。
这很好用,可以防止我将相同的条形码分配给多个订单。
有没有更好的方法?理想情况下,我会有一个表来存储下一个可用 ID,然后运行两个查询:
select next_barcode from barcodes where id=1
然后
update barcodes set next_barcode=next_barcode+1 where id=1
我担心的是,我的代码可能会在运行的同时(即在 UPDATE 之前)调用执行 SELECT 的函数,并且给两个订单提供相同的条形码。
也许有一些可靠的表锁定方法?或者也许我目前的方法是最好的方法?
【问题讨论】:
标签: mysql database sql-update sql-insert auto-increment