共計 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 問一下細節