我正在尝试在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但我收到了各种错误,例如下面列出的错误。我怀疑我的部分问题是我试图将userInput
和SELECT 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
答案 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