MySQL中 delimiter 关键字详解

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#

猜你喜欢

转载自blog.csdn.net/Artificial_idiots/article/details/106753592