博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL-LAST_INSERT_ID();使用注意事项
阅读量:5954 次
发布时间:2019-06-19

本文共 1095 字,大约阅读时间需要 3 分钟。

第一、查询和插入所使用的Connection对象必须是同一个才可以,否则返回值是不可预料的。

mysql> SELECT LAST_INSERT_ID();

        -> 100

使 用这函数向一个给定Connection对象返回的值是该Connection对象产生对影响AUTO_INCREMENT列的最新语句第一个 AUTO_INCREMENT值的。这个值不能被其它Connection对象的影响,即它们产生它们自己的AUTO_INCREMENT值。

第二、LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID返回表b中的Id值。

第三、 假如你使用一条INSERT语句插入多个行,  LAST_INSERT_ID() 只返回插入的第一行数据时产生的值。其原因是这使依靠其它服务器复制同样的 INSERT语句变得简单。

mysql> INSERT INTO t VALUES

    -> (NULL, ‘Mary’), (NULL, ‘Jane’), (NULL, ‘Lisa’);

mysql> SELECT * FROM t;

| id | name |

+—-+——+

|  1 | Bob  |

|  2 | Mary |

|  3 | Jane |

|  4 | Lisa |

mysql> SELECT LAST_INSERT_ID();  //这就是我要说明的关键问题。

| LAST_INSERT_ID() |

|                2 |

虽然将3 个新行插入 t, 对这些行的第一行产生的 ID 为 2, 这也是 LAST_INSERT_ID()返回的值。

第四、假如你使用 INSERT IGNORE而记录被忽略,则AUTO_INCREMENT 计数器不会增量,而 LAST_INSERT_ID() 返回0, 这反映出没有插入任何记录。

一 般情况下获取刚插入的数据的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。LAST_INSERT_ID是基于单个connection的, 不可能被其它的客户端连接改变。

转载地址:http://igaxx.baihongyu.com/

你可能感兴趣的文章
RHEL6基础之十二RHEL用户和组基础
查看>>
让Python删除window下文件
查看>>
WCF简单教程(4) 数据契约
查看>>
【新书推荐】Silverlight 4教程书籍推荐
查看>>
用GZIP来压缩socket传输的序列化的类
查看>>
Java数据类型,Hibernate数据类型,标准sql数据类型之间的对应表
查看>>
Linux配置手册(八)基于MySQL构建PHP环境
查看>>
如何获取InnoDB树的高度
查看>>
利用Node.js为Node.js生成HttpStatusCode辅助类并发布到npm
查看>>
IBM Copy Service--Flashcopy Introduction
查看>>
密码学研究-加密解密
查看>>
Hyper-V 2016 系列教程28 Hyper-v平台USB 外设解决方案介绍
查看>>
Linux目录详细说明
查看>>
svn图形化控制(svnmanager)
查看>>
再谈MySQL全库备份
查看>>
J0ker的CISSP之路:Access Control(12)
查看>>
DWR操作java对象
查看>>
Lync Server 2010的部署系列(三) lync批量导入用户联系人
查看>>
java.util.Scanner应用详解
查看>>
RHCE课程-RH033Linux基础笔记五之常用文本处理命令、输入输出重定向、管道
查看>>