共计 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 问一下细节