青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴(yán)以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

MySql中delimiter的作用是什么?

轉(zhuǎn)載自:http://www.cnblogs.com/rootq/archive/2009/05/27/1490523.html

這個命令與存儲過程沒什么關(guān)系吧。
其實就是告訴mysql解釋器,該段命令是否已經(jīng)結(jié)束了,mysql是否可以執(zhí)行了。
默認(rèn)情況下,delimiter是分號;。在命令行客戶端中,如果有一行命令以分號結(jié)束,
那么回車后,mysql將會執(zhí)行該命令。如輸入下面的語句
mysql> select * from test_table;
然后回車,那么MySQL將立即執(zhí)行該語句。

但有時候,不希望MySQL這么做。在為可能輸入較多的語句,且語句中包含有分號。
如試圖在命令行客戶端中輸入如下語句
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í)行整段語句。
因為mysql一遇到分號,它就要自動執(zhí)行。
即,在語句RETURN '';時,mysql解釋器就要執(zhí)行了。
這種情況下,就需要事先把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;//

這樣只有當(dāng)//出現(xiàn)之后,mysql解釋器才會執(zhí)行這段語句

 

例子:

mysql> delimiter // 

mysql> CREATE PROCEDURE simpleproc (OUT param1 INT) 
-> BEGIN 
-> SELECT COUNT(*) INTO param1 FROM t; 
-> END; 
-> // 
Query OK, 0 rows affected (0.00 sec) 

mysql> delimiter ; 

mysql> CALL simpleproc(@a); 
Query OK, 0 rows affected (0.00 sec) 

mysql> SELECT @a; 
+------+ 
| @a | 
+------+ 
| 3 | 
+------+ 
1 row in set (0.00 sec) 

 

 

 

 

本文代碼在 MySQL 5.0.41-community-nt 下運行通過。

編寫了個統(tǒng)計網(wǎng)站訪問情況(user agent)的 MySQL 存儲過程。就是下面的這段 SQL 代碼。

drop procedure if exists pr_stat_agent;
-- call pr_stat_agent ('2008-07-17', '2008-07-18')
create procedure pr_stat_agent
(
pi_date_from date
,pi_date_to date
)
begin
-- check input
if (pi_date_from is null) then
set pi_date_from = current_date();
end if;
if (pi_date_to is null) then
set pi_date_to = pi_date_from;
end if;
set pi_date_to = date_add(pi_date_from, interval 1 day);
-- stat
select agent, count(*) as cnt
from apache_log
where request_time >= pi_date_from
and request_time < pi_date_to
group by agent
order by cnt desc;
end;

我在 EMS SQL Manager 2005 for MySQL 這個 MySQL 圖形客戶端下可以順利運行。但是在 SQLyog MySQL GUI v5.02 這個客戶端就會出錯。最后找到原因是沒有設(shè)置好 delimiter 的問題。默認(rèn)情況下,delimiter “;” 用于向 MySQL 提交查詢語句。在存儲過程中每個 SQL 語句的結(jié)尾都有個 “;”,如果這時候,每逢 “;” 就向 MySQL 提交的話,當(dāng)然會出問題了。于是更改 MySQL 的 delimiter,上面 MySQL 存儲過程就編程這樣子了:

delimiter //; -- 改變 MySQL delimiter 為:“//”
drop procedure if exists pr_stat_agent //
-- call pr_stat_agent ('2008-07-17', '2008-07-18')
create procedure pr_stat_agent
(
pi_date_from date
,pi_date_to date
)
begin
-- check input
if (pi_date_from is null) then
set pi_date_from = current_date();
end if;
if (pi_date_to is null) then
set pi_date_to = pi_date_from;
end if;
set pi_date_to = date_add(pi_date_from, interval 1 day);
-- stat
select agent, count(*) as cnt
from apache_log
where request_time >= pi_date_from
and request_time < pi_date_to
group by agent
order by cnt desc;
end; //
delimiter ; // -- 改回默認(rèn)的 MySQL delimiter:“;”

當(dāng)然,MySQL delimiter 符號是可以自由設(shè)定的,你可以用 “/” 或者“$$” 等。但是 MySQL 存儲過程中比較常見的用法是 “//” 和 “$$”。上面的這段在 SQLyog 中的代碼搬到 MySQL 命令客戶端(MySQL Command Line Client)卻不能執(zhí)行。

mysql> delimiter //; -- 改變 MySQL delimiter 為:“//”
mysql>
mysql> drop procedure if exists pr_stat_agent //
->
-> -- call pr_stat_agent ('2008-07-17', '2008-07-18')
->
-> create procedure pr_stat_agent
-> (
-> pi_date_from date
-> ,pi_date_to date
-> )
-> begin
-> -- check input
-> if (pi_date_from is null) then
-> set pi_date_from = current_date();
-> end if;
->
-> if (pi_date_to is null) then
-> set pi_date_to = pi_date_from;
-> end if;
->
-> set pi_date_to = date_add(pi_date_from, interval 1 day);
->
-> -- stat
-> select agent, count(*) as cnt
-> from apache_log
-> where request_time >= pi_date_from
-> and request_time < pi_date_to
-> group by agent
-> order by cnt desc;
-> end; //
->
-> delimiter ; // -- 改回默認(rèn)的 MySQL delimiter:“;”
-> //
-> //
-> //
-> ;
-> ;
->

真是奇怪了!最后終于發(fā)現(xiàn)問題了,在 MySQL 命令行下運行 “delimiter //; ” 則 MySQL 的 delimiter 實際上是 “//;”,而不是我們所預(yù)想的 “//”。其實只要運行指令 “delimiter //” 就 OK 了。

mysql> delimiter // -- 末尾不要符號 “;”
mysql>
mysql> drop procedure if exists pr_stat_agent //
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> -- call pr_stat_agent ('2008-07-17', '2008-07-18')
mysql>
mysql> create procedure pr_stat_agent
-> (
-> pi_date_from date
-> ,pi_date_to date
-> )
-> begin
-> -- check input
-> if (pi_date_from is null) then
-> set pi_date_from = current_date();
-> end if;
->
-> if (pi_date_to is null) then
-> set pi_date_to = pi_date_from;
-> end if;
->
-> set pi_date_to = date_add(pi_date_from, interval 1 day);
->
-> -- stat
-> select agent, count(*) as cnt
-> from apache_log
-> where request_time >= pi_date_from
-> and request_time < pi_date_to
-> group by agent
-> order by cnt desc;
-> end; //
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> delimiter ; -- 末尾不要符號 “//”
mysql>

順帶一提的是,我們可以在 MySQL 數(shù)據(jù)庫中執(zhí)行在文件中的 SQL 代碼。例如,我把上面存儲過程的代碼放在文件 d:\pr_stat_agent.sql 中??梢赃\行下面的代碼建立存儲過程。

mysql> source d:\pr_stat_agent.sql
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

source 指令的縮寫形式是:“\.”

mysql> \. d:\pr_stat_agent.sql
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

最后,可見 MySQL 的客戶端工具在有些地方是各自為政,各有各的一套。

posted on 2014-06-13 11:51 楊粼波 閱讀(675) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲制服丝袜在线| 99日韩精品| 欧美成人免费观看| 久久综合网色—综合色88| 欧美在线视频二区| 久久精品1区| 免费观看亚洲视频大全| 欧美大片国产精品| 欧美日韩一区二区在线观看| 国产精品青草久久| 国产中文一区| 亚洲精品中文字幕有码专区| 亚洲淫片在线视频| 久久久午夜电影| 亚洲国产人成综合网站| 亚洲第一区中文99精品| 亚洲精品一区二区在线观看| 亚洲免费影视第一页| 欧美一区二区三区四区视频| 欧美成人国产一区二区| 国产精品久久久久免费a∨大胸| 国产欧美日韩一区二区三区在线 | 亚洲麻豆av| 校园激情久久| 欧美精品一区在线播放| 国产欧美一区二区精品婷婷| 国产精品久久久久免费a∨| 亚洲欧美中文字幕| 理论片一区二区在线| 国产精品啊啊啊| 在线精品国产成人综合| 国产精品99久久久久久白浆小说| 欧美一区午夜视频在线观看| 亚洲国产99精品国自产| 亚洲影院色在线观看免费| 久久综合网色—综合色88| 国产精品视频yy9299一区| 亚洲欧洲在线免费| 美女国产精品| 欧美一区二区三区视频免费| 欧美午夜不卡在线观看免费 | 久久riav二区三区| 亚洲欧洲中文日韩久久av乱码| 性久久久久久| 国产精品mm| 一本一本a久久| 欧美黄色一区| 久久嫩草精品久久久精品一| 国产麻豆综合| 午夜精品久久久久久久久久久久久 | 香蕉av777xxx色综合一区| 欧美视频中文字幕在线| 亚洲成在人线av| 久久亚洲色图| 欧美在线观看一区| 国产精品久久福利| 亚洲一区精品电影| 亚洲天堂偷拍| 国产精品色一区二区三区| 亚洲男人影院| 一区二区三区免费在线观看| 欧美日韩精品高清| 99精品视频免费观看| 亚洲激情视频在线播放| 欧美成人精品不卡视频在线观看| 亚洲国产精品第一区二区| 免费观看一区| 欧美精品成人91久久久久久久| 亚洲久色影视| 亚洲精品一区二区在线观看| 欧美视频免费| 欧美在线影院在线视频| 欧美主播一区二区三区| 永久555www成人免费| 亚洲电影在线观看| 欧美日韩亚洲91| 欧美有码在线视频| 久久久久免费观看| 卡一卡二国产精品| 免费看精品久久片| 久久夜色精品国产亚洲aⅴ| 亚洲国产va精品久久久不卡综合| 亚洲高清不卡av| 欧美日韩在线观看一区二区| 亚洲在线一区二区三区| 午夜精品福利一区二区蜜股av| 国产手机视频精品| 欧美多人爱爱视频网站| 欧美日韩免费高清一区色橹橹| 亚洲一级二级在线| 久久国产精品网站| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 久久久久这里只有精品| 亚洲美女免费精品视频在线观看| 日韩一级大片| 国产主播一区二区三区四区| 亚洲成人在线视频播放 | 久久久久国色av免费看影院| 久久亚洲春色中文字幕| 在线视频一区二区| 欧美一区二区三区四区视频| 亚洲免费黄色| 欧美影院在线| 一区二区三区四区五区视频| 久久高清国产| 亚洲一区图片| 欧美黄色成人网| 久久久久国产精品厨房| 欧美精品尤物在线| 久久这里有精品15一区二区三区 | 国产精品a久久久久| 久久夜色精品| 国产精品视频在线观看| 亚洲国产天堂久久综合网| 国产亚洲视频在线| 在线亚洲免费| 亚洲精品在线观看视频| 久久精品在线视频| 午夜一区在线| 国产精品超碰97尤物18| 亚洲日本理论电影| 亚洲国产91精品在线观看| 亚洲欧美一区二区三区极速播放| 亚洲精品一级| 欧美国产日韩一二三区| 免费在线国产精品| 国内成+人亚洲| 欧美一区二区三区另类| 亚洲女人小视频在线观看| 欧美精品在线一区二区| 欧美激情视频网站| 亚洲高清免费视频| 久久天堂精品| 欧美不卡视频| 亚洲黄色影院| 一本色道久久88精品综合| 一区二区毛片| 欧美精品首页| 亚洲精华国产欧美| 最新国产成人在线观看| 久热精品视频| 欧美肥婆在线| 亚洲黄网站黄| 欧美精品免费在线| 亚洲人成在线播放网站岛国| 亚洲三级电影在线观看| 欧美寡妇偷汉性猛交| 亚洲激情综合| 亚洲午夜精品一区二区| 国产精品久久久久高潮| 亚洲欧美在线观看| 久久综合久色欧美综合狠狠| 激情亚洲一区二区三区四区| 久久久伊人欧美| 亚洲国产人成综合网站| 一本一道久久综合狠狠老精东影业| 欧美日韩一视频区二区| 亚洲综合色激情五月| 另类欧美日韩国产在线| 亚洲精品欧美日韩| 欧美午夜免费电影| 久久精品国产在热久久| 欧美夫妇交换俱乐部在线观看| 日韩午夜激情| 国产色视频一区| 欧美大片在线看| 亚洲性线免费观看视频成熟| 久久色在线观看| 一区二区日韩欧美| 国产亚洲一二三区| 欧美久久婷婷综合色| 亚洲欧美变态国产另类| 欧美顶级少妇做爰| 性做久久久久久| 亚洲国产老妈| 国产欧美日韩中文字幕在线| 免费在线观看日韩欧美| 亚洲在线观看| 91久久精品视频| 久久一区精品| 亚洲欧美综合一区| 亚洲人成高清| 国产欧美日本在线| 欧美精品久久久久久久久老牛影院| 午夜精品免费| 亚洲另类视频| 欧美粗暴jizz性欧美20| 欧美一级电影久久| 亚洲少妇诱惑| 91久久精品国产91久久性色tv| 国产精品亚洲第一区在线暖暖韩国| 欧美福利一区二区三区| 久久岛国电影| 午夜精品一区二区三区在线播放 | 亚洲高清不卡一区| 国产亚洲精品成人av久久ww| 欧美日韩国产探花| 农夫在线精品视频免费观看| 久久er99精品| 亚洲欧美国产精品va在线观看|