我在数据库中有一个表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,您对如何优化有任何想法吗?
答案 0 :(得分:0)
您应该在最后一行之前添加$$
。
而且,你忘记了很多;
返回一个数字并指定charset是荒谬的,可能是语法错误。
删除@id
的所有行,只需添加RETURN last_insert_id();
IF NOT EXISTS((从name = tag的标签中选择id))那么
(还要注意我从标签中删除了@)
可能有更多的错误,但有这些错误:)
答案 1 :(得分:0)
但可能我的旧答案毫无用处。真正的问题是:这个存储功能真的需要吗?我想你试图这样做只是为了避免重复。
达到同一目标: