`

mysql获取插入、添加记录的自动编号

 
阅读更多
[color=indigo][/color]如何获取某个表中的最大序号数?一般情况下获取刚插入的数据的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返回一个列表。 LAST_INSERT_ID 自动返回最后一个 INSERT 或 UPDATE 操作为 AUTO_INCREMENT 列设置的第一个发生的值. 参考这里 The ID that was generated is maintained in the server on a per-connection basis. LAST_INSERT_ID是基于单个connection的, 不可能被其它的客户端连接改变。 可以用 SELECT LAST_INSERT_ID(); 查询LAST_INSERT_ID的值. Important: If you insert multiple rows using a single INSERT statement, LAST_INSERT_ID() returns the value generated for the first inserted row only. 使用单INSERT语句插入多条记录, LAST_INSERT_ID只返回插入的第一条记录产生的值.
比如 mysql> INSERT INTO t VALUES (NULL, ‘aaaa’), (NULL, ‘bbbb’), (NULL, ‘cccc’);
mysql> SELECT * FROM t; +—-+——+ | id | name | +—-+——+ | 1 | Bob | | 2 | aaaa | | 3 | bbbb | | 4 | cccc | +—-+——+
mysql> SELECT LAST_INSERT_ID(); +——————+ | LAST_INSERT_ID() | +——————+ | 2 | +——————+ ID 2 是在插入第一条记录aaaa 时产生的.
LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID会改变。 一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的。 但在多线程情况下,就不行了。在多用户交替插入数据的情况下max(id)显然不能用。 这就该使用LAST_INSERT_ID了,因为LAST_INSERT_ID是基于Connection的,只要每个线程都使用独立的Connection对象,LAST_INSERT_ID函数将返回该Connection对AUTO_INCREMENT列最新的insert or update操作生成的第一个record的ID。这个值不能被其它客户端(Connection)影响,保证了你能够找回自己的 ID 而不用担心其它客户端的活动,而且不需要加锁。 (3)select @@IDENTITY: String sql=”select @@IDENTITY”; @@identity是表示的是最近一次向具有identity属性(即自增列)的表插入数据时对应的自增列的值,是系统定义的全局变量。一般系统定义的全局变量都是以@@开头,用户自定义变量以@开头。比如有个表A,它的自增列是id,当向A表插入一行数据后,如果插入数据后自增列的值自动增加至101,则通过select @@identity得到的值就是101。使用@@identity的前提是在进行insert操作后,执行select @@identity的时候连接没有关闭,否则得到的将是NULL值。
分享到:
评论

相关推荐

    获取自动编号源代码获取自动编号源代码

    在关系型数据库中,如MySQL、SQL Server或Oracle,我们可以使用内置的自动递增(Auto Increment)或序列(Sequence)功能来生成自动编号。例如,在SQL Server中,可以创建一个具有Identity属性的列,它会在每次插入...

    MySQL命令大全

    例如,往表 MyClass中插入二条记录, 这二条记录表示:编号为的名为Tom的成绩为.45, 编号为 的名为Joan 的成绩为.99,编号为 的名为Wang 的成绩为.5. mysql>insert into MyClass values(1,’Tom’,96.45),(2,’Joan...

    MySQL课题作业-外买订单系统

    2. **创建触发器--自动添加**:每当有新的订单添加时,自动将订单信息复制到镜像表中。 3. **创建触发器--自动删除**:当订单被取消或完成时,自动从镜像表中删除相应的记录。 4. **验证触发器**:通过测试订单的...

    存储过程-自动生成编号

    这个存储过程首先获取`users`表中当前的最大`id`,然后插入一个新的用户记录,`id`值为最大`id`加1,确保了编号的连续性。 在Java环境中,我们可以使用JDBC(Java Database Connectivity)来调用这个存储过程。以下...

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

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

    常用MySQL执行语句

    例如,向`grade`表中添加一条新的学员记录,提供`name`、`email`、`point`和`regdate`的值。`NOW()`函数用于获取当前日期和时间。 查询数据是数据库操作的核心部分。`SELECT`语句用于从表中获取信息。可以查询所有...

    数据库原理课程 实验报告 MySQL 实验五 视图操作

    1. 查询北京的供应商编号、名称和城市,这可以通过SELECT语句从供应商表S中筛选出城市为"北京"的记录。 2. 查询S1供应商的所有供应明细,这意味着我们需要结合供应商表S、零件表P和供应情况表SPJ,通过JOIN操作获取...

    在MySQL中使用序列的简单教程

    例如,在`insect`表的创建中,`id`列被设置为自动递增,所以即使在插入记录时没有提供`id`值,MySQL也会自动生成并填充。 2. **插入数据**: 插入数据时,可以省略带有 AUTO_INCREMENT 属性的列的值。在上面的例子...

    基于JavaEE+MySQL实现的学生管理系统【100012785】

    系统接收这些数据后,通过JavaEE的Servlet或JSP组件处理,将新数据插入到MySQL数据库中。 7. **修改学生信息**:当需要更新学生信息时,系统提供了编辑功能。管理员选择特定学生,修改相关信息后,系统将更新数据库...

    涨薪必备-mysql面试题集锦50题

    - **插入数据**:使用`INSERT INTO`语句向表中添加数据,如创建和填充各个表的操作。 - **查询数据**:`SELECT`语句用于检索数据,可以与`FROM`, `WHERE`, `GROUP BY`, `HAVING`, `ORDER BY`, `LIMIT`等子句结合...

    php代码-获取订单编号

    订单编号通常是系统自动生成的唯一标识,用于区分不同的订单。以下是一些相关的知识点: 1. **订单编号生成策略**: - 顺序编号:最简单的策略是按照创建时间顺序给予订单一个递增的数字,例如"ORDER000001"。 - ...

    td18913

    在Oracle数据库中,我们可以使用`CREATE SEQUENCE`语句来定义一个序列,然后在插入新记录时使用`NEXTVAL`函数获取序列的下一个值。例如: ```sql CREATE SEQUENCE seq_user_id START WITH 1 INCREMENT BY 1; ``` ...

    insert和select结合实现"插入某字段在数据库中的最大值+1"的方法

    在数据库操作中,有时我们需要在插入新记录时确保某个字段的值是当前数据库中该字段的最大值加上1,以此来实现自动序列化或保持唯一性。这种需求在诸如订单编号、ID序列等场景中十分常见。本文将详细介绍如何通过`...

    基于python的学生管理系统(附代码,完美运行).pdf

    - 添加学生信息(addstu函数):通过输入学生信息并执行SQL插入语句来向数据库添加新学生记录。 - 更新学生信息(updateStu函数):通过输入学生信息并执行SQL更新语句来修改数据库中已存在的学生记录。 - 删除学生...

    Mysql中禁用与启动触发器教程【推荐】

    这个触发器会在每次向`demo_1`中添加一条记录时,获取最新添加的`ID`,并将该学生的信息(ID和默认数学成绩98.5)插入到`demo_2`中。 为了实现对触发器的控制,我们可以修改触发器的逻辑,添加一个变量`@enable_...

    ado.net

    主键是表中唯一标识每行的特殊列,例如,可以将"员工编号"设为主键,并将其设为标识列,这样每次插入新记录时,系统会自动生成唯一的编号。 在ADO.NET中,数据源连接是与数据库建立连接的重要步骤。使用Connection...

    2021-2022计算机二级等级考试试题及答案No.3212.docx

    11. 在MySQL中,`AUTO_INCREMENT`属性使得id字段自动递增,即使插入特定值,后续插入仍会递增,因此“张良”的客户编号是22501。 12. 查找15天前的记录应使用表达式`()-15`,因此B选项正确。 13. 在面向对象编程中,...

    2021-2022计算机二级等级考试试题及答案No.12632.docx

    - **知识点**: 在Access中,**自动编号**是一种数据类型,它用于为每个新记录自动生成唯一的数字标识符。 - **应用场景**: 通常用于为主键字段分配唯一值,确保每条记录都有一个唯一的标识符。 - **特点**: 自动编号...

Global site tag (gtag.js) - Google Analytics