1.delimiter 的功能:
告诉MySQL解释器,该段命令是否已经结束了,mysql是否可以执行了。
2.可以通过delimiter更改语句结束符
一般会用:// , $$ 或 &&
默认的SQL语句中,delimiter是分号 ,以分号 “;” 表示结束。
更改结束符举例:
DELIMITER //
CREATE FUNCTION get_number_by_id(id INT)
RETURNS VARCHAR(300)
BEGIN
RETURN (SELECT CONCAT('name: ', name, '--', 'number: ', number)
FROM users_info WHERE uid = id);
END//
DELIMITER ;
其中DELIMITER 先定义结束符为 // , 然后最后又定义为 ;。
注意:最后一行delimiter ; 表示将mysql的结束符重新置为分号,这里delimiter与分号之间有空格隔开,表示定义或声明,如果没有空格则未能更改结束符。
3.需要通过delimiter更改结束符的情况
默认情况下,mysql解释器每遇到一个分号,执行一段语句,但有时候,不希望MySQL这么做,如在输入较多的语句,且语句中包含有分号。
举例:
如在创建自定义函数时,定义一个阶乘函数,输入如下语句:
CREATE FUNCTION factorial(a INT)
RETURNS INT
BEGIN
SET @i = 1;
SET @result = 1;
IF a = 0 THEN
RETURN 0;
ELSEIF a = 1 THEN
RETURN 1;
ELSE
WHILE @i <= a DO
SET @result = @result * @i;
SET @i = @i +1;
END WHILE;
RETURN @result;
END IF;
END;
默认情况下,不可能等到用户把这些语句全部输入完之后,再执行整段语句。
因为mysql一遇到分号,解释器就要自动执行。
这时,需要事先把delimiter换成其它符号,如 //
DELIMITER //
CREATE FUNCTION factorial(a INT)
RETURNS INT
BEGIN
SET @i = 1;
SET @result = 1;
IF a = 0 THEN
RETURN 0;
ELSEIF a = 1 THEN
RETURN 1;
ELSE
WHILE @i <= a DO
SET @result = @result * @i;
SET @i = @i +1;
END WHILE;
RETURN @result;
END IF;
END//
DELIMITER ;
这样只有当 // 出现之后,mysql解释器才会执行这段语句 ,然后一句将结束符改为默认的分号。
参考:https://blog.csdn.net/yuxin6866/article/details/52722913#