我有一个查询,每次用户购买时都会receipt_counter
从receipts
表中获取当前最高的数字,以便创建新的收据。receipt_counter
在表中不是唯一的,因为它每年都会重置。
receipt_counter
只是一个整数,用于生成receipt_label
看起来像"pos_id"-"receipt_counter"
.
人们有可能在同一个销售点同时购买一种产品 ( pos_id
)。
获得新的函数receipt_counter
如下所示:
SELECT (MAX(receipt_counter) + 1) as next_receipt_counter FROM receipts
问题是当多人同时购买产品时,这会触发生成新收据(连同收据编号),有时会发生冲突(多人获得相同的收据编号),因为在检索收据计数器和插入新收据之间存在一些延迟D B。
是否有处理此类问题的最佳实践?我是否需要使用某种死锁,还是我最初的想法有缺陷,我需要改变策略来一起生成收据计数器?
编辑:receipt_counter 需要是一个没有间隙的序列号。