MySql中delimiter起到的作用
MySql中delimiter究竟可以起到些什么作用呢?可能不少人都有這樣的疑惑,下文就為您介紹MySql中delimiter的作用,供您參考。
MYSQL導(dǎo)出一個(gè)SQL后:
- DELIMITER $$
- DROP TRIGGER IF EXISTS `updateegopriceondelete`$$
- CREATE
- TRIGGER `updateegopriceondelete` AFTER DELETE ON `customerinfo`
- FOR EACH ROW BEGIN
- DELETE FROM egoprice WHERE customerId=OLD.customerId;
- END$$
- DELIMITER ;
其中DELIMITER 定好結(jié)束符為"$$", 然后***又定義為";", MYSQL的默認(rèn)結(jié)束符為";".
詳細(xì)解釋:
其實(shí)就是告訴mysql解釋器,該段命令是否已經(jīng)結(jié)束了,mysql是否可以執(zhí)行了。
默認(rèn)情況下,delimiter是分號(hào);。在命令行客戶端中,如果有一行命令以分號(hào)結(jié)束,
那么回車后,mysql將會(huì)執(zhí)行該命令。如輸入下面的語句
mysql> select * from test_table;
然后回車,那么MySQL將立即執(zhí)行該語句。
但有時(shí)候,不希望MySQL這么做。在為可能輸入較多的語句,且語句中包含有分號(hào)。
如試圖在命令行客戶端中輸入如下語句
- 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;
默認(rèn)情況下,不可能等到用戶把這些語句全部輸入完之后,再執(zhí)行整段語句。
因?yàn)閙ysql一遇到分號(hào),它就要自動(dòng)執(zhí)行。
即,在語句RETURN '';時(shí),mysql解釋器就要執(zhí)行了。
這種情況下,就需要事先把delimiter換成其它符號(hào),如//或$$。
- 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;//
這樣只有當(dāng)//出現(xiàn)之后,mysql解釋器才會(huì)執(zhí)行這段語句
以上就是MySql中delimiter起到的作用介紹。
【編輯推薦】