【发布时间】:2021-08-25 11:39:15
【问题描述】:
我正在尝试创建一个存储过程,它将记录插入数据库并返回新创建的 id。如果已存在同名记录,则应返回该记录的 id。 这是我目前所拥有的,它适用于新插入的记录,但如果记录已经存在,则不返回任何内容。
CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_tag`(IN `tag_name_in` VARCHAR(255), OUT `tag_id_out` INT) NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER
BEGIN
INSERT INTO tag (name) VALUES (tag_name_in);
IF ROW_COUNT() = 1 THEN
SET tag_id_out = LAST_INSERT_ID();
ELSE
SELECT id INTO tag_id_out FROM tag WHERE name=tag_name_in;
END IF;
END
【问题讨论】:
-
tag (name)id 在表结构中是否定义为 UNIQUE? -
这是我目前所拥有的,它适用于新插入的记录,但如果记录已经存在,则不返回任何内容。 我认为您的 INSERT 只会生成唯一约束违规错误,并且过程失败。
-
@Akina yes tag(name) 是唯一的,我认为即使引发了约束违规错误,它也会继续执行。如果不是,那可能就是问题所在。
标签: mysql sql stored-procedures