如果行不存在则插入的过程或函数

时间:2018-05-17 21:39:05

标签: mysql sql

我正在尝试编写一个函数或过程来检查行是否存在并返回行id;否则它会创建一行并返回该行ID。这就是我所拥有的:

DELIMITER //
DROP FUNCTION IF EXISTS `is_school`//
CREATE FUNCTION is_school (school_name VARCHAR(255))
    RETURNS INT unsigned 
    MODIFIES SQL DATA
    BEGIN
        DECLARE school_id INT unsigned;
        SELECT `id` INTO school_id FROM `schools` WHERE `name`=school_name LIMIT 1;
        IF school_id = NULL THEN
            INSERT INTO `schools` (`name`) VALUES (school_name);
            RETURN LAST_INSERT_ID();
        ELSE
            RETURN school_id;
        END IF;
    END //

DELIMITER ;

如果行存在,它可以正常工作。但它似乎不想执行该insert语句。如果您尝试在新学校上调用该功能,则不会创建该学校。我也尝试用OUT参数编写这个程序。关于我哪里出错的任何想法?

1 个答案:

答案 0 :(得分:1)

替换

IF school_id = NULL THEN

IF school_id IS NULL THEN

来自docs

  

您不能使用算术比较运算符,例如=,<或<>测试NULL。