多条记录的 MySql 唯一标识

标签 mysql transactions

我使用一个表,其中包含一些随意的列,例如 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/

相关文章:

mysql - 如何设计一个可以添加 Unresolved 项目数的数据库

php - 第一个参数必须是字符串

mysql - 如果未传递变量,则使用 DB 默认值 (Ruby on Rails)

spring-boot - 在采用过时值的事务中执行的 Spring native 查询

mysql - Amazon 生态系统之外的 Amazon RDS mysqldump

php - 查询表行与匹配的数字?

visual-studio-2012 - 在 Visual Studio 负载测试期间编写自定义事务时间

java - 当您有多个实体时,JPA @Version 注释如何工作

transactions - Febelfin CODA (Coded Statement of Account) 2.3 只在比利时使用?

transactions - Ethereum/Solidity - 查询交易