【发布时间】:2024-10-10 14:50:02
【问题描述】:
我在 MySQL 中使用事务来存储订单。每个订单都有OrderID (BIGINT),如下所示:XXXXXX0001,后四位递增(1620200001、1620200002、1620200003、...)。
交易如下:
start transaction
get new OrderID (increment by 1)
do some stuff
commit/rollback
保存交易可能需要几秒钟,如果在很短的时间内创建了多个订单,则可以将重复的OrderID 插入数据库。在提交第一个订单之前,第二个被分配了相同的OrderID,目前是下一个订单。
防止这种情况的最佳方法是什么?拥有UNIQUE OrderID 并不能解决它(第二个顺序会有回滚)。我可以摆脱事务并更快地保存OrderID,但这会导致其他潜在问题并且不能完全解决这个问题(只是减少了问题发生的机会)。
任何帮助将不胜感激。
【问题讨论】:
标签: mysql transactions auto-increment