我试图在 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/