有些时候在执行数据库的INSERT操作后需要知道其产生的ID(我用的MySQL,主键都是设的AUTO_INCREMENT,执行插入操作的时候不用指定ID的值而由数据库自行产生),这时候就可以使用PHP的函数mysql_insert_id()直接获得这个ID,非常方便。

但是有一点,如果在INSERT语句里面明确指出了具有AUTO_INCREMENT属性的ID列的值,那么函数将返回0,因为该ID值是由用户指定的,不是由数据库自动产生的。

PHP手册对该函数的描述如下:

mysql_insert_id()

mysql_insert_id() 函数返回上一步 INSERT 操作产生的 ID。如果上一查询没有产生 AUTO_INCREMENT 的 ID,则 mysql_insert_id() 返回 0。

语法:mysql_insert_id(connection)

参数connection,可选。规定 MySQL 连接。如果未规定,则使用上一个连接。

mysql_insert_id() 返回给定的 connection 中上一步 INSERT 查询中产生的 AUTO_INCREMENT 的 ID 号。如果没有指定 connection ,则使用上一个打开的连接。

如果需要保存该值以后使用,要确保在产生了值的查询之后立即调用 mysql_insert_id()。

$con = mysql_connect("localhost", "hello", "321");

if (!$con)

{

die('Could not connect: ' . mysql_error());

}

$db_selected = mysql_select_db("test_db",$con);

$sql = "INSERT INTO person VALUES ('Carter','Thomas','Beijing')";

$result = mysql_query($sql,$con);

echo "ID of last inserted record is: " . mysql_insert_id();

mysql_close($con);

?>

mysql_insert_id() 返回给定的 link_identifier 中上一步 INSERT 查询中产生的 AUTO_INCREMENT 的 ID 号。如果没有指定 link_identifier,则使用上一个打开的连接。如果上一查询没有产生 AUTO_INCREMENT 的值,则 mysql_insert_id() 返回 0。如果需要保存该值以后使用,要确保在产生了值的查询之后立即调用 mysql_insert_id()。

LAST_INSERT_ID()

MySQL也提供了这么一个同样功能的API,它总是保存着最新产生的AUTO_INCREMENT值,并且不会在查询语句之间被重置,也就是说,在执行INSERT操作后,执行SELECT、UPDATE、DELETE语句都不会影响该API的返回值。

可以用 SELECT LAST_INSERT_ID(); 来查询LAST_INSERT_ID() 的返回值。

使用单条INSERT语句插入多条记录,,LAST_INSERT_ID() 只返回插入的第一条记录产生的AUTO_INCREMENT值。

mysql insert 语句返回id_返回insert语句产生的id相关推荐

  1. mysql执行语句返回主键_mysql语句insert后返回主键

    最近开发的一个项目中,因为需要,所以需要使用mybatis中的语句返回一个主键id,语句如下, INSERT INTO F_COMPANY( company_id, company_no, compa ...

  2. MySQL 当记录不存在时insert,当记录存在时update(ON DUPLICATE KEY UPDATE, REPLACE语句)...

    MySQL 当记录不存在时insert,当记录存在时更新 网上基本有三种解决方法. 第一种:示例一:insert多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的语 ...

  3. mysql语句6_MySQL的SQL语句 - 数据操作语句(6)- INSERT 语句

    INSERT 语句 1. INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] 2. [INTO] tbl_name 3. [PARTITI ...

  4. mysql查询语句不返回_mysql命令查询语句MTdata

    select * fromstudent; 采用*效率低,不推荐,多用列名 一.单表查询的语法: SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field H ...

  5. mysql批量更新,批量插入之replace语句/insert into... on duplicate key update语句

    mysql批量更新/插入数据有以下方法,使用这些方法批量插入数据/更新数据的时候就不用在代码层次增加判断数据是否已存在的逻辑了. 1:replace语句 2: insert into... on du ...

  6. mysql insert 语句优化_分享insert into语句优化的小技巧

    MYSQL批量插入数据库实现语句性能分析 假定我们的表结构如下 代码如下CREATE TABLE example ( example_id INT NOT NULL, name VARCHAR( 50 ...

  7. mysql pool返回值_【Mysql】你知道一条查询语句是如何执行的吗?

    [Mysql]你知道一条查询语句是如何执行的吗?​mp.weixin.qq.com 前言 在默认大家学习了Mysql结构的基础上,我们来深入的解析一下sql语句在mysql中是如何流转和实现的.本文会 ...

  8. db2 如何导出insert语句_实用技术:MYSQL特别实用的几种SQL语句送给大家,让你的SQL高大上...

    整理自公众号:[程序员闪充宝] 在写SQL时,经常灵活运用一些SQL语句编写的技巧,可以大大简化程序逻辑.减少程序与数据库的交互次数,有利于数据库高可用性,同时也能显得你的SQL很牛B,让同事们眼前一 ...

  9. access insert语句怎么写_码住!MySQL中超实用的几种SQL语句

    在写SQL时,经常灵活运用一些SQL语句编写的技巧,可以大大简化程序逻辑.减少程序与数据库的交互次数,有利于数据库高可用性,同时也能显得你的SQL很牛B,让同事们眼前一亮. 目录 实用的SQL 1.插 ...

最新文章

  1. php 数组值的交集,PHP 数组交集与差集
  2. c++模板之函数指针到函数对象:
  3. 第三节:Web爬虫之BeautifulSoup解析库
  4. 【已解决】linux redhat 6 如何打开防火墙中的某个端口?例如:5900端口
  5. 执行truncate引发ORA-02266的问题分析
  6. 二进制的原码,反码,补码
  7. java lazy_Java AtomicLong lazySet()用法及代码示例
  8. Serengeti Accomodation
  9. centos7.4 update git
  10. 智百威收银系统服务器连接不上,收银系统进入不了收银系统怎么办 – 手机爱问...
  11. esp32~MP3音频文件学习
  12. 用python写模拟鼠标脚本
  13. NSIS 简易教程(四)
  14. 简述CC2530晶振、振荡器与时钟
  15. webrtc QOS方法一.2(接收端NACK流程实现)
  16. 展望99股市:谁是重组大黑马?(转)
  17. php常用单词上传知米背单词,知米背单词APP导入单词列表的操作步骤
  18. B+树在MySQL索引的应用和InnoDB的索引优化
  19. 送H-1B 及其他I-129 申请别忘用新表
  20. vim gvim技巧大全

热门文章

  1. JavaScript进阶之道
  2. Cisco Packet Tracer 简单实操
  3. !!最神奇、最实用和最精准的逃顶指标公式(通达信源码)
  4. 已解决SettingWithCopyWarning df.rename(columns={‘旧列名1’: ‘新列名1’, ‘旧列名2’: ‘新列名2’}, inplace=True)
  5. nsis查询mysql安装路径_NSIS目录
  6. oracle怎么查询换行符,oracle 回车、换行符
  7. 【Hudi】Apache Hudi:不一样的存储、不一样的计算
  8. 毕业生去向管理系统(毕业生就业招聘系统)
  9. AUTOSAR从入门到精通-【应用篇】基于 AUTOSAR 的四轮驱动客车整车控制器应用层软件开发研究
  10. 基于cepark usb开发板 VS2010使用libusb-win32开发应用程序