我写了一个客户端程序,存在多人同时操作同一个sql表的情况。
表中有两个字段,ID、BillNo,ID为主键。
这两个字段的值都是由客户端程序生成后,再插入到sql表中的。
生成过程是这样的:
客户端程序首先获取sql表的最大ID,加1后,作为ID的值;
然后BillNo = RBB + 最大ID;
最后,将ID、BillNo插入到sql表中。
但是,假如同一时刻,多个客户端同时操作,则获取到的最大ID可能会相同,这样在插入数据时会出现“不能插入重复键”的情况,因为主键重复了。
我想请教一下,类似这样的情况,在获取最大ID时需要给查询加上什么类型的锁?谢谢。
建议使用 Redis 的 String 中的 incr 或 Hash 中的 HINCRBY 来做辅助,而不是取 max 。