Mysql存储过程SQLEXCEPTION

时间:2015-12-16 12:25:15

标签: mysql node.js stored-procedures sqlexception

下面是我的示例查询,其中第一个创建新文件夹,第二个更新计数,第三个:创建新标记,4:获取新的id.all查询在同一个存储过程中执行。其中@pFolderId是传递的id user(在参数中), 外键约束应用于标签表的folderId,当用户发送有效的folderId时,它正确执行&我得到新的tagid,但是当用户发送文件夹表中不存在的无效folderid时,它会抛出外键的异常。但在这种情况下,第一个,第二个查询被执行,第三个查询给出错误。我的问题是如何避免在任何查询的任何错误上执行查询。 1种方法是使用roolback,但是当我使用它时它正确执行1个无效的文件夹请求,但是在第2次请求时它执行了1,2查询并在第3次给出了错误。

   1: insert into folder (name)values("new");
   2: update folder set count = count + 1 where idfolder=1;
   3: insert into tag(name,folder_Id)values("dsdss",@pFolderId );
   4: SELECT last_insert_id() AS tag_id;

我如何实现这一点,避免错误执行。任何帮助将不胜感激。提前谢谢你。

PROCEDURE:

DELIMITER $$

CREATE DEFINER=root@localhost PROCEDURE newClip(pFolderId VARCHAR(100))
BEGIN
    DECLARE EXIT HANDLER FOR SQLEXCEPTION,SQLWARNING
    BEGIN
        SELECT SQLEXCEPTION.message;
        ROLLBACK;
    END;
    SET @pFolderId = pFolderId;
    START TRANSACTION;
    insert into folder (name)values("new");
    update folder set count = count + 1 where idfolder=1;
    insert into tags(name,folderId)values("dsdss",@pFolderId );
    SELECT last_insert_id()AS tag_id;
    COMMIT;
END$$

0 个答案:

没有答案