`

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

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

原文地址: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种方法

    一、使用语句:   复制代码 代码如下:mysql_query(“select max(id) from t1”,$link); 使用此方法得到的是 id最大...$getID=mysql_insert_id();//$getID即为最后一条记录的ID //此函数的使用条件: //1.假设字段名称

    基于MySQL的ID生成器idgo.zip

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

    mysql知识点

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

    易语言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_...

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

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

    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; ...

    聊天室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

    最新最完整的中英法文ISO3166世界行政区划MySQL级联表

    INSERT INTO `API_location_country` (`id`, `name_en`, `name_zh-Hans`, `name_fr`, `a2code`, `a3code`, `numberic`, `last_modified`) VALUES (1, 'Afghanistan', '阿富汗', 'Afghanistan (l\')', 'AF', 'AFG', 4...

    ThinkPHP Core 3.0源代码分析

    7. Db->add()方法中对_after_insert()回调的处理依赖last_insert_id, 对无自增id的表则无法处理 8. TagLibCx中compiler()方法对标签的处理, literal编号只有一位数字, 当模板中标签超过10个时, 导致模板无法展现. ...

    MySQL 5.1参考手册

    MySQL 5.1参考手册.chm 前言 1. 一般信息 1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL...

Global site tag (gtag.js) - Google Analytics