0

我在数据库中有一个表tags,我想创建一个基于添加值的查询,如果name标签不存在,下一个选定的 ID 以及名称是否存在选定的标签 ID

我创建了一个简单的代码:

DELIMITER $$
USE `cc`$$
DROP FUNCTION IF EXISTS getTagId$$
CREATE FUNCTION getTagId (tag CHAR(20)) RETURNS  INT CHARSET utf-8
    BEGIN
       DECLARE id INT
       set @id = (select id from tags where name = @tag)
           if (@id is null) then
            insert into tags(name) values(@tag)
            set @id = (select last_insert_id())
           end if
        SELECT @id
    END
delimiter;

但是这段代码不起作用(这是我在 MySQL 中的第一个函数)。

我想在单个查询中向数据库添加更多标签,然后是 10 个,您对如何优化有任何想法吗?

4

2 回答 2

0

您应该$$在最后一行之前添加一个。

而且,你忘记了很多;

返回一个数字并指定字符集是荒谬的,并且可能是语法错误。

删除所有行@id并简单地添加RETURN last_insert_id();

IF NOT EXISTS ((select id from tags where name = tag)) THEN

(另请注意,我从标签中删除了@!)

可能还有更多错误,但请注意这些:)

于 2013-04-24T09:38:53.597 回答
0

但可能我的旧答案没用。真正的问题是:这个存储函数真的需要吗?我猜你试图这样做只是为了避免重复。

为了达到相同的目标:

  • 为 tags.name 添加唯一索引
  • 使用 INSERT IGNORE (如果该标签已经存在则没有错误)
于 2013-04-24T09:45:03.790 回答