`
ansn001
  • 浏览: 95215 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

如何取得刚插入数据库的数据的id mysql

阅读更多

转自于:http://hi.baidu.com/hlz_1987/blog/item/99b27faff0b82ce6faed50e0.html,仅供学习

插入后用 
SELECT   LAST_INSERT_ID(); 
获得刚插入的id号,多客户端并发插入对取到的id号不会有问题,因为各线程独立。

 

,我也查到一种方法: 
select   @@session.identity;

 

 

我们在写数据库程序的时候,经常会需要获取某个表中的最大序号数,

一般情况下获取刚插入的数据的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值。

 

 

 

注:在java中使用last_insert_id();是要在一插入后就使用,也就是不能新建立Connection

比如insert建了一个Connection,用last_insert_id()就要用同一个Connection,不能在两条查询语句(即“insert into。。。”和"select last_insert_id()")都使用getConn()创建新管道,正确的做法是insert语句getConn()创建了管道以后,"select last_insert_id()"就直接用全局变量的conn也就是创建好的同一管道查询才有效果,否则会返回0得不到新插入的自动增长列列号,切忌!!!!!!!!!

分享到:
评论

相关推荐

    python使用Django库向mysql数据库插入数据

    结合MySQL数据库,我们可以创建稳健的数据存储系统。本教程将详细介绍如何使用Django与MySQL协同工作,实现数据的插入操作。 首先,确保你已经安装了Python、Django和MySQL的相关库。Python的安装是基础,Django...

    C#.NET中如何批量插入大量数据到数据库中

    在后端,我们处理`btn2_Click`事件来读取Excel文件并填充`GridView`,`btninsert_Click`事件则负责将`GridView`中的数据批量插入数据库。 ```csharp // 后台代码片段 protected void btn2_Click(object sender, ...

    Python3 操作 MySQL 插入一条数据并返回主键 id的实例

    在Python3中操作MySQL数据库并插入一条数据,然后获取并返回这条数据的主键id是数据库编程中常见的需求。这一过程可以分为几个关键步骤:数据库连接、执行插入操作、获取主键id以及事务提交。下面详细说明每个步骤...

    java连接数据库并且向数据库插入数据

    在Java编程中,连接数据库并插入数据是一项基本且重要的任务,尤其在开发Web应用程序时,如JSP(JavaServer Pages)和Servlet结合MySQL数据库的场景。在这个过程中,开发者需要掌握如何配置数据库连接、编写SQL语句...

    C#操作Mysql创建数据库,数据表,增、删、改数据

    本教程将详细介绍如何使用C#与Mysql进行交互,包括创建数据库、数据表以及执行基本的CRUD(Create、Read、Update、Delete)操作。 首先,我们需要在C#项目中引入Mysql的数据提供者——`MySql.Data.dll`。这个库允许...

    Shell脚本批量添加CSV数据到MySQL

    这个脚本的目的就是读取`prov.csv`中的数据,并将其插入到MySQL数据库中的相应表中。脚本可能包含如下步骤: 1. 使用`cat`或`head`命令查看CSV文件内容。 2. 使用`awk`或`cut`命令处理CSV数据,提取出需要导入数据库...

    中国省份和城市数据(mysql数据库)

    总的来说,中国省份和城市数据在MySQL数据库中的组织和管理,是数据管理和GIS应用的基础,对于理解和处理中国区域数据具有重要意义。通过导入和操作`dict_city.sql`和`dict_province.sql`,我们可以深入了解中国的...

    向数据库插入blob数据实例源码--在mysql中通过

    本实例将详细介绍如何在MySQL数据库中插入Blob数据,并提供源码示例。 1. **Blob类型介绍** MySQL中的Blob类型有四种变体:TinyBlob、Blob、MediumBlob和LongBlob,分别对应不同的存储大小限制。TinyBlob最多存储...

    VS2010 MFC在数据库MySQL中插入数据

    本文将深入探讨如何使用Visual Studio 2010中的MFC(Microsoft Foundation Classes)框架与MySQL数据库进行交互,特别是在数据库中插入数据。MFC是微软为Windows应用程序开发提供的一种C++类库,而MySQL则是一种流行...

    国家开放大学 MySQL数据库应用 实验训练3 数据增删改操作

    MySQL数据库应用实验训练3 数据增删改操作 MySQL数据库应用实验训练3 数据增删改操作是国家开放大学提供的实验训练,旨在让学生熟悉 MySQL 数据库的基本操作,包括数据的增删改操作。实验中,学生将学习使用 Insert...

    MySQL创建存储过程批量插入10万条数据

    MySQL创建存储过程批量插入10万条数据 存储过程 1、首先防止主键冲突,我们清空表。 TRUNCATE table A_student; 2、编写存储过程 delimiter ‘$’; CREATE PROCEDURE batchInsert(in args int) BEGIN declare i int ...

    QT实现图片插入数据库并显示

    4. **SQL操作**:使用`QSqlQuery`类执行SQL语句,如INSERT,来将图像数据插入数据库。需要注意的是,插入BLOB字段时,可能需要使用`blob()`函数或者直接传入`QByteArray`对象。 5. **检索图像**:从数据库中检索...

    PHP 取得刚插入数据的ID.rar

    如果你使用的是MySQLi扩展来连接MySQL数据库,可以使用`mysqli_insert_id()`函数来获取最后插入行的ID。这个函数会返回与当前连接相关的最后一个自动递增ID。例如: ```php $conn = new mysqli("localhost", ...

    TXT文件数据导入到mysql数据库

    2. **编程语言接口**:通过编程语言如Python、Java、PHP等,可以读取TXT文件并逐行处理,然后使用相应的数据库驱动(如Python的pymysql库)将数据插入到MySQL中。这在处理大量数据时可能较慢,但提供了更大的灵活性...

    android连接远程数据库PHP+MYSQL

    通过上述步骤,我们可以构建一个从Android应用到PHP中间层再到远程MySQL数据库的完整数据交互流程。这种方式不仅提升了数据处理的安全性和效率,也为开发者提供了更为灵活的开发模式。在实际项目中,建议进一步增强...

    mysql数据库基本操作

    在本篇文章中,我们将深入探讨MySQL数据库的基本操作,包括数据的增、删、改、查(CRUD)以及一些核心概念。 1. **安装与配置**: 安装MySQL通常涉及下载安装包,按照向导进行安装,并设置root用户的密码。在...

    全国省份城市数据库表(mysql).zip

    全国省份城市数据库表是用于存储中国各个省份及下属城市的详细信息的数据结构,通常在MySQL这样的关系型数据库管理系统中实现。这个数据库表对于构建地理信息系统、物流管理、人口统计分析等应用非常有用。在这个...

    最新国内省市区街道-4级联动mysql数据库

    在压缩包子文件 "省-市-区-街道.sql" 中,我们可以推断出这是SQL脚本文件,可能包含了创建数据库表结构、插入初始数据或者更新已有数据的SQL语句。这样的文件通常用于数据库的备份、迁移或恢复操作,或者是为了让...

    技术支持利用JSON数据批量操作数据库(插入、更新)

    本篇文章详细介绍了如何利用JSON数据批量操作数据库(插入、更新),包括JSON数据的解析、数据库的连接与操作以及异常处理等方面的知识点。通过这些知识点的学习,读者可以更好地理解和应用相关的技术,在实际项目...

Global site tag (gtag.js) - Google Analytics