我有一个MySQL的问题,我想一定是很容易的。我需要从表1返回最后插入的ID,当我运行以下MySQL查询:

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

你可以了解当前的代码将只返回表2中,而不是表1的最后一个INSERT ID,我如何从表1获得ID就算我插入到表2之间?

有帮助吗?

解决方案

您可以在最后一个插入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);    

或取得最大ID FRM表1

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页不同的表,并创建两个表的基准太

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;

我在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);"

不工作。由于第一命令后,将外壳从MySQL被注销,并且再次记录在所述第二命令,然后可变@last_insert_id没有设置了。 我的解决办法是:

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

也许有人正在搜索溶液中的bash: - )

这将有可能对last_id_in_table1变量保存到一个PHP变量稍后使用吗?

使用此last_id我需要附加一些记录在另一个表中与该last_id,所以我需要:

1)执行插入,并获得last_id_in_table1

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

2)为在另一表中的任何indeterminated行,更新这些行与在插入物产生的last_id_insert。

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

有关无InnoDB的溶液:可以使用一个程序 don't forgot to set the the delimiter for storing the procedure with ;

CREATE PROCEDURE myproc(OUT id INT, IN otherid INT, IN title VARCHAR(255))
BEGIN
LOCK TABLES `table1` WRITE;
INSERT INTO `table1` ( `title` ) VALUES ( @title ); 
SET @id = LAST_INSERT_ID();
UNLOCK TABLES;
INSERT INTO `table2` ( `parentid`, `otherid`, `userid` ) VALUES (@id, @otherid, 1); 
END

你可以用它...

SET @myid;
CALL myproc( @myid, 1, "my title" );
SELECT @myid;

有关最后和倒数第二个:

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

只是为了查询添加罗德里格岗位,而不是LAST_INSERT_ID(),您可以使用SELECT MAX(ID)FROM表1;不过,你必须使用()

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

我们只有一个进入者的记录,所以我执行以下查询立即插入以下内容:

$result = $conn->query("SELECT * FROM corex ORDER BY id DESC LIMIT 1");

while ($row = $result->fetch_assoc()) {

            $id = $row['id'];

}

此从数据库检索的最后一个编号。

如果您需要从MySQL到有,您的查询后,最后的自增ID不另一个查询,把你的代码:

mysql_insert_id();
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top