如何创建在第一次插入后从select语句插入输入和数据的存储过程

时间:2017-12-13 05:07:03

标签: mysql

我正在尝试在MySQL中创建一个存储过程,它将向两个不同的表添加行。第一个表(sites)有一个id列设置为auto_increment,我希望在第二个insert语句中包含到sitesByUser表。我已根据这篇优秀文章尝试了一些想法:https://dba.stackexchange.com/questions/2973/how-to-insert-values-into-a-table-from-a-select-query-in-postgresql但我收到了各种错误,例如下面列出的错误。我怀疑我的部分问题是我试图将userInputSELECT id FROM sites WHERE id=LAST_INSERT_ID()同时添加到同一个表中,但我不知道该怎么做才能让它工作。

CREATE PROCEDURE createSite(IN siteName VARCHAR(2048), IN userInput VARCHAR(255))
BEGIN
INSERT INTO sites(siteName, user) VALUES (siteName, userInput);
INSERT INTO sitesByUser(user, site) userInput, SELECT id FROM sites WHERE id=LAST_INSERT_ID();
SELECT * FROM sitesByUser WHERE id=LAST_INSERT_ID();
END

MySQL的回复:

Error while performing Query.
ER_PARSE_ERROR
ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'userInput, SELECT id FROM sites WHERE id=LAST_INSERT_ID();
SELECT * FROM sitesBy' at line 3

2 个答案:

答案 0 :(得分:1)

试试这个

SET @last_id_in_table1 = LAST_INSERT_ID();
SELECT * FROM sitesByUser WHERE id=@last_id_in_table1;

希望这有帮助

答案 1 :(得分:0)

似乎正确的方法是将LAST_INSERT_ID()存储在变量中,如下所述:How to declare a variable in MySQL?我不确定我是否应该在前面使用@符号变量,因为它似乎使它成为一个用户定义的变量,这意味着它是特定于会话的,可能在我的需求范围内太宽,但到目前为止,这成功地创建了一个我认为可行的存储过程。如果没有,我会更新这篇文章。

CREATE PROCEDURE createSite(IN siteName VARCHAR(2048), IN userInput VARCHAR(255))
BEGIN
INSERT INTO sites(siteName, user) VALUES (siteName, userInput);
SET @last_id_in_sites = LAST_INSERT_ID();
INSERT INTO sitesByUser(user, site) VALUES (userInput, @last_id_in_sites);
SELECT * FROM sitesByUser WHERE id=LAST_INSERT_ID();
END