1. ホーム
  2. mysql

[解決済み] LAST_INSERT_ID() MySQL

2022-04-24 18:03:20

質問

MySQLに関する質問があるのですが、とても簡単なことだと思います。以下の MySql クエリを実行したときに、table1 から LAST INSERTED ID を返す必要があります。

INSERT INTO table1 (title,userid) VALUES ('test',1); 
INSERT INTO table2 (parentid,otherid,userid) VALUES (LAST_INSERT_ID(),4,1);
SELECT LAST_INSERT_ID();

現在のコードは、テーブル1の代わりにテーブル2のLAST INSERT IDを返すだけであることが理解できるように、間にテーブル2に挿入してもテーブル1のIDを取得するにはどうすればよいですか?

解決方法は?

最後の挿入IDを変数に格納することができます。

INSERT INTO table1 (title,userid) VALUES ('test', 1); 
SET @last_id_in_table1 = LAST_INSERT_ID();
INSERT INTO table2 (parentid,otherid,userid) VALUES (@last_id_in_table1, 4, 1);    

または、table1 から最大 ID を取得する(EDIT: Warning. Rob Starlingのコメントにある、max idを使用する際にレースコンディションによるエラーが発生する可能性があることを参照してください)

INSERT INTO table1 (title,userid) VALUES ('test', 1); 
INSERT INTO table2 (parentid,otherid,userid) VALUES (LAST_INSERT_ID(), 4, 1); 
SELECT MAX(id) FROM table1;  

(注意:コメントでロブ・スターリングが指摘しているように)