我使用一个表和一些随意的列,如id,name,email,etc...also,我在每个事务中插入不同数量的记录,为了更有效率,我需要有一个唯一的id让我们称之为事务id,这对于插入到一个事务中的每组数据都是相同的,应该是递增的。做到这一点的最佳方法是什么?我被认为是用
select max(transaction_id) from users 并在服务器端增加该值,但这看起来像是老式的解决方案。
发布于 2009-11-12 00:30:49
添加包含auto_increment列的新表
您可以创建包含auto_increment列的新表。因此,您将能够以线程安全的方式生成唯一的整数。它的工作原理如下:
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(...)类型)。它的工作原理如下:
transaction_id = new_GUID() ## this is usually a string value
for each record:
DB::insert_into_table(transaction_id, ...other parameters...)发布于 2009-11-12 00:46:27
您可以有另一个具有自动递增主键的表usergroups,您首先在其中插入一条记录(可能包括一些关于组的其他有用信息)。然后使用mysql_insert_id()获取在最后一次插入过程中生成的组的惟一id,并将其用作插入到第一个表中的groupid。
这样,您仍然使用MySQL的自动编号,这保证了您有一个惟一的groupid。执行select max(transaction_id) from users并递增它是不安全的,因为它是非原子的(另一个线程可能已经读取了相同的max(transaction_id),在您进行更改以递增它之前,将开始插入具有冲突groupid的记录)。
https://stackoverflow.com/questions/1716319
复制相似问题