簡體   English   中英

從 MySQL 中的多插入中獲取 LAST_INSERT_ID()

[英]Get LAST_INSERT_ID() from a multi-insert in MySQL

在我的 MySQL 數據庫中插入多行后,我需要獲取我的 id 值

INSERT INTO table (`row1`, `row2`, `row3`, `row4`)
VALUES
('value1','value2','value3','value4'),
('value1','value2','value3','value4');

事實上,我需要像SQL 服務器這樣的東西 - 插入后的返回值,但對於 MySQL,我不需要返回最后一個 id,因為我可以自己做,但我認為這對我做的事情不好有更好的方法我的問題存在嗎?

如果要將行塊插入父表和子表,則行必須具有唯一列,以便在插入后查找父行:

INSERT INTO table (col1, col2, col3, col4)
VALUES
('value1','value2','value3','value4'),
('value5','value6','value7','value8');

INSERT INTO childtable (colx, coly, id_table)
SELECT 1, 2, id FROM table WHERE col1 = 'value1' and col2 = 'value2' and col3 = 'value3' and col4 = 'value4'
UNION ALL
SELECT 1, 2, id FROM table WHERE col1 = 'value5' and col2 = 'value2' and col3 = 'value3' and col4 = 'value4'

即使有一種方法可以獲取所有插入的 ID,您也必須做同樣的事情,因為表包含一組無序的行。 如果您為第一個插入語句返回 ID 11 和 12,那么 ID 11 將引用哪一行以及 ID 12 是哪一行? 沒有辦法說出來,因為 DBMS 可以自由地以任何順序插入行。

如果行數據不像您的示例那樣是唯一的,其中兩行都包含 ('value1','value2','value3','value4'),那么您必須將所有數據插入循環中或使用一些 CTE首先對行編號並使用這些數字。

無論如何,說了這么多,我會在一個循環中逐行插入數據(即一個父級,它的所有子級,下一個父級,...),只要您不會遇到無法忍受的性能問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM