`
ansn001
  • 浏览: 93742 次
  • 性别: 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...

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

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

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

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

    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数据,提取出需要导入数据库...

    向数据库插入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数据库)

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

    国家开放大学 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 ...

    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用户的密码。在...

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

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

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

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

    c# MySql数据库存储图片

    在C#编程环境中,与MySQL数据库进行交互是常见的任务,特别是在需要存储非结构化数据如图片时。本示例将详细介绍如何使用C#连接到MySQL数据库,并实现图片的存储功能。 首先,确保你已安装了MySQL数据库服务器以及...

    sql语句插入MySQL数据库操作指南

    本文将深入探讨如何使用SQL语句将数据插入到MySQL数据库中,以及如何在开发者之间共享和同步数据库结构。 首先,我们需要理解SQL(Structured Query Language),它是用于管理和处理关系数据库的标准语言。插入数据...

Global site tag (gtag.js) - Google Analytics