2016-09-19 138 views
1

该系统被许多商店使用,并且每个商店都有自己的发票号码,例如,在PHP和MySQL中生成连续的发票号码(并发性)

SHOPA-0001 
SHOPA-0002 
SHOPA-0003 

SHOPB-0001 
SHOPB-0002 
... 

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

对此问题的任何建议?

+0

可能会在您的ID中使用第三个元素,即* SHOPA-COM1-0001 *然后调整您的选择以便通过商店和计算机进行过滤 –

+0

@Memor-X此项目的需求是商店的ID基础,而不是PC –

回答

1

利用保险柜意向锁像我的回答Here。但是,如果我有Chassis和Brakes等部分,那么您的应用就是SHOPA和SHOPB等等。您可以决定是否希望客户端处理左边的零填充,或者如果您希望mysql使用列宽度int(4 )或使用LPAD()CONCAT

正如在答案中所提到的那样,它是一种安全的方式来实现并发性,并且商店被彼此分割。如果正确完成,锁定速度非常快。

+0

感谢**意向锁**提示 –