Mar*_*tin 139 mysql insert last-insert-id
我有一个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();
Run Code Online (Sandbox Code Playgroud)
您可以理解当前代码只返回table2的LAST INSERT ID而不是table1,即使我插入table2之间,如何从table1获取id?
Jul*_*rau 232
您可以将最后一个插入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);
Run Code Online (Sandbox Code Playgroud)
或者获取最大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;
Run Code Online (Sandbox Code Playgroud)
Art*_*oul 16
由于您实际将先前的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();
Run Code Online (Sandbox Code Playgroud)
Osp*_*pho 13
这使您可以在两个不同的表中插入一行,并创建对两个表的引用.
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;
Run Code Online (Sandbox Code Playgroud)
小智 6
我在 bash 中遇到了同样的问题,我正在做这样的事情:
mysql -D "dbname" -e "insert into table1 (myvalue) values ('${foo}');"
Run Code Online (Sandbox Code Playgroud)
效果很好:-)但是
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);"
Run Code Online (Sandbox Code Playgroud)
不工作。因为在第一个命令之后,shell将从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});"
Run Code Online (Sandbox Code Playgroud)
也许有人正在寻找解决方案 bash :-)
归档时间: |
|
查看次数: |
316496 次 |
最近记录: |