`

使用MySQL的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只返回插入的第一条记录产生的值. 比如

  1. mysql> INSERT INTO t VALUES (NULL, 'aaaa'), (NULL, 'bbbb'), (NULL, 'cccc');   
  2. mysql> SELECT * FROM t;   
  3. +----+------+   
  4. | id | name |   
  5. +----+------+   
  6. |  1 | Bob  |   
  7. |  2 | aaaa |   
  8. |  3 | bbbb |   
  9. |  4 | cccc |   
  10. +----+------+   
  11. mysql> SELECT LAST_INSERT_ID();   
  12. +------------------+   
  13. | LAST_INSERT_ID() |   
  14. +------------------+   
  15. |                2 |   
  16. +------------------+  

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 而不用担心其它客户端的活动,而且不需要加锁。

 

 

引自:http://wangcheng.iteye.com/blog/54293

分享到:
评论

相关推荐

    Mysql中LAST_INSERT_ID()的函数使用详解

    研究了一番决定使用Mysql提供了一个LAST_INSERT_ID()的函数。 代码如下: LAST_INSERT_ID() (with no argument) returns the first automatically generated value that was set for an AUTO_INCREMENT column by ...

    轻松掌握MySQL函数中的last_insert_id()

    最近一个同事问我,为什么last_insert_id()得到的结果与预期的不一样呢,于是我就认真的去研究的一下这个参数,下面是关于last_insert_id()的详细介绍,一起来学习学习吧。 首先,举个例子 wing@3306>show create ...

    MYSQL 小技巧 — LAST_INSERT_ID

    而,mysql_insert_id 返回的是 int 。如果你 的id 是 unsigned int,或者 bigint 的 。那么,可能是返回的是错误的。而要用 LAST_INSERT_ID() 代替。 还有些朋友,返回的都是 0,不知道怎么回事,其实 LAST_INSERT_...

    MYSQL 小技巧 -- LAST_INSERT_ID

    用PHP调用mysql , 内置的LAST_INSERT_ID() 这个函数可能没有什么人用,用的最多的还是 mysql_insert_id()

    在Spring中用select last_insert_id()时遇到问题

    今天在使用MySQL时却不知如何处理,插入记录后不知怎样获得刚刚插入的id,查过文档后发现了select last_insert_id(),在插入之后执行此查询,即可获得自增id,喜出望外。可用到自己的程序中之后却得不到想要的结果,...

    使用MySQL的LAST_INSERT_ID来确定各分表的唯一ID值

    分表除了表名的索引不同之外,表结构都是一样的,... 这个取ID的操作看似很复杂,所幸的是,MySQL提供了LAST_INSERT_ID机制,让我们能一步完成。 1、新建数据表ticket_mutex 代码如下: CREATE TABLE ticket_mutex ( na

    解决Hibernate JPA中insert插入数据后自动执行select last_insert_id()

    )Hibernate: select last_insert_id()表中有个主键是自增列。可是在以往的项目中,没发现有这样的问题。于是在网上各种找也找不到原因。心想可能是配置问题。 最终在persistence.xml配置文件中找

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

    二,使用函数:msyql_insert_id(); 在PHP中,经常需要把插入数据库中的id值取出来,而正好有这么一个函数: 复制代码 代码如下: <?php //执行插入数据库的语句 //…… $getID=mysql_insert_id();//$getID即为最后...

    基于MySQL的ID生成器idgo.zip

    SELECT LAST_INSERT_ID();这种方式生成ID的弊端就是每生成一个ID都需要查询一下MySQL,当ID生成过快时会对MySQL造成很大的压力. 这正是我写这个lib库的原因.idgo服务正确性和高可用保障措施1. 压力测试结果压测环境...

    mysql知识点

    mysql的一些知识点 LAST_INSERT_ID() 最近插入表的自动增加字段的当前值 ifnull,或者coalesce 字段为空时设置默认值

    php生成唯一数字id的方法汇总

    那就给MySQL数据库中的表的id一个AUTO_INCREMENT(自增)属性,每次插入一条数据时,id自动+1,然后使用mysql_insert_id()或LAST_INSERT_ID()返回这个自增后的id。 当然,这个问题已经有现成的解决方法了,使用...

    易语言mysql查询

    易语言mysql查询源码,mysql查询,echo,init,connect,set_table,field,select,find,insert,get_insert_id,update,delete,count,where,limit,order,setInc,setDec,close,get_Last_SQL,get_time,date_time,new,add_...

    MySQL 5.1参考手册

    2.2. 使用二进制分发版的标准MySQL安装 2.3. 在Windows上安装MySQL 2.3.1. Windows系统要求 2.3.2. 选择安装软件包 2.3.3. 用自动安装器安装MySQL 2.3.4. 使用MySQL安装向导 2.3.5. 使用配置向导 2.3.6. 通过非安装...

    MySQL 5.1参考手册中文版

    2.2. 使用二进制分发版的标准MySQL安装 2.3. 在Windows上安装MySQL 2.3.1. Windows系统要求 2.3.2. 选择安装软件包 2.3.3. 用自动安装器安装MySQL 2.3.4. 使用MySQL安装向导 2.3.5. 使用配置向导 2.3.6. 通过...

    my sql与sql server实时同步源码,自定义设置同步时间

    public string id, phone, verify, last_id; SqlConnection my_sql_con; MySqlConnection con; MySqlCommand cmd; DataSet ds; public string sql_server_Conn = "Data Source=222.85.144.112,14444; ...

    MYSQL中文手册

    2.2. 使用二进制分发版的标准MySQL安装 2.3. 在Windows上安装MySQL 2.3.1. Windows系统要求 2.3.2. 选择安装软件包 2.3.3. 用自动安装器安装MySQL 2.3.4. 使用MySQL安装向导 2.3.5. 使用配置向导 2.3.6. 通过...

    聊天室phpmysql(一)

    <? include ../signup/mysql.php; $time1=time();... $sql=insert into chat_user (userid,id,last_time) values (‘$userid’,’$nick’,’$last_time’); mysql_query($sql)or die(mysql_erro

Global site tag (gtag.js) - Google Analytics