MySql 函数没有返回正确的结果

标签 mysql sql function

我试图在 mysql 中创建一个函数,如果该 id 已经存在于表中,它将返回 bool 值。我在网上找到的大多数解决方案都需要同时使用 php 和 mysql 的解决方案,但我想做的是一个纯 mysql 的函数形式的解决方案。

我简化后的 mysql 表如下:

CREATE TABLE IF NOT EXISTS table1 (
    `user_id` VARCHAR(12) UNIQUE,
    `name` VARCHAR(128),
    PRIMARY KEY (`user_id`)
);

我的第一次尝试如下:

DELIMITER *
DROP FUNCTION IF EXISTS CheckExistId*
CREATE FUNCTION CheckExistId (user_id VARCHAR(12)) RETURNS BOOL
BEGIN
    DECLARE isExist BOOL;
    SET isExist = 0;
    SELECT EXISTS(SELECT * FROM table1 WHERE `user_id`=user_id) INTO isExist ;
    RETURN isExist;
END*
DELIMITER ;

我的第二次尝试:

DELIMITER *
DROP FUNCTION IF EXISTS CheckExistId*
CREATE FUNCTION CheckExistId (user_id VARCHAR(12)) RETURNS BOOL
BEGIN
    DECLARE isExist BOOL;
    DECLARE countRow INT;
    SELECT COUNT(`user_id`) INTO countRow FROM table1 WHERE `user_id`=user_id;
    IF countRow = 0 THEN SET isExist = 1; 
    ELSE SET isExist = 0; 
    END IF;
    RETURN isExist;
END*
DELIMITER ;

两者都没有给我预期的结果。有关如何解决此问题的任何建议?

最佳答案

您的第一次尝试非常好,除了您使用 * 作为分隔符并为您的参数和列名称使用相同的名称。这让 MySQL 很困惑。像这样写:

DELIMITER $$
DROP FUNCTION IF EXISTS CheckExistId $$
CREATE FUNCTION CheckExistId (p_user_id VARCHAR(12)) RETURNS BOOL
BEGIN
    DECLARE isExist BOOL;
    SET isExist = 0;
    SELECT EXISTS(SELECT * FROM table1 WHERE `user_id`=p_user_id) INTO isExist ;
    RETURN isExist;
END $$
DELIMITER ;

关于MySql 函数没有返回正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18374154/

相关文章:

php - 生成唯一的 View ID

sql - 如何获取给定之前和之后的记录?

sql - 何时使用表运算符 APPLY

python - 多参数值错误

python - 一次返回一个单词

c - 从函数返回矩阵

mysql - 触发将空值更改为 NULL

mysql - 为什么不在下面的sql中使用两个索引

sql - 在查询中重用 SUM OVER PARTITION 返回值

python - 如何使用 Python 和 MySQL 连接器检索数据