这篇文章介绍一下 MySQL中delimiter的作用。
单词 delimiter
的中文释义是 分隔符
。
也就是说告诉 mysql 命令解释器,该条命令结束了。
默认情况下,delimiter是分号;
。在命令行客户端中,如果有一行命令以分号结束,那么回车后,mysql将会执行该命令。如输入下面的语句:
mysql> select * from test_table;
然后回车,那么MySQL将立即执行该语句。
但是有时候我们并不想这样子做,比如说在建立存储过程、函数或者触发器的时候,那么我们可能无法避免的要输入;
,所以这种时候我们可能希望 mysql 不要以 ;
来作为命令结束的标志。
比如我们想在命令行输入如下语句:
mysql> CREATE FUNCTION `SHORTEN`(S VARCHAR(255), N INT)
mysql> RETURNS varchar(255)
mysql> BEGIN
mysql> IF ISNULL(S) THEN
mysql> RETURN '';
mysql> ELSEIF N<15 THEN
mysql> RETURN LEFT(S, N);
mysql> ELSE
mysql> IF CHAR_LENGTH(S) <=N THEN
mysql> RETURN S;
mysql> ELSE
mysql> RETURN CONCAT(LEFT(S, N-10), '...', RIGHT(S, 5));
mysql> END IF;
mysql> END IF;
mysql> END;
默认情况下,不可能等到用户把这些语句全部输入完之后,再执行整段语句。
因为mysql一遇到分号,它就要自动执行。
即,在语句RETURN '';
时,mysql解释器就要执行了。
这种情况下,就需要事先把delimiter换成其它不会在语句中出现的符号,如//或$$。
那么需要怎么做呢? 这就要用到 delimiter 了
delimiter // 表示将分隔符换成 //
delimiter $$ 表示将分隔符换成 $$
可见 delimiter 的用法相当的清晰易懂
所以上面的代码可以修改为如下创建函数代码:
mysql> delimiter //
mysql> CREATE FUNCTION `SHORTEN`(S VARCHAR(255), N INT)
mysql> RETURNS varchar(255)
mysql> BEGIN
mysql> IF ISNULL(S) THEN
mysql> RETURN '';
mysql> ELSEIF N<15 THEN
mysql> RETURN LEFT(S, N);
mysql> ELSE
mysql> IF CHAR_LENGTH(S) <=N THEN
mysql> RETURN S;
mysql> ELSE
mysql> RETURN CONCAT(LEFT(S, N-10), '...', RIGHT(S, 5));
mysql> END IF;
mysql> END IF;
mysql> END;//
mysql> delimiter ; //用完之后别忘记恢复默认的分隔符,以避免出现乌龙
这样只有当//出现之后,mysql解释器才会执行这段语句
创建存储过程例子:
mysql> delimiter //
mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
-> BEGIN
-> SELECT COUNT(*) INTO param1 FROM t;
-> END;
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> CALL simpleproc(@a);
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @a;
+------+
| @a |
+------+
| 3 |
+------+
1 row in set (0.00 sec)
当然顺便提一下,也可以将sql语句放在文件中,然后以source命令来执行,比如将上面的代码放在 /Test/MysqlTest.sql中,然后在Mysql的命令行中执行 source /Test/MysqlTest.sql 来执行命令。
参考链接 : http://www.cnblogs.com/rootq/archive/2009/05/27/1490523.html