久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何在Mysql中定義與使用delimiter

159次閱讀
沒有評論

共計 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字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 乐陵市| 山丹县| 济源市| 黔西县| 曲水县| 晋宁县| 邵阳市| 河北区| 宁化县| 香河县| 密云县| 资中县| 米泉市| 沈阳市| 杭州市| 五指山市| 沙洋县| 手机| 灵台县| 扶风县| 微博| 广平县| 邳州市| 会宁县| 新源县| 林州市| 江川县| 平山县| 渝中区| 什邡市| 武汉市| 阜平县| 朝阳区| 南乐县| 个旧市| 桐庐县| 南木林县| 长海县| 榆林市| 城步| 临猗县|