mysql last insert id_MySQL LAST_INSERT_ID()用法

last_insert_id()函数是适用于id为自动生成的表

下面是插入表数据时last_insert_id()函数的两种用法:

表结构:

b0520c4207549619b8c5f93019755ae6.png

5f05348f016061ceffaea5ada8ccb965.png

此表使用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 INTOsn_app_label (app_code, apply_id, apply_name, level_id, parent_id , state, operation_time)VALUES ('SNSC', 'G001', '门店属性标签', '0', '' , '0', '2018-06-15 00:00:00');INSERT INTOsn_app_label (app_code, apply_id, apply_name, level_id, parent_id , state, operation_time)VALUES ('SNSC', '001', '门店类型', '1', (SELECT LAST_INSERT_ID()) , '0', '2018-06-15 00:00:00');INSERT INTOsn_app_label (app_code, apply_id, apply_name, level_id, parent_id , state, operation_time)VALUES ('SNSC', '1', '门店类型', '2', (SELECT LAST_INSERT_ID()) , '0', '2018-06-15 00:00:00');INSERT INTOsn_app_label (app_code, apply_id, apply_name, level_id, parent_id , state, operation_time)VALUES ('SNSC', '2', '门店类型', '2', (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) , '0', '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执行结果为:

e8ee7a9874edba331a0493b910bab736.png

2、批量插入

如:

INSERT INTOsn_app_label (app_code, apply_id, apply_name, level_id, parent_id , state, operation_time)VALUES ('SNSC', 'G001', '门店属性标签', '0', '' , '0', '2018-06-15 00:00:00'),

('SNSC', '001', '门店类型', '1', (SELECT LAST_INSERT_ID()) , '0', '2018-06-15 00:00:00'),

('SNSC', '1', '门店类型', '2', (SELECT LAST_INSERT_ID()) , '0', '2018-06-15 00:00:00'),

('SNSC', '2', '门店类型', '2', (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) , '0', '2018-06-15 00:00:00');

sql执行结果:

ae0a0fc6d9c6bf6666968f53227149e3.png

有执行结果可以看出: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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值