首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多条记录的MySql唯一id

多条记录的MySql唯一id
EN

Stack Overflow用户
提问于 2009-11-12 00:25:50
回答 2查看 1.1K关注 0票数 1

我使用一个表和一些随意的列,如id,name,email,etc...also,我在每个事务中插入不同数量的记录,为了更有效率,我需要有一个唯一的id让我们称之为事务id,这对于插入到一个事务中的每组数据都是相同的,应该是递增的。做到这一点的最佳方法是什么?我被认为是用

代码语言:javascript
复制
select max(transaction_id) from users 

并在服务器端增加该值,但这看起来像是老式的解决方案。

EN

回答 2

Stack Overflow用户

发布于 2009-11-12 00:30:49

添加包含auto_increment列的新表

您可以创建包含auto_increment列的新表。因此,您将能够以线程安全的方式生成唯一的整数。它的工作原理如下:

代码语言:javascript
复制
DB::insert_into_transaction_table()
transaction_id = DB::mysql_last_insert_id() ## this is integer value
for each record:
    DB::insert_into_table(transaction_id, ...other parameters...)

您不需要使用mysql事务来完成此操作。

插入前在服务器端生成唯一字符串

您可以在服务器端生成唯一的id (例如GUID),并将其用于所有记录的插入。但是您的transaction_id字段应该足够长,以存储以这种方式生成的值(一些char(...)类型)。它的工作原理如下:

代码语言:javascript
复制
transaction_id = new_GUID() ## this is usually a string value
for each record:
    DB::insert_into_table(transaction_id, ...other parameters...)
票数 2
EN

Stack Overflow用户

发布于 2009-11-12 00:46:27

您可以有另一个具有自动递增主键的表usergroups,您首先在其中插入一条记录(可能包括一些关于组的其他有用信息)。然后使用mysql_insert_id()获取在最后一次插入过程中生成的组的惟一id,并将其用作插入到第一个表中的groupid

这样,您仍然使用MySQL的自动编号,这保证了您有一个惟一的groupid。执行select max(transaction_id) from users并递增它是不安全的,因为它是非原子的(另一个线程可能已经读取了相同的max(transaction_id),在您进行更改以递增它之前,将开始插入具有冲突groupid的记录)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1716319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档