加入收藏 | 设为首页 | 会员中心 | 我要投稿 拼字网 - 核心网 (https://www.hexinwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

如何在Mysql中定义与运用delimiter

发布时间:2022-02-18 01:47:42 所属栏目:MySql教程 来源:互联网
导读:如何在Mysql中定义与使用delimiter?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 默认情况下,delimiter是分号(;) 。 在命令行客户端中,如果有一行命令以分号结束,那
       如何在Mysql中定义与使用delimiter?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
 
      默认情况下,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>  <strong> RETURN '';</strong>
mysql> ELSEIF N<15 THEN
mysql>   RETURN LEFT(S, N);
mysql> ELSE
mysql>   IF CHAR_LENGTH(S) <=N THEN
mysql>  <strong>RETURN S;</strong>
mysql>   ELSE
mysql>  RETURN CONCAT(LEFT(S, N-10), '...', RIGHT(S, 5));
mysql>   END IF;
mysql> END IF;
mysql> END;
  默认情况下,不可能等到用户把这些语句全部输入完之后,再执行整段语句。
 
  因为mysql一遇到分号,它就要自动执行。
 
       即,在语句RETURN '';时,mysql解释器就要执行了。
 
      这种情况下,就需要事先把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解释器才会执行这段语句。
 
其外。再mysql的存储过程中,需要注意的一点是:
 
drop PROCEDURE if EXISTS proc_while_test;
delimiter ;;
CREATE DEFINER = root@localhost PROCEDURE proc_while_test(IN n int)
BEGIN
  DECLARE i int;
  DECLARE s int;
 SET i = 0;
  SET s = 0;
  WHILE i <= n DO
    SET s = s + i;          set i++;
    set i = i + 1;
  end WHILE;
  select s;
end
;;
delimiter ;
  在上面的例子中,set i++;是会导致整个while循环报错。在mysql的存储过程中,i++是不允许这样写的。需要写成i=i+1这种形式才可以。
 
补充:下面看下Mysql中delimiter作用
 
1. delimiter
 
delimiter是mysql分隔符,在mysql客户端中分隔符默认是分号(;)。
如果一次输入的语句较多,并且语句中间有分号,这时需要新指定一个特殊的分隔符。
 
2. delimiter使用
 
在前一篇中有设置mysql的触发器时使用例子
 
mysql> delimiter //
mysql> create trigger upd_check before update on account  
  -> for each row
  -> begin
  -> if new.amount < 0 then
  -> set new.amount=0;
  -> elseif new.amount > 100 then
  -> set new.amount = 100;
  -> end if;
  -> end;
  -> //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
上面就是,先将分隔符设置为 //,
 
直到遇到下一个 //,才整体执行语句。
 
执行完后,最后一行, delimiter ; 将mysql的分隔符重新设置为分号;
 
如果不修改的话,本次会话中的所有分隔符都以// 为准。

(编辑:拼字网 - 核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!