这篇文章主要描述了DELIMITER命令的作用
DELIMITER命令
DELIMITER是MySQL中的命令,这个命令与存储过程没什么关系
他的作用就是告诉MySQL解释器,该段命令是否已经结束了,MySQL是否可以执行了
默认情况下DELIMITER是分号; 在命令行客户端中,如果有一行命令以分号结束,那么MySQL将不会管分号后面的sql语法 因为MySQL语法一遇到分号就会自动执行(默认的DELIMITER是分号)
而我们在写sql存储过程的时候又不可能只有一条语句 所以这时候就要用到DELIMITER了
DELIMITER后面换成其它符号,如//或$$ 这样就不会一出现;就会立即执行sql语句了
下面我们看几个例子
DELIMITER $$
DROP TRIGGER IF EXISTS `updateegopriceondelete`$$
CREATE
TRIGGER `updateegopriceondelete` AFTER DELETE ON `customerinfo`
FOR EACH ROW BEGIN
DELETE FROM egoprice WHERE customerId=OLD.customerId;
END$$
DELIMITER ;
DELIMITER 定好结束符为”$$”, 然后最后又定义为”;”, MySQL的默认结束符为”;”.
说明我们DELIMITER再sql可以在开头或末尾随意修改的 这个就看自己的需求了
CREATE FUNCTION `SHORTEN`(S VARCHAR(255), N INT)
RETURNS varchar(255)
BEGIN
IF ISNULL(S) THEN
RETURN '';
ELSEIF N<15 THEN
RETURN LEFT(S, N);
ELSE
IF CHAR_LENGTH(S) <=N THEN
RETURN S;
ELSE
RETURN CONCAT(LEFT(S, N-10), '...', RIGHT(S, 5));
END IF;
END IF;
END;
默认情况下,不可能等到用户把这些语句全部输入完之后,再执行整段语句。
因为MySQL一遇到分号,它就要自动执行。
即,在语句RETURN ‘’;时,MySQL就开始执行了。
这种情况下,就需要事先把DELIMITER换成其它符号,如//或$
DELIMITER $$ 或 //
CREATE FUNCTION `SHORTEN`(S VARCHAR(255), N INT)
RETURNS varchar(255)
BEGIN
IF ISNULL(S) THEN
RETURN '';
ELSEIF N<15 THEN
RETURN LEFT(S, N);
ELSE
IF CHAR_LENGTH(S) <=N THEN
RETURN S;
ELSE
RETURN CONCAT(LEFT(S, N-10), '...', RIGHT(S, 5));
END IF;
END IF;
END;$$或//
DELIMITER ;(还原;)
这样只有当$$或//出现之后,MySQL解释器才会执行这段语句
注:DELIMITER 自定义结束符号 后面不要多加一个分号哦( ̄▽ ̄)~* DELIMITER $$; 用了DELIMITER 符号之后记得在最后还原哦 DELIMITER;