下面是我的示例查询,其中第一个创建新文件夹,第二个更新计数,第三个:创建新标记,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$$