从函数(存在和计数)返回MySql

时间:2018-05-06 03:33:51

标签: mysql function count exists

我想检查一行是否存在以及它是否未向用户返回消息。 我做了以下测试,得到了结果:

CREATE DEFINER=`root`@`localhost` FUNCTION `ud_fnc_DoesUserNameExist`(userName varchar(200)) RETURNS int(11)
    BEGIN

    return exists(select `Id` from `ud_tbl_User` where `userName` = userName);

    END

即使该值不存在,此函数也会返回1.

CREATE DEFINER=`root`@`localhost` FUNCTION `ud_fnc_DoesUserNameExist`(userName varchar(200)) RETURNS int(11)
    BEGIN

    return (select count(`Id`) from `ud_tbl_User` where `userName` = userName);

    END

即使该值不存在,此函数也会返回1。

1 个答案:

答案 0 :(得分:0)

这是因为您的参数的名称与列名称完全相同

因此MySQL会选择将其解释为列名,最后会得到where columnname = columnname,这与where 1 = 1相同,后者始终为true

CREATE DEFINER=`root`@`localhost` FUNCTION `ud_fnc_DoesUserNameExist`(myUserName varchar(200)) RETURNS int(11)
    BEGIN

    return exists(select `Id` from `ud_tbl_User` where `userName` = myUserName);

    END