last_insert_id()
before the statement is executed successfully. To obtain the true value of last_insert_id()
, you should use RETURNING to return the auto-increment column ID of the table.MySQL [test]> CREATE TABLE `t1` (id1 INT);Query OK, 0 rows affected (0.04 sec)MySQL [test]> CREATE TABLE `t2` (id2 INT);Query OK, 0 rows affected (0.03 sec)MySQL [test]> INSERT INTO t2 (id2) values (1);Query OK, 1 row affected (0.00 sec)MySQL [test]> INSERT INTO t1 (id1) values (1) returning *, id1 * 2, id1 + 1, id1 * id1 as alias, (select * from t2);+------+---------+---------+-------+--------------------+| id1 | id1 * 2 | id1 + 1 | alias | (select * from t2) |+------+---------+---------+-------+--------------------+| 1 | 2 | 2 | 1 | 1 |+------+---------+---------+-------+--------------------+1 row in set (0.01 sec)MySQL [test]> INSERT INTO t1 (id1) SELECT id2 from t2 returning id1;+------+| id1 |+------+| 1 |+------+1 row in set (0.01 sec)
MySQL [test]> CREATE TABLE t1(id1 INT PRIMARY KEY, val1 VARCHAR(1));Query OK, 0 rows affected (0.04 sec)MySQL [test]> CREATE TABLE t2(id2 INT PRIMARY KEY, val2 VARCHAR(1));Query OK, 0 rows affected (0.03 sec)MySQL [test]> INSERT INTO t2 VALUES (1,'a'),(2,'b'),(3,'c');Query OK, 3 rows affected (0.00 sec)Records: 3 Duplicates: 0 Warnings: 0MySQL [test]> REPLACE INTO t1 (id1, val1) VALUES (1, 'a');Query OK, 1 row affected (0.00 sec)MySQL [test]> REPLACE INTO t1 (id1, val1) VALUES (1, 'b') RETURNING *;+-----+------+| id1 | val1 |+-----+------+| 1 | b |+-----+------+1 row in set (0.01 sec)
MySQL [test]> CREATE TABLE t1 (a int, b varchar(32));Query OK, 0 rows affected (0.04 sec)MySQL [test]> INSERT INTO t1 VALUES-> (7,'ggggggg'), (1,'a'), (3,'ccc'),-> (4,'dddd'), (1,'A'), (2,'BB'), (4,'DDDD'),-> (5,'EEEEE'), (7,'GGGGGGG'), (2,'bb');Query OK, 10 rows affected (0.03 sec)Records: 10 Duplicates: 0 Warnings: 0MySQL [test]> DELETE FROM t1 WHERE a=2 RETURNING *;+------+------+| a | b |+------+------+| 2 | BB || 2 | bb |+------+------+2 rows in set (0.01 sec)MySQL [test]> DELETE FROM t1 RETURNING *;+------+---------+| a | b |+------+---------+| 7 | ggggggg || 1 | a || 3 | ccc || 4 | dddd || 1 | A || 4 | DDDD || 5 | EEEEE || 7 | GGGGGGG |+------+---------+8 rows in set (0.01 sec)
MySQL [test]> CREATE TABLE `t` (id INT);Query OK, 0 rows affected (0.03 sec)MySQL [test]> delimiter $$MySQL [test]> CREATE PROCEDURE test(in param INT)-> BEGIN-> INSERT INTO t (id) values (param) returning *;-> END$$Query OK, 0 rows affected (0.00 sec)MySQL [test]> delimiter ;MySQL [test]> CALL test(100);+------+| id |+------+| 100 |+------+1 row in set (0.01 sec)Query OK, 0 rows affected (0.01 sec)
Was this page helpful?