如何在Mysql中定义与使用delimiter

60次阅读
没有评论

共计 2091 个字符,预计需要花费 6 分钟才能阅读完成。

自动写代码机器人,免费开通

如何在 Mysql 中定义与使用 delimiter?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面丸趣 TV 小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

默认情况下,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;
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 的分隔符重新设置为分号;

如果不修改的话,本次会话中的所有分隔符都以 // 为准。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注丸趣 TV 行业资讯频道,感谢您对丸趣 TV 的支持。

向 AI 问一下细节

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-04发表,共计2091字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)