国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

詳解 Mysql中的delimiter定義及作用

2024-07-25 19:08:53
字體:
來源:轉載
供稿:網友

初學mysql時,可能不太明白delimiter的真正用途,delimiter在mysql很多地方出現,比如存儲過程、觸發器、函數等。

學過oracle的人,再來學mysql就會感到很奇怪,百思不得其解。

其實就是告訴mysql解釋器,該段命令是否已經結束了,mysql是否可以執行了。

默認情況下,delimiter是分號(;) 。

在命令行客戶端中,如果有一行命令以分號結束,那么回車后,mysql將會執行該命令。如輸入下面的語句

mysql> select * from test_table;

然后回車,那么MySQL將立即執行該語句。

但有時候,不希望MySQL這么做。在為可能輸入較多的語句,且語句中包含有分號。

如試圖在命令行客戶端中輸入如下語句

mysql> CREATE FUNCTION `SHORTEN`(S VARCHAR(255), N INT)mysql>   RETURNS varchar(255)mysql> BEGINmysql> IF ISNULL(S) THENmysql>  <strong> RETURN '';</strong>mysql> ELSEIF N<15 THENmysql>   RETURN LEFT(S, N);mysql> ELSEmysql>   IF CHAR_LENGTH(S) <=N THENmysql>  <strong>RETURN S;</strong>mysql>   ELSEmysql>  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> BEGINmysql> IF ISNULL(S) THENmysql>  RETURN '';mysql> ELSEIF N<15 THENmysql>   RETURN LEFT(S, N);mysql> ELSEmysql>   IF CHAR_LENGTH(S) <=N THENmysql>  RETURN S;mysql>   ELSEmysql>  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的分隔符重新設置為分號;

如果不修改的話,本次會話中的所有分隔符都以// 為準。

總結

以上所述是小編給大家介紹的詳解 Mysql中的delimiter的作用,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 张掖市| 吴旗县| 睢宁县| 南汇区| 荥阳市| 邯郸市| 岗巴县| 萨迦县| 长寿区| 芦溪县| 固安县| 哈尔滨市| 桦甸市| 嵊州市| 罗城| 沁水县| 枣阳市| 靖州| 桃园市| 会理县| 天长市| 达孜县| 白沙| 阿克苏市| 华亭县| 岳阳市| 雷山县| 安乡县| 东丽区| 突泉县| 通道| 台安县| 射洪县| 浠水县| 喀什市| 建湖县| 闵行区| 石景山区| 兰西县| 太湖县| 衡水市|