php - 在 PHP 和 MySQL 中生成连续的发票号码(并发)

标签 php mysql concurrency duplicates

该系统被许多商店使用,每个商店都有自己的发票号码,例如

SHOPA-0001
SHOPA-0002
SHOPA-0003

SHOPB-0001
SHOPB-0002
...

现在我所做的是,选择 MySQL 表中的最后一个 ID,然后为发票号码+1。我的问题是,1个商店有多台PC运行这个系统,如果2个收银员同时提交表格,就会出现重复。

对这个问题有什么建议吗?

最佳答案

像我的回答一样使用安全的意图锁 Here 。但是,如果我有底盘和制动器等部分,那么您的部分将是 SHOPA 和 SHOPB 等。您可以决定是否希望客户端处理零的左侧填充,或者是否希望 mysql 使用列宽 int(4 )或使用LPAD()CONCAT .

正如该答案中提到的,这是实现并发的安全方法,并且商店彼此分开。如果操作正确的话,锁定速度非常快,就像瞬间一样。

关于php - 在 PHP 和 MySQL 中生成连续的发票号码(并发),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39564507/

相关文章:

mysql - 大量的 MySQL 临时磁盘表

go - println 和 fmt.Println 的竞争检测器输出不同

PHP PDO,连接持续时无法设置名称?

php - Laravel get() 与()

php - 为什么 laravel 不返回特定 id 的标识

powershell - MySQLDUMP与CMD/Powershell的区别

php - 从数据库填充下拉列表

concurrency - map()和reduce()适合Go中的并发处理吗?

java - 线程有自己的数据副本吗?

php - SQL 和 PHP 唯一编号