首页 > 解决方案 > 如果行不存在则插入的过程或函数

问题描述

我正在尝试编写一个函数或过程来检查行是否存在并返回行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 ;

如果该行存在,它工作正常。但它似乎不想执行那个插入语句。如果您尝试在新学校上调用该函数,它不会创建该学校。我也试过用 OUT 参数把它写成一个过程。关于我要去哪里错的任何想法?

标签: mysqlsql

解决方案


代替

IF school_id = NULL THEN

IF school_id IS NULL THEN

.

文档

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


推荐阅读