我们在写数据库程序的时候,经常会需要获取某个表中的最大序号数,
一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的。
但在多线程情况下,就不行了。
下面介绍三种方法
(1) getGeneratedKeys()方法:
程序片断:
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 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID会改变。
在多用户交替插入数据的情况下max(id)显然不能用。
这就该使用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数据库管理中,自增长主键是一种常见的设计模式,主要用于自动为每一行记录生成一个唯一的标识符。然而,这种自增长通常与整型数据类型(如INT)关联,而较少见于字符型数据(如CHAR)。本文将深入探讨如何在...
### MySQL获取自动增长的主键值 在MySQL数据库中,自动增长字段是一种非常有用的特性,尤其是在需要为主键分配唯一标识符的情况下。通过设置一个列的`AUTO_INCREMENT`属性,每当向表中插入新记录时,该列的值会自动...
在MySQL中,经常需要用到自动增长的ID字段作为表的主键,特别是在频繁进行数据插入操作时。本文将深入探讨以下几个方面: 1. **理解自动增长ID的工作原理** 2. **在删除记录后重新插入时ID的变化情况** 3. **不同...
在Oracle数据库中,并没有像MySQL那样的自动增长字段特性,因此在实际应用中,我们常常需要手动实现这一功能。序列(Sequence)是Oracle提供的一种用于生成一系列唯一数值的对象,非常适合用来作为表中的主键值。 #...
在MySQL数据库中,自增长(auto_increment)特性通常用于创建序列化的标识符,这在插入新记录时非常有用,因为它可以自动为新行提供唯一的标识。然而,许多初学者误以为自增长特性只能应用于主键,实际上,MySQL允许...
然而,在某些业务场景中,可能需要将已有的自增长主键INT类型改为CHAR类型。这通常发生在需要更灵活的主键策略或者需要存储特定格式的数据(如UUID)时。以下是一个逐步的示例,说明如何在不丢失现有数据的情况下...
在 MySQL 中,需要使用 `useGeneratedKeys="true"` 和 `keyProperty="id"` 来获取自增长主键。例如: ```xml insert into test (sblsh, xh, jsjg, is_success, is_display, gmt_create, gmt_modify, create_user) ...
MySQL中的自增长键是一种特殊类型的字段,主要用于主键,它能自动递增其数值,无需在插入新记录时显式指定。自增长键对于数据库管理非常有用,因为它简化了插入操作,尤其是当需要唯一标识符时。理解自增长键的工作...
在MySQL中,某些字段通常设置为自增长,比如订单ID,这种字段在新记录插入后会自动递增,无需手动赋值。在上述场景下,我们经常需要在插入数据后获取这个自增长的ID值,以便进一步处理,如将订单ID关联到其他表。...
主键自增长(AUTO_INCREMENT)
在IT领域的数据库设计与开发中,主键的生成机制是一个至关重要的环节,它不仅关系到数据的唯一性,还直接影响到数据库的性能和安全性。Hibernate作为一款流行的Java持久层框架,提供了多种自动生成主键的方法,以...
2. 删除具有自动增长主键的记录后,通常无法直接插入已跳过的主键值,除非你禁用了自动增长特性。 3. 在SQL Server中,`IDENTITY_INSERT`的开关允许在特定情况下插入特定的主键值,但应谨慎使用,因为它可能破坏数据...
当我们需要向MySQL数据库插入新记录并获取自增主键的值时,JDBC提供了相应的功能来实现这一需求。本篇文章将详细讲解如何通过JDBC在Java中执行插入操作并获取自增主键。 首先,确保你已经在项目中引入了MySQL的JDBC...
Oracle 和 MySQL 在处理自动增长列(通常用于主键ID)方面有着显著的差异。自动增长列主要用于确保每个新插入的行都有一个唯一的标识符。在MySQL中,这个过程相对直接,而在Oracle中则需要借助序列(sequence)来实现...
2. **`identity`**:相当于JPA的`GenerationType.IDENTITY`,适合自动增长主键的数据库。 3. **`sequence`**:与JPA的`GenerationType.SEQUENCE`相同,使用数据库序列。 4. **`hilo`**:HiLo算法,通过高位和低位...
在数据库设计中,主键是表结构中至关重要的一部分,它用于唯一标识表中的每一行记录。主键的值必须是唯一的,并且不允许为空。...但在实际应用中,我们需要根据具体业务需求和性能考虑,合理设计和使用自动增长主键。
+ "\n刚刚插入记录的主键自增长值为:" + spares.getId()); } ``` 此外,还有一种方法是使用`<selectKey>`标签。`<selectKey>`允许在插入语句之前或之后执行一个查询,以获取自增主键。例如: ```xml select ...