MySQL存储过程初学者错误

MySQL存储过程初学者错误,mysql,stored-procedures,Mysql,Stored Procedures,我正在学习MySQL存储过程,但我有点被我试图创建的过程难住了 CREATE PROCEDURE tag_inserts ( IN myTag VARCHAR(255), IN profileID INT(11) ) BEGIN INSERT IGNORE INTO tags(tag) VALUES(myTag); SET @lid = LAST_INSERT_ID(); IF(@lid = 0, (SELECT tagid FROM tags WHERE tag = myTag)

我正在学习MySQL存储过程,但我有点被我试图创建的过程难住了

CREATE PROCEDURE tag_inserts
(
IN myTag VARCHAR(255), 
IN profileID INT(11)
)

BEGIN

INSERT IGNORE INTO tags(tag) VALUES(myTag);

SET @lid = LAST_INSERT_ID();

 IF(@lid = 0,
 (SELECT tagid FROM tags WHERE tag = myTag),
 (INSERT INTO profile_hashtags (pid,tagid) VALUES (profileID,@lid)));

END
当我执行它时,它会给我以下错误

您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解使用接近“INTO profile_hashtags(pid,tagid)值(profileID,@lid))的正确语法; 在第13行结束

您使用的函数用于表达式的条件求值。您需要的是程序流控件,它将如下所示:

-- Some client apps require DELIMITER directives, and some don't.
DELIMITER //
CREATE PROCEDURE tag_inserts (IN myTag VARCHAR(255), IN profileID INT(11))
  BEGIN
    INSERT IGNORE INTO tags (tag)
      VALUES (myTag);
    SET @lid = LAST_INSERT_ID();
    IF @lid = 0 THEN
      SELECT tagid
        INTO @lid
        FROM tags
        WHERE tag = myTag;
      INSERT INTO profile_hashtags
          (pid, tagid)
        VALUES
          (profileID, @lid);
    END IF;
  END;

-- Some client apps require DELIMITER directives, and some don't.
//
DELIMITER ;
另请注意
选择。。。进入
语法,用于将选定值检索到过程变量中。

您使用的函数用于表达式的条件求值。您需要的是程序流控件,它将如下所示:

-- Some client apps require DELIMITER directives, and some don't.
DELIMITER //
CREATE PROCEDURE tag_inserts (IN myTag VARCHAR(255), IN profileID INT(11))
  BEGIN
    INSERT IGNORE INTO tags (tag)
      VALUES (myTag);
    SET @lid = LAST_INSERT_ID();
    IF @lid = 0 THEN
      SELECT tagid
        INTO @lid
        FROM tags
        WHERE tag = myTag;
      INSERT INTO profile_hashtags
          (pid, tagid)
        VALUES
          (profileID, @lid);
    END IF;
  END;

-- Some client apps require DELIMITER directives, and some don't.
//
DELIMITER ;

另请注意
选择。。。进入
语法,用于将选定值检索到过程变量中。

感谢您的解释。这是新的输出。SQL查询:创建过程标记_插入(在myTag VARCHAR(255)中,在profileID INT(11)中)开始插入忽略到标记(标记)值('myTag');MySQL说:文档#1064-您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第3行“您使用的是什么客户端”附近要使用的正确语法?Workbench,
mysql
,phpMyAdmin…?一些mysql客户端,尤其是
mysql
和mysql Workbench,在输入复合语句时需要使用。我已经在上面的解决方案中添加了它们。Darwin,是的,就是这样,我通常在MySQL中使用toad,但出于某种原因,我试图直接在phpMyAdmin中执行此操作,当我添加分隔符时,一切正常。谢谢你的帮助。我将继续并开始阅读更多关于MySQL存储过程的内容:)感谢您的解释。这是新的输出。SQL查询:创建过程标记_插入(在myTag VARCHAR(255)中,在profileID INT(11)中)开始插入忽略到标记(标记)值('myTag');MySQL说:文档#1064-您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第3行“您使用的是什么客户端”附近要使用的正确语法?Workbench,
mysql
,phpMyAdmin…?一些mysql客户端,尤其是
mysql
和mysql Workbench,在输入复合语句时需要使用。我已经在上面的解决方案中添加了它们。Darwin,是的,就是这样,我通常在MySQL中使用toad,但出于某种原因,我试图直接在phpMyAdmin中执行此操作,当我添加分隔符时,一切正常。谢谢你的帮助。我将继续并开始阅读更多关于MySQL存储过程的内容:)