我使用一个表,其中包含一些随意的列,例如 id、姓名、电子邮件等...我还在每个事务中插入可变数量的记录,为了提高效率,我需要有一个唯一的 id 让我们调用它的事务 ID,对于插入一个事务中的每组数据都是相同的,应该是增量的。这样做的最佳方法是什么? 我被认为使用
select max(transaction_id) from users
并在服务器端增加该值,但这就像老式解决方案一样接缝。
最佳答案
你可以有另一个表 usergroups
有一个自动递增的主键,你首先在那里插入一条记录(可能包括一些关于组的其他有用信息)。然后使用 mysql_insert_id()
获取在最后一次插入期间生成的组的唯一 ID,并将其用作插入第一个表的 groupid
。
这样你仍然在使用 MySQL 的自动编号,它保证你有一个唯一的 groupid
。执行 select max(transaction_id) from users
并递增它是不安全的,因为它是非原子的(另一个线程可能在您之前读取了相同的 max(transaction_id)
我们对其进行了更改以增加它,并将开始插入具有冲突 groupid
的记录)。
关于多条记录的 MySql 唯一标识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1716319/