Java 使用mysql为每个实例获取唯一的max id

Java 使用mysql为每个实例获取唯一的max id,java,mysql,Java,Mysql,我正在使用一个前缀+自动递增id的字段。对于每个实例,我将取id的最大值+1,并将其添加到前缀中。有人能给我推荐一种方法让它成为独一无二的吗?你可以试试这个: Insert into table1 (id, user_id) SELECT MAX(id)+1, CONCAT('a',CAST(MAX(id)+1 AS char)) FROM table1; 使用max(id)+1的问题是,可能有多个线程进行相同的调用,因此结果不是唯一的。有几种方法可以解决这个问题。第一种方法是使用一个序列,在

我正在使用一个前缀+自动递增id的字段。对于每个实例,我将取id的最大值+1,并将其添加到前缀中。有人能给我推荐一种方法让它成为独一无二的吗?

你可以试试这个:

Insert into table1 (id, user_id)
SELECT MAX(id)+1, CONCAT('a',CAST(MAX(id)+1 AS char))
FROM table1;
使用max(id)+1的问题是,可能有多个线程进行相同的调用,因此结果不是唯一的。有几种方法可以解决这个问题。第一种方法是使用一个序列,在该序列中,每当请求一个新id时,数据库服务器都会增加该数字。您可以使用包含数字的表,但在更新数字时必须锁定该表。或者,您可以允许数据库在插入表时为您创建键,并在插入后检索键。都是有效的


我更喜欢使用Hibernate,并让它确定如何实现我当前使用的数据库的ID。

所以从表中选择max(ID)有什么问题;如果多个用户同时使用此功能,那么add 1max id将是相同的,对吗?但在mysql中,如果在创建表时将id作为主键并选择自动递增,则不必在每次它自动变为唯一时插入它。是的,您是正确的,但在我的例子中,我希望在插入之前使用该id,以便用户稍后引用其记录,这就是为什么我要附加带有前缀的唯一id并将其显示给用户,希望您能得到它?@Lenin向我们展示您的表模式、示例数据和预期输出。您的表中是否有时间(如列日志)?