MYSQL 存储过程未按预期运行
MYSQL Stored procedure not behaving as expected
我正在尝试创建一个将记录插入数据库的存储过程和 return 新创建的 ID。如果同名记录已经存在,它应该 return 该记录的 ID。
这是我目前所拥有的,它适用于新插入的记录,但是 return 如果记录已经存在则什么都没有。
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
我完全看不出使用 LAST_INSERT_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 IGNORE INTO tag (name) VALUES (tag_name_in);
SELECT id INTO tag_id_out FROM tag WHERE name=tag_name_in;
END
由于问题文本 tag (name)
被定义为 UNIQUE(甚至可能是 PRIMARY KEY)。
我正在尝试创建一个将记录插入数据库的存储过程和 return 新创建的 ID。如果同名记录已经存在,它应该 return 该记录的 ID。 这是我目前所拥有的,它适用于新插入的记录,但是 return 如果记录已经存在则什么都没有。
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
我完全看不出使用 LAST_INSERT_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 IGNORE INTO tag (name) VALUES (tag_name_in);
SELECT id INTO tag_id_out FROM tag WHERE name=tag_name_in;
END
由于问题文本 tag (name)
被定义为 UNIQUE(甚至可能是 PRIMARY KEY)。