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()用法的更多相关文章

  1. 【转载】 mysql explain用法

    转载链接:  mysql explain用法 官网说明:     http://dev.mysql.com/doc/refman/5.7/en/explain-output.html 参数:  htt ...

  2. 知识点:Mysql 基本用法之存储过程

    存储过程 一. 介绍 存储过程包含了一系列可执行的sql语句,存储过程存放于MySQL中,通过调用它的名字可以执行其内部的一堆sql 使用存储过程的优点: 用于替代程序写的SQL语句,实现程序与sql ...

  3. 知识点:Mysql 基本用法之视图

    视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时 ...

  4. 知识点:Mysql 基本用法之流程控制

    流程控制 一. 条件语句 if 语句实例: delimiter // CREATE PROCEDURE proc_if () BEGIN declare i int default 0; if i = ...

  5. 知识点:Mysql 基本用法之函数

    函数 MySQL中提供了许多内置函数 例如: sql 内置函数: 一.数学函数 ROUND(x,y) 返回参数x的四舍五入的有y位小数的值 RAND() 返回0到1内的随机值,可以通过提供一个参数(种 ...

  6. 知识点:Mysql 基本用法之触发器

    触发器 使用触发器可以定制用户对表进行[增.删.改]操作时前后的行为 注意:没有查询 一 .创建触发器 触发器基础语法: # 插入前 CREATE TRIGGER tri_before_insert_ ...

  7. 知识点:Mysql 基本用法之事务

    事务 事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据完整性. 事务实例: create table user( id int primar ...

  8. Mysql基本用法-存储引擎-04

    MYSQL中只有 INNODB和BDB 类型的数据表才能支持事务处理!其他的类型是不支持的!(切记!) Mysql基本用法-存储引擎-02中的test_user表 和 phpcvs表 <?php ...

  9. MySQL 获取最后插入的ID LAST_INSERT_ID用法

    LAST_INSERT_ID() 自动返回最后一个INSERT或 UPDATE 查询中 AUTO_INCREMENT列设置的第一个表发生的值. MySQL的LAST_INSERT_ID的注意事项: 第 ...

随机推荐

  1. AndoridSQLite数据库开发基础教程(9)

    AndoridSQLite数据库开发基础教程(9) 添加视图 视图是从一个或几个基本表(或视图)中导出的虚拟的表.通过视图可以看到表的内容.下面为数据库添加视图,操作步骤如下: (1)打开的数据库,单 ...

  2. IDEA优化配置,提高启动和运行速度

    IDEA优化配置,提高启动和运行速度   参考链接:https://blog.csdn.net/riju4713/article/details/83217013,http://www.pc0359. ...

  3. 一起入门Python2之python的安装及初识

    鉴于论坛需要持续更新文章才能更好的保证论坛的访问量和质量,以及论坛的发展.承蒙前辈的信任和支持,我就教大家python第二课,教的不好请多担待和指正. 我们先讲python的安装方法: 方法链接:ht ...

  4. 5-1 嵌套while循环应用

    package com.imooc; public class forDemo { public static void main(String[] args) { ;//外重循环的循环变量: ;// ...

  5. Flutter利用GridView实现网格的商品布局

    GridView.count 生成的是静态网格 效果: 代码: import 'package:flutter/material.dart'; void main() { runApp(MyApp() ...

  6. Spring cloud微服务安全实战-3-11API安全机制之登录

    流控.认证.审计.授权以上都做了初步的简单的实现. 之前写的代码,base64加密了用户名和密码. 缺点1:每次请求都要带用户名密码 增加了泄露的风险. 每次传上来用户名和密码都要check验证.ch ...

  7. PAT 甲级 1073 Scientific Notation (20 分) (根据科学计数法写出数)

    1073 Scientific Notation (20 分)   Scientific notation is the way that scientists easily handle very ...

  8. C# Web Service 不使用服务引用直接调用方法(转)

    版权声明:本文为博主原创文章,未经博主允许不得转载.          https://blog.csdn.net/u011508145/article/details/79496214 using ...

  9. RabbitMQ官方教程二 Work Queues(GOLANG语言实现)

    RabbitMQ官方教程二 Work Queues(GOLANG语言实现) 在第一个教程中,我们编写了程序来发送和接收来自命名队列的消息. 在这一部分中,我们将创建一个工作队列,该队列将用于在多个wo ...

  10. CF1239A Ivan the Fool and the Probability Theory

    思路: 可以转化为“strip”(http://tech-queries.blogspot.com/2011/07/fit-12-dominos-in-2n-strip.html)问题.参考了http ...