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> 

注意:执行完语句后,最后需将分隔符还原为“;”。

(完)

最后修改于:2023年03月16日 01:14

添加新评论