LAST_INSERT_ID()MySQL

我有一个MySQL问题,我认为一定很容易。 当我运行下面的MySql查询时,我需要从table1返回最后一个插入的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(); 

正如你可以理解的,当前的代码将返回table2的最后一个INSERT ID而不是table1,即使我插入table2之间,如何从table1获取id?

您可以将最后一个插入ID存储在一个variables中:

 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); 

或者获取最大ID frm table1

 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; 

既然你实际存储了以前的LAST_INSERT_ID()到第二个表中,你可以从这里得到它:

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

这使您可以将行插入到2个不同的表中,并创build对两个表的引用。

 START TRANSACTION; INSERT INTO accounttable(account_username) VALUES('AnAccountName'); INSERT INTO profiletable(profile_account_id) VALUES ((SELECT account_id FROM accounttable WHERE account_username='AnAccountName')); SET @profile_id = LAST_INSERT_ID(); UPDATE accounttable SET `account_profile_id` = @profile_id; COMMIT; 

有可能将last_id_in_table1variables保存到一个phpvariables中以便稍后使用它?

有了这last_id我需要附加在这个last_id另一个表中的一些logging,所以我需要:

1)做一个INSERT并得到last_id_in_table1

 INSERT into Table1(name) values ("AAA"); SET @last_id_in_table1 = LAST_INSERT_ID(); 

2)对于另一个表中的任何未确定的行,使用插入中生成的last_id_insert对这些行进行UPDATING。

 $element = array(some ids) foreach ($element as $e){ UPDATE Table2 SET column1 = @last_id_in_table1 WHERE id = $e } 

我有同样的问题在bash中,我正在做这样的事情:

 mysql -D "dbname" -e "insert into table1 (myvalue) values ('${foo}');" 

这工作正常:-)但是

 mysql -D "dbname" -e "insert into table1 (myvalue) values ('${foo}');set @last_insert_id = LAST_INSERT_ID();" mysql -D "dbname" -e "insert into table2 (id_tab1) values (@last_insert_id);" 

不工作。 因为在第一个命令之后,shell将从mysql注销,并且再次login到第二个命令,然后variables@last_insert_id不再被设置。 我的解决scheme是:

 lastinsertid=$(mysql -B -N -D "dbname" -e "insert into table1 (myvalue) values ('${foo}');select LAST_INSERT_ID();") mysql -D "dbname" -e "insert into table2 (id_tab1) values (${lastinsertid});" 

也许有人正在寻找一个解决schemebash 🙂

倒数第二:

 INSERT INTO `t_parent_user`(`u_id`, `p_id`) VALUES ((SELECT MAX(u_id-1) FROM user) ,(SELECT MAX(u_id) FROM user ) ); 

只要添加Rodrigo的post,而不是查询中的LAST_INSERT_ID(),你可以使用SELECT MAX(id)FROM table1 ;,但是你必须使用(),

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

我们只有一个人inputlogging,所以我插入后立即执行以下查询:

 $result = $conn->query("SELECT * FROM corex ORDER BY id DESC LIMIT 1"); while ($row = $result->fetch_assoc()) { $id = $row['id']; } 

这将从数据库中检索最后一个ID。

如果你需要从MySQL获得,在你的查询之后,最后一个自动增量的id没有另一个查询,把你的代码放在:

 mysql_insert_id();