MySQL中delimiter详解
delimiter说明
delimiter英文意思为:分隔符,分界符。
在MySQL解释器中,默认分隔符为英文分号“;”,即只要遇到分隔符回车,mysql就认为该命令输入完成,可以开始执行了。
如下示例,输入完分号回车后,查询语句才开始真正执行。
mysql> select user_id, user_name from sys_user;
+---------+-----------+
| user_id | user_name |
+---------+-----------+
| 1 | admin |
| 2 | ry |
| 5 | mz |
| 6 | yd |
+---------+-----------+
4 rows in set (0.05 sec)
mysql> select user_id, user_name from sys_user
-> ;
+---------+-----------+
| user_id | user_name |
+---------+-----------+
| 1 | admin |
| 2 | ry |
| 5 | mz |
| 6 | yd |
+---------+-----------+
4 rows in set (0.06 sec)
mysql>
delimiter分隔符修改
但在某些情况下,比如函数、存储过程中包含分隔符时,解释器就执行了。为避免这种情况,可以先把delimiter换成其他符号,如;;或$$等。
通过delimiter命令,可以修改分隔符。如下所示,将分隔符修改为“;;”。
mysql> delimiter ;;
示例一:MySQL导出数据库结构创建函数脚本
delimiter ;
-- ----------------------------
-- Function structure for fun_get_dict_label
-- ----------------------------
DROP FUNCTION IF EXISTS `fun_get_dict_label`;
delimiter ;;
CREATE FUNCTION `fun_get_dict_label`(`p_dict_type` varchar(50), `p_dict_value` varchar(50))
RETURNS varchar(50) CHARSET utf8mb4
BEGIN
declare V_DICT_LABEL VARCHAR(20) default '';
select t.dict_label into V_DICT_LABEL from sys_dict_data t where t.dict_type = p_dict_type and t.dict_value = p_dict_value ;
RETURN V_DICT_LABEL;
END
;;
delimiter ;
示例二:mysql命令行修改分隔符创建函数
mysql> delimiter ;;
mysql>
mysql> CREATE FUNCTION `fun_get_dict_label`(`p_dict_type` varchar(50), `p_dict_value` varchar(50))
-> RETURNS varchar(50) CHARSET utf8mb4
-> BEGIN
-> declare V_DICT_LABEL VARCHAR(20) default '';
-> select t.dict_label into V_DICT_LABEL from sys_dict_data t where t.dict_type = p_dict_type and t.dict_value = p_dict_value ;
-> RETURN V_DICT_LABEL;
-> END;
-> ;;
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql>
注意:执行完语句后,最后需将分隔符还原为“;”。
(完)