MySQL的mysql_insert_id和LAST_INSERT_ID

kali破解wifi之airmon-ng 工具利用 ...... 阅读详情

摘要:mysql_insert_id和LAST_INSERT_ID二者作用一样,均是返回最后插入值的ID 值


1 mysql_insert_id

一、PHP获取MYSQL新插入数据的ID 
mysql_insert_id(); 

二、

php5和新增了获取最新插入值的ID的函数:mysqli_insert_id($conn),和之前的mysql_insert_id()类似。

都是用在insert语句之后获取最新的自动id号,要注意的是mysqli_insert_id(),括号里面的一定要是数据库连接而不是执行结果$result。

程序实例:

$conn = new mysqli("127.0.0.1","root","","database") or die("数据库连接超时!");

$sql = "insert into tableA(name,url) values('老吧博客','http://www.lao8.org')";

$result = $conn->query($sql) or die("失败");

echo mysqli_insert_id($conn); //输出刚刚插入数据的ID,注意:括号里面的要是$conn而不是$resu



2 简单介绍


MySQL的LAST_INSERT_ID用法举例
首先看个例子(主键是自增长):
 
[sql] 
mysql> insert into bankaccount(name,balance) values('123', 1000);  
Query OK, 1 row affected (0.06 sec)  
  
mysql> insert into bankstatement(action, txdate, amt, toaccno, fromaccno) values  
('122', curdate(), 1000, 1, 2);  
Query OK, 1 row affected (0.00 sec)  
www.2cto.com  
mysql> select last_insert_id();  
+------------------+  
| last_insert_id() |  
+------------------+  
|                7 |  
+------------------+  
1 row in set (0.00 sec)  
  
mysql> select * from bankaccount;  
+-------+------+---------+  
| accno | name | balance |  
+-------+------+---------+  
|     1 | 张三 |     200 |  
|     2 | 李四 |     900 |  
|     3 | 123  |    1000 |  
|     4 | 123  |    1000 |  
+-------+------+---------+  
4 rows in set (0.00 sec)  
 www.2cto.com  
mysql> select * from bankstatement;  
+----+--------------+------------+------+---------+-----------+  
| id | action       | txdate     | amt  | toaccno | fromaccno |  
+----+--------------+------------+------+---------+-----------+  
|  1 | 开户         | 2012-10-14 |  100 |    NULL |         1 |  
|  2 | 开户         | 2012-10-14 | 1000 |    NULL |         2 |  
|  3 | 查找账户信息 | 2012-10-14 |    0 |    NULL |         2 |  
|  4 | 查找账户信息 | 2012-10-14 |    0 |    NULL |         1 |  
|  5 | 转账         | 2012-10-14 |  100 |       1 |         2 |  
|  6 | 122          | 2012-10-14 | 1000 |       1 |         2 |  
|  7 | 122          | 2012-10-14 | 1000 |       1 |         2 |  
+----+--------------+------------+------+---------+-----------+  
7 rows in set (0.00 sec)  
 
总结:LAST_INSERT_ID()返回最后一个INSERT或UPDATE语句中AUTO_INCREMENT列的值。

2  

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

MySQL数据表结构中,一般情况下,都会定义一个具有‘AUTO_INCREMENT’扩展属性的‘ID’字段,以确保数据表的每一条记录都可以用这个ID唯一确定;


随着数据的不断扩张,为了提高数据库查询性能,降低查询热点,一般都会把一张表按照一定的规则分成多张数据表,即常说的分表;

分表除了表名的索引不同之外,表结构都是一样的,如果各表的‘ID’字段仍采用‘AUTO_INCREMENT’的方式的话,ID就不能唯确定一条记录了。

这时就需要一种处于各个分表之外的机制来生成ID,我们一般采用一张单独的数据表(不妨假设表名为‘ticket_mutex’)来保存这个ID,无论哪个分表有数据增加时,都是先到ticket_mutex表把ID值加1,然后取得ID值。

这个取ID的操作看似很复杂,所幸的是,MySQL提供了LAST_INSERT_ID机制,让我们能一步完成。

1、新建数据表ticket_mutex

?
CREATE  TABLE  ticket_mutex (
     name  varchar (32) NOT  NULL  PRIMARY  KEY  COMMENT '业务名称' ,
     value bigint (20) UNSIGNED NOT  NULL  COMMENT 'ID值'
)Engine=InnoDB DEFAULT  CHARSET=UTF8 COMMENT '保存分表ID表' ;
字段‘name’用来说明这个ID是哪个业务的,比如‘用户’的ID,我们可以定为‘USER’;
字段‘value’即该业务的ID值。

2、初始化业务和其ID值
?
INSERT  INTO  ticket_mutex( name , value) values ( 'USER' , 0),( 'POST' , 0);
+ ------+-------+
| name  | value |
+ ------+-------+
| POST |     0 |
| USER  |     0 |
+ ------+-------+
我们初始化了2条记录,即有2个不同的业务,分别代表‘用户信息’和‘主题信息’,它们初始ID值均为‘0’;

3、获取分表唯一ID
这个时候就要利用MySQL提供的LAST_INSERT_ID()机制了。
在往用户表里新增一条数据时,获取‘用户ID’:
?
UPDATE  ticket_mutex SET  value=LAST_INSERT_ID(value+1) WHERE  name = 'USER' ; SELECT  LAST_INSERT_ID();
+ ------------------+
| LAST_INSERT_ID() |
+ ------------------+
|                1 |
+ ------------------+
通过这条语句之后,我们得到结果为1,这个值就是我们所需要的值。再来查看数据记录,我们发现记录总数没有改变,但是‘用户’的ID已经为1了;
?
+ ------+-------+
| name  | value |
+ ------+-------+
| POST |     0 |
| USER  |     1 |
+ ------+-------+
同样的方法,我们可获取‘主题’的ID:
?
UPDATE  ticket_mutex SET  value=LAST_INSERT_ID(value+1) WHERE  name = 'POST' ; SELECT  LAST_INSERT_ID();
+ ------------------+
| LAST_INSERT_ID() |
+ ------------------+
|                1 |
+ ------------------+
查看所有的记录:
?
+ ------+-------+
| name  | value |
+ ------+-------+
| POST |     1 |
| USER  |     1 |
+ ------+-------+

从上可以看出,通过MySQL的LAST_INSERT_ID机制,我们可以保证在记录总数不增长的情况下,让业务ID在不断的增加,从而保证了分表ID的唯一性。

4、LAST_INSERT_ID说明
从名字可以看出,LAST_INSERT_ID即为最后插入的ID值,根据MySQL的官方手册说明,它有2种使用方法
一是不带参数:LAST_INSERT_ID(),这种方法和AUTO_INCREMENT属性一起使用,当往带有‘AUTO_INCREMENT’属性字段的表中新增记录时,LAST_INSERT_ID()即返回该字段的值,大家可试下(我已经验证过);
二是带有表达式:如上面介绍的LAST_INSERT_ID(value+1),它返回的是表达式的值,即‘value+1’;

转载: http://www.cnblogs.com/obullxl/archive/2011/06/24/mysql-last-insert-id.html
地图自定义编码CSV转换成ini文件 创 建 schema.ini 文件:有时,当您尝试使用 .csv 文件将自定义地理信息导入 Tableau 时,您可能会看到“无法使用.csv,因为它不包含唯一列”错误消息。这是因为您的 .csv 文件可能包含数值数据,例如数值邮政编码。对于新的地理角色,Tableau 将只接受文本字段。但是,您可以创建一个 schema.ini 文件,以指示 Tableau 应将您要导入的数值字段视为文本字段。... 阅读详情

相关推荐

同花顺 python量化交易_开启量化第一步!同花顺iFinD数据接口免费版简易操作教程...

来源:雪球App,作者: 同花顺-iFinD,(https://xueqiu.com/6706494343/141951051)金融市场波动频繁,投资往往会夹杂非理性的情绪。而量化交易,旨在以先进的数学模型替代人为的主观判断,利用计算机技术从庞大的历史数据中海选能带来超额收益的多种“大概率”事件以制定策略,辅助投资者进行理性投资。不过计算机分析存在一定的技术门槛,有没有简单易学的量化交易方式,能够...

weixin_35911805的博客 2万+

mysql_insert_id作用_MySQL的mysql_insert_id和LAST_INSERT_ID

摘要:mysql_insert_id和LAST_INSERT_ID二者作用一样,均是返回最后插入值的ID 值1mysql_insert_id一、PHP获取MYSQL新插入数据的IDmysql_insert_id();二、php5和新增了获取最新插入值的ID的函数:mysqli_insert_id($conn),和之前的mysql_insert_id()类似。都是用在insert语句之后获取最新的...

weixin_42463165的博客 1401

优化求解器性能:当分支切割算法中的gap停滞不前时如何应对

本文深入探讨了当分支切割算法求解复杂整数规划问题时,gap停滞不前的根本原因与应对策略。文章指出gap停滞源于上界(找不到更优整数解)或下界(证明过程缓慢)提升受阻,并提供了从模型改写、自定义割平面、调整搜索策略到参数调优等一系列实战方法,帮助优化工程师有效打破求解僵局,推动gap下降。

weixin_29294597的博客 381

mysql insert_id_mysql mysql_insert_id

1、摘自:http://www.111cn.net/database/110/LAST_INSERT_ID-mysql_insert_id.htmLAST_INSERT_ID() mysql_insert_id 获取insert数据的主键值自动编号我们讲了关于mysql LAST_INSERT_ID() mysql_insert_id 获取insert数据的主键值自动编号那么来分析一下它们的区别吧...

weixin_36304957的博客 715

rv1106 模型部署

ONNX(Open Neural Network Exchange),开放神经网络交换,是一种模型IR,用于在各种深度学习训练和推理框架转换的一个中间表示格式,支持多种深度学习框架,包括 TensorFlow、PyTorch、Caffe 等。将模型转换为 ONNX 格式后,可以更容易地在不同的深度学习框架中进行部署和推理,而无需重新训练模型。

weixin_50993868的博客 1285

Nordic开发者必备:SEGGER Embedded Studio免费许可证申请与配置全攻略

本文为Nordic芯片开发者提供了SEGGER Embedded Studio(SES)集成开发环境的详细配置指南。内容涵盖免费许可证的合规申请流程、项目创建、Nordic SDK集成,以及编辑器优化、构建调试配置、RTT日志输出等核心功能的高效设置,旨在帮助开发者构建深度优化的专业开发环境,显著提升嵌入式开发效率。

cheese的博客 353

mysqli_insert_id的问题

在封装函数的时候发现的问题,无论我怎么写MYSQLI_INSERT_ID()返回值都一直是0,后来找了网上很多例子,发现这个问题还不少,很多人都遇到了这个问题,然后我就找了找解决办法。 首先要解决问题,需要先来了解一下这个函数的作用。官方对他做出的解释是mysqli_insert_id() 函数返回最后一个查询中自动生成的 ID(通过 AUTO_INCREMENT 生成)。就是返回上一个查询语句...

weixin_44238629的博客 1636

yolov5 onnx推理时报错[ONNXRuntimeError] : 2 : INVALID_ARGUMENT : Unexpected input data type.

yolov5 onnxruntime 推理报错

zjulkw的博客 1221

mysql获取insert之后的id

方法-1、 php函数 mysql_insert_id --  取得上一步 INSERT 操作产生的 ID  int mysql_insert_id ( [resource link_identifier] ) 函数需要与AUTO_INCREMENT 属性结合使用。

青鬆下的ミ坚躯 的个人博客 1308

JavaScript 书签脚本实战:腾讯/优酷/爱奇艺等5大视频站m3u8链接一键提取

本文详细介绍了如何使用JavaScript书签脚本一键提取腾讯视频、优酷、爱奇艺等五大视频平台的m3u8流媒体链接。通过分析播放器内部对象结构,开发者可以高效获取视频源文件,避免录屏画质损失。文章包含各平台适配方案、实战增强功能开发及企业级解决方案设计,帮助用户快速掌握这一实用技术。

weixin_27945229的博客 604

FlexSim:FlexSim软件介绍与安装

在开始安装FlexSim之前,首先需要从FlexSim官方网站下载安装包。FlexSim提供不同版本的软件,包括教育版、专业版等,确保选择适合您需求的版本。下载页面通常会列出系统要求,包括操作系统、处理器、内存和硬盘空间,确保您的计算机满足这些要求。访问FlexSim官方网站。导航至下载页面。选择适合您需求的FlexSim版本。点击下载按钮,开始下载安装包。在开始构建模型之前,首先需要明确模型的目标。模型目标是指导模型设计和分析的核心,它定义了你希望通过模型解决的问题或探索的系统行为。

kkchenjj的博客 5802

mysql lasti_MySQL的mysql_insert_id和LAST_INSERT_ID

摘要:mysql_insert_id和LAST_INSERT_ID二者作用一样,均是返回最后插入值的ID 值1mysql_insert_id一、PHP获取MYSQL新插入数据的IDmysql_insert_id();二、php5和新增了获取最新插入值的ID的函数:mysqli_insert_id($conn),和之前的mysql_insert_id()类似。都是用在insert语句之后获取最新的...

weixin_36221980的博客 266

国科大学习资料--VLSI测试与可测试设计--2020期末考试试题

国科大学习资料–VLSI测试与可测试设计–2020期末考试试题 国科大学习资料–VLSI测试与可测试设计–2020期末考试试题 国科大学习资料–VLSI测试与可测试设计–2020期末考试试题 一、概念题 1简述可测试性测度与两个主要的测度指标的含义; 2以March C-算法为例,说明March算法的构成,以及March C-算法的故障覆盖率; 3“效果-原因”诊断法和“原因效果诊断法”的不同; 4列举四条扫描设计时出现的问 题及解决办法; 5最少写出1149.1与1500的五点不同; = = = = =

无名何许人的博客 1150

mysql insert id的参数_Mysql----MySQL的mysql_insert_id和LAST_INSERT_ID(转)

本文介绍的是mysql中last_insert_id和mysql_insert_id的区别1 mysql_insert_id一、PHP获取MYSQL新插入数据的IDmysql_insert_id();二、php5和新增了获取最新插入值的ID的函数:mysqli_insert_id($conn),和之前的mysql_insert_id()类似。都是用在insert语句之后获取最新的自动id号,要注意...

weixin_39707536的博客 727

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

mysql中@@IDENTITY和LAST_INSERT_ID()

mysql中@@IDENTITY和LAST_INSERT_ID() 如下只是简单的说了一下,具体可以去网上找找相关资料,今天暂时记录这一点东西,下次等我腾出时间,在好好学习一下@@IDENTITY和LAST_INSERT_ID()的知识点。 /* 插入完了以后能够通过运行【SELECT @@IDENTITY】获取上一条插入语 句中生成的自增长字段的值。 */ SELECT @@IDENTIT...

一只苟延残喘的卑微蝼蚁 2590

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

MYSQL中的LAST_INSERT_ID()和MSSQL中的@@IDENTITY

按照应用需要,常常要取得刚刚插入数据库表里的记录的ID值,在MYSQL中可以使用LAST_INSERT_ID()函数,在MSSQL中使用@@IDENTITY。挺方便的一个函数。但是,这里需要注意的是,当使用INSERT语句插入多条记录的时候,使用LAST_INSERT_ID()返回的还是第一条的ID值,而@@IDENTITY返回最后一条。

iflash50的专栏 808

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

关于mysql中@@IDENTITY和LAST_INSERT_ID()

mysql中@@IDENTITY和LAST_INSERT_ID() 如下只是简单的说了一下,具体可以去网上找找相关资料,今天暂时记录这一点东西,下次等我腾出时间,在好好学习一下@@IDENTITY和LAST_INSERT_ID()的知识点。 /* 插入完了以后能够通过运行【SELECT @@IDENTITY】获取上一条插入语 句中生成的自增长字段的值。 */ SELECT @@IDENTITY; /* 基于单个连接客户端之间..

Pei_hua100的专栏 398

mysql获取自增主键last_insert_id()和getGeneratedKey()

mysql获取自增主键有两种方式: 1.last_insert_id()是MYSQL提供的返回当前客户端(其实就是和Connection相关)最后一个insert或update中设置为AUTO_INCREMENT列的值。 2.getGeneratedKey() 二者区别以及使用场景介绍: selectKey和useGeneratedKeys的异同 概括来说selectKey用于单个...

lucy636的博客 2675

Mysql----MySQL的mysql_insert_id和LAST_INSERT_ID(转)

本文介绍的是mysql中last_insert_id和mysql_insert_id的区别 1 mysql_insert_id  一、PHP获取MYSQL新插入数据的ID     mysql_insert_id();   二、    php5和新增了获取最新插入值的ID的函数:mysqli_insert_id($conn),和之前的mysql_insert_id()类似。    都是用在inse...

weixin_30345577的博客 99

oracle和mysql在ibatis中对自增ID的控制以及MYSQL LAST_INSERT_ID相关说明

sql-map.xml中的代码:(orcale数据库) [color=red] SELECT SEQ_MC_MEMB.nextval AS VALUE FROM DUAL [/color] insert into MC_MEMB ( MEMB_ID,MEMB_LOGIN_NAME,MEMB_REAL_NAME,M...

iteye_9980的博客 276

mysql主键generated_mysql获取自增主键last_insert_id()和getGeneratedKey()

mysql获取自增主键有两种方式:1.last_insert_id()是MYSQL提供的返回当前客户端(其实就是和Connection相关)最后一个insert或update中设置为AUTO_INCREMENT列的值。2.getGeneratedKey()二者区别以及使用场景介绍:selectKey和useGeneratedKeys的异同概括来说selectKey用于单个记录返回主键,useGen...

weixin_39806779的博客 659

mysql_insert_id过期,MySQL和LAST_INSERT_ID()返回错误ID的机会

From what I have read LAST_INSERT_ID() retrieves the id of the last insert statement to run. If that the last insert statement run on your connection or the last insert run on the database for all con...

weixin_29662245的博客 186
上一篇: linux动态链接库---一篇讲尽
下一篇: mysql问题: alter导致速度慢
crazyhacking
博客等级 码龄15年 299粉丝 148原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值