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', '門店屬性標簽', '0', '' , '0', '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', '001', '門店類型', '1',  (SELECT LAST_INSERT_ID())  , '0', '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', '1', '門店類型', '2',  (SELECT LAST_INSERT_ID())  , '0', '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', '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執行結果為:

 

 2、批量插入

 如:

INSERT INTO sn_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執行結果:

有執行結果可以看出: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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM