`
jiangshuiy
  • 浏览: 339283 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

MySQL中获取最后插入的自增ID值

阅读更多
写数据库程序的时候,经常会需要获取某个表中的最大序号数,

在单线程的情况下获取刚插入的数据的id,使用select max(id) from table 是可以的。但在多线程情况下,就不行了。在JAVA中,有下面几种方法:

1. 使用getGeneratedKeys
PreparedStatement  ps  =  conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);      
ps.executeUpdate(); //执行后     
ResultSet rs = ps.getGeneratedKeys(); //获取     
rs.next();       
int id = rs.getInt(1);  


更详细的做法:
Connection conn = ;
Serializable ret = null;
PreparedStatement state = .;
ResultSet rs=null;
try {
     state.executeUpdate();
     rs = state.getGeneratedKeys();
     if (rs.next()) {
         ret = (Serializable) rs.getObject(1);
      }       
     } catch (SQLException e) {
     } 
  return ret;



2. LAST_INSERT_ID

LAST_INSERT_ID是基于Connection的,只要每个线程都使用独立的Connection对象,LAST_INSERT_ID函数将返回该Connection对AUTO_INCREMENT列最新的insert or update*作生成的第一个record的ID。这个值不能被其它客户端(Connection)影响,保证了你能够找回自己的 ID 而不用担心其它客户端的活动,而且不需要加锁。使用单INSERT语句插入多条记录, LAST_INSERT_ID返回一个列表。

3. select @@IDENTITY:

String sql="select @@IDENTITY";

@@identity是表示的是最近一次向具有identity属性(即自增列)的表插入数据时对应的自增列的值,是系统定义的全局变量。一般系统定义的全局变量都是以@@开头,用户自定义变量以@开头。比如有个表A,它的自增列是id,当向A表插入一行数据后,如果插入数据后自增列的值自动增加至 101,则通过select @@identity得到的值就是101。使用@@identity的前提是在进行insert操作后,执行select @@identity的时候连接没有关闭,否则得到的将是NULL值。



备注:不过,MySQL 的 JDBC 文档还是推荐使用 JDBC 3.0 的 getGeneratedKeys() 方法,官方的说法是:使用 SELECT LAST_INSERT_ID() 方式增加了一次与数据库交互。详见:http://dev.mysql.com/doc/refman/5.1/zh/connectors.html#cj-retrieve-autoinc

这个链接中分别使用 getGenerateKeys、LAST_INSERT_ID 和可更新结果集做了示例。并在最后部分,分析了一下 getGenerateKeys() 和 LAST_INSERT_ID 的不足之处,楼主有兴趣的话可以去看一下。

分享到:
评论

相关推荐

    Oracle插入数据时获取自增ID

    ### Oracle插入数据时获取自增ID 在Oracle数据库中,当需要实现类似其他数据库系统(如MySQL、SQL Server等)中的自动增长字段功能时,通常会采用序列(sequence)和触发器(trigger)来实现这一需求。下面将详细...

    Java获取最后插入MySQL记录的自增ID值的3种方法

    在Java编程中,当我们在MySQL数据库中执行插入操作并希望获取新插入记录的自增ID时,有多种方法可以实现这一需求。以下是三种常见的方法,适用于不同的场景。 **方法一:使用PreparedStatement的RETURN_GENERATED_...

    mysql的插入问题 怎么获得自动增长的ID

    - 如果你的应用环境中允许使用`LAST_INSERT_ID()`函数,可以通过执行如下SQL语句来获取最后插入记录的ID。 ```java Statement stmt = connection.createStatement(); stmt.executeUpdate("INSERT INTO test_...

    Go-beego框架自增id自写方法

    首先,理解问题的核心:在循环中插入多条数据时,我们通常希望在每条数据插入后能够获取到其对应的自增ID。在大多数数据库系统中,自增ID是由数据库管理系统自动管理的,每次插入新记录时,它会自动递增并赋值给主键...

    mysql自增字段重排 mysql删除表后自增字段从1开始.pdf

    在MySQL数据库中,自增字段(AUTO_INCREMENT)是一种常见的特性,用于在插入新记录时自动为该字段生成唯一的序列编号。这个字段通常用于主键,确保每个记录的唯一性。以下是对MySQL自增字段相关知识点的详细说明: ...

    jdbc 插入记录并返回自增主键值

    为了获取这个值,我们需要在插入语句中使用`LAST_INSERT_ID()`函数,并在`Statement`对象上设置`RETURN_GENERATED_KEYS`属性: ```java try (Connection conn = DriverManager.getConnection(url, user, password))...

    mybatis获取自增主键的值

    在MyBatis这个流行的Java持久层框架中,处理自增主键的值通常涉及到插入数据后如何获取新生成的ID。下面将详细阐述MyBatis如何实现这一功能。 1. **自增主键的原理**: 自增主键通常在关系型数据库如MySQL、...

    java快速ID自增器

    在传统的SQL数据库如MySQL中,可以设置特定字段为自动增长(AUTO_INCREMENT),每次插入新记录时,该字段的值会自动递增。然而,这种机制在分布式系统或高并发环境下可能无法满足需求,因为单个数据库实例可能无法...

    获取自增ID.docx

    - 使用`SELECT LAST_INSERT_ID()`语句来获取MySQL中最后插入记录的ID。 ##### 2.2 JDBC方法 除了使用MyBatis等ORM框架之外,还可以直接使用JDBC API来实现获取自增ID的功能。这种方式更底层,但也更加灵活。 ```...

    利用Java的MyBatis框架获取MySQL中插入记录时的自增主键

    总结起来,通过在MyBatis的Mapper XML文件中配置`useGeneratedKeys`和`keyProperty`,或者使用`<selectKey>`标签,我们可以轻松地在Java应用中获取MySQL插入记录时自动生成的主键值。这种方式不仅简化了编程,也提高...

    mysql 数据库自增id 的总结.docx

    在MySQL数据库中,自增ID(Auto Increment)是一种常见的特性,用于在插入新记录时自动为指定列(通常是主键)生成唯一的递增数值。在标题提到的文档中,主要讨论了如何使用自增ID以及与之相关的INSERT和REPLACE语句...

    mysql取得自动增长的主键值

    - **功能介绍:** 在JDBC API中,`Statement`对象提供了`getGeneratedKeys()`方法,用于获取由上一次插入操作生成的自增ID。 - **注意事项:** 要使用此方法,需要在创建`Statement`时指定适当的类型和并发级别,...

    PHP获取MySql新增记录ID值的3种方法

    `mysql_insert_id()`是PHP提供的一个非常方便的函数,用于获取最后一条插入记录的自增ID。它的使用方法如下: ```php // 执行插入数据库的语句... $getID = mysql_insert_id(); // $getID即为最后一条记录的ID ...

    mysql自增ID起始值修改方法

    MySQL中的自增ID(AUTO_INCREMENT)是一个非常实用的功能,它自动为新插入的记录生成一个唯一的标识符。自增ID的初始值可以在创建表时指定,也可以在表创建后进行修改。以下是对如何修改和设置MySQL自增ID起始值的详细...

    MyBatis插入时获取自增主键方法

    在这个例子中,`<selectKey>`标签中的SQL语句`select LAST_INSERT_ID()`是MySQL提供的函数,用于获取最后插入行的自增ID。同样,插入后,`id`属性会被更新为自增后的值。 这两种方法都可以有效地帮助你在MyBatis中...

    mysql自增字段重排 mysql删除表后自增字段从1开始.docx

    MySQL的`LAST_INSERT_ID()`函数可以获取自增字段生成的最后一个编号,这对于跟踪插入操作非常有用。但是,这个函数只与当前会话相关,如果在会话中没有生成新的自增值,它将返回0。 对于其他类型的数据表,如MyISAM...

    利用mysql事务特性实现并发安全的自增ID示例

    本篇将详细介绍如何利用MySQL的事务特性来实现并发安全的自增ID,这对于需要全局唯一ID的大型项目来说至关重要。 首先,自增ID通常用于创建唯一标识,例如用户ID(uid)。当用户数量庞大,需要进行分表存储时,简单...

    MySQL自增列插入0值的解决方案

    最后,需要注意的是,虽然通过NO_AUTO_VALUE_ON_ZERO选项可以实现在自增列中插入0值的需求,但按照MySQL官方文档的建议,将0值存储在自增列中并不是推荐的实践。因此,在设计数据库表结构和业务逻辑时,应当尽量避免...

Global site tag (gtag.js) - Google Analytics