MySQL LAST_INSERT_ID()用法
last_insert_id()函数是适用于id为自动生成的表
下面是插入表数据时last_insert_id()函数的两种用法:
表结构:


此表使用last_insert_id()函数的字段为parentId(父节点);
parentId取值特点:
1)levelId节点为'0'时parentId为空;
2)levelId节点为'1'时parentId取levelId节点为'0'数据的autoId;
3)levelId节点为'2'时parentId取levelId节点为'1'数据的autoId;
1、插入的数据是逐条插入
如:
INSERT INTO sn_app_label (app_code, apply_id, apply_name, level_id, parent_id , state, operation_time)
VALUES ('SNSC', 'G001', '门店属性标签', '', '' , '', '2018-06-15 00:00:00'); INSERT INTO sn_app_label (app_code, apply_id, apply_name, level_id, parent_id , state, operation_time)
VALUES ('SNSC', '', '门店类型', '', (SELECT LAST_INSERT_ID()) , '', '2018-06-15 00:00:00'); INSERT INTO sn_app_label (app_code, apply_id, apply_name, level_id, parent_id , state, operation_time)
VALUES ('SNSC', '', '门店类型', '', (SELECT LAST_INSERT_ID()) , '', '2018-06-15 00:00:00'); INSERT INTO sn_app_label (app_code, apply_id, apply_name, level_id, parent_id , state, operation_time)
VALUES ('SNSC', '', '门店类型', '', (SELECT a.parent_id FROM (SELECT parent_id FROM sn_app_label WHERE app_code = 'SNSC' AND auto_id in (SELECT LAST_INSERT_ID())) a) , '', '2018-06-15 00:00:00');
上面sql可以看到:第一条数据level_id节点为'0',parent_id为空;第二条数据level_id节点为'1',此时parent_id应为第一条数据的auto_id,直接使用sql:select last_insert_id()查询上一条数据的auto_id;第三条数据同第二条;有sql可以看出第四条数据和第三条数据是在同一节点,使用select last_insert_id()查出第三条数据auto_id,再根据auto_id查询第三条的parent_id即可,因为第四条和第三条的parent_id值是一致的。select last_insert_id()查询i结果是集合,故在使用select last_insert_id()结果当做查询条件时使用in()。
上述sql执行结果为:

2、批量插入
如:
INSERT INTO sn_app_label (app_code, apply_id, apply_name, level_id, parent_id , state, operation_time)
VALUES ('SNSC', 'G001', '门店属性标签', '', '' , '', '2018-06-15 00:00:00'),
('SNSC', '', '门店类型', '', (SELECT LAST_INSERT_ID()) , '', '2018-06-15 00:00:00'),
('SNSC', '', '门店类型', '', (SELECT LAST_INSERT_ID()) , '', '2018-06-15 00:00:00'),
('SNSC', '', '门店类型', '', (SELECT a.parent_id FROM (SELECT parent_id FROM sn_app_label WHERE app_code = 'SNSC' AND auto_id in (SELECT LAST_INSERT_ID())) a) , '', '2018-06-15 00:00:00');
sql执行结果:

有执行结果可以看出:select last_insert_id()的结果为之前插入最后一条数据的auto_id,所以第6、7行中parent_id显示的是第四行的auto_id,第8行的parent_id为第四行中的parent_id。
总结:id为自动生成的表;多条语句插入时last_insert_id()获取的是最近一次insert的auto_id;一条语句插入多个值时last_insert_id()获取的也是最近一次insert的auto_id,而不是该批量插入的最近一次intert的auto_id。
MySQL LAST_INSERT_ID()用法的更多相关文章
- 【转载】 mysql explain用法
转载链接: mysql explain用法 官网说明: http://dev.mysql.com/doc/refman/5.7/en/explain-output.html 参数: htt ...
- 知识点:Mysql 基本用法之存储过程
存储过程 一. 介绍 存储过程包含了一系列可执行的sql语句,存储过程存放于MySQL中,通过调用它的名字可以执行其内部的一堆sql 使用存储过程的优点: 用于替代程序写的SQL语句,实现程序与sql ...
- 知识点:Mysql 基本用法之视图
视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时 ...
- 知识点:Mysql 基本用法之流程控制
流程控制 一. 条件语句 if 语句实例: delimiter // CREATE PROCEDURE proc_if () BEGIN declare i int default 0; if i = ...
- 知识点:Mysql 基本用法之函数
函数 MySQL中提供了许多内置函数 例如: sql 内置函数: 一.数学函数 ROUND(x,y) 返回参数x的四舍五入的有y位小数的值 RAND() 返回0到1内的随机值,可以通过提供一个参数(种 ...
- 知识点:Mysql 基本用法之触发器
触发器 使用触发器可以定制用户对表进行[增.删.改]操作时前后的行为 注意:没有查询 一 .创建触发器 触发器基础语法: # 插入前 CREATE TRIGGER tri_before_insert_ ...
- 知识点:Mysql 基本用法之事务
事务 事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据完整性. 事务实例: create table user( id int primar ...
- Mysql基本用法-存储引擎-04
MYSQL中只有 INNODB和BDB 类型的数据表才能支持事务处理!其他的类型是不支持的!(切记!) Mysql基本用法-存储引擎-02中的test_user表 和 phpcvs表 <?php ...
- MySQL 获取最后插入的ID LAST_INSERT_ID用法
LAST_INSERT_ID() 自动返回最后一个INSERT或 UPDATE 查询中 AUTO_INCREMENT列设置的第一个表发生的值. MySQL的LAST_INSERT_ID的注意事项: 第 ...
随机推荐
- python的url正则表达式
网上有很多的正则表达式版本,大部分都不好使,下面这个比较好用: http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F] ...
- linux后台启动springboot并指定日志文件名称
如果用nohup启动jar包的话,默认的日志文件就是nohup.out,那么如果启动多个jar包的话,看日志文件就麻烦了,因为他们都会写入到nohup.out文件中. 所以我们来指定一下不同jar包的 ...
- 手机wifi连上Fiddler后无网络问题解决
早上老板交代一个任务,对一款app抓包分析下接口调用的时延.我的重新打开了一年多前用过的Fiddler(参见win10笔记本用Fiddler对手机App抓包),拿过测试手机开始设置wifi代理地址和端 ...
- "AttributeError: /lib64/libcrypto.so.1.1: undefined symbol: EVP_CIPHER_CTX_cleanup"
以前在openssl,有 EVP_CIPHER_CTX_cleanup函数. 1.1.0版本中 替换成为EVP_CIPHER_CTX_reset 解决办法: 找到报错的文件vim /usr/local ...
- Nginx负载均衡-如何自定义URL中的hash key
"例如请求的url为http://www.a.com/{path_var1}/{path_var2}path_var1和path_var2是两个path variable如果现在只想根据pa ...
- Office 2010 经验总结
1. 如何设置蓝底白字? 答:点击菜单项上的"页面布局"→"页面颜色",就可以选择喜欢的页面颜色,字体颜色也会跟着发生改变. 补充:如果不喜欢相应的页面颜色中系 ...
- request.GET、request.POST、request.body(持续更新)
1.request.GET: print(request.GET) # <QueryDict: {'page' : ['5'], 'id__gt' : ['4']}> print(requ ...
- Spring中声明式事务的注解@Transactional的参数的总结(REQUIRED和REQUIRES_NEW的与主方法的回滚问题)
一.事务的传播行为1.介绍 当事务方法被另一个事务方法调用时,必须指定事务应该如何传播.例如:方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己的事务中运行.2.属性 事务的传播行为可以由传 ...
- php mqtt client
<?php /* phpMQTT */ class phpMQTT { private $socket; /* holds the socket */ private $msgid = 1; / ...
- 013 Android 实现流水灯功能+自定义控件的样式(可以复用)
1.介绍 (1)获取屏幕的焦点 android:focusable与android:focusableInTouchMode(获取屏幕焦点) 前者针对在键盘下操作的情况,如果设置为true,则键盘上下 ...