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

首頁(yè) > 數(shù)據(jù)庫(kù) > MySQL > 正文

MySQL如何自定義變量和語句結(jié)束分隔符

2024-07-24 12:33:38
字體:
供稿:網(wǎng)友
  今天小編給大家分享一下MySQL怎么自定義變量和語句結(jié)束分隔符的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
  
  存儲(chǔ)程序
  有時(shí)候?yàn)榱送瓿梢粋€(gè)常用的功能需要執(zhí)行許多條語句,每次都在客戶端里一條一條的去輸入這么多語句是很煩的。設(shè)計(jì)MySQL的大叔非常貼心的給我們提供了一種稱之為存儲(chǔ)程序的東東,這個(gè)所謂的存儲(chǔ)程序可以封裝一些語句,然后給用戶提供一種簡(jiǎn)單的方式來調(diào)用這個(gè)存儲(chǔ)程序,從而間接地執(zhí)行這些語句。根據(jù)調(diào)用方式的不同,我們可以把存儲(chǔ)程序分為存儲(chǔ)例程、觸發(fā)器和事件這幾種類型。其中,存儲(chǔ)例程又可以被細(xì)分為存儲(chǔ)函數(shù)和存儲(chǔ)過程。我們畫個(gè)圖表示一下:
  
  別看出現(xiàn)了很多陌生的概念,別怕,我們后邊會(huì)各個(gè)擊破的。不過在正式介紹存儲(chǔ)程序之前,我們需要先了解一下MySQL中的自定義變量和語句結(jié)束分隔符的概念。
 
  自定義變量簡(jiǎn)介
  生活中我們經(jīng)常會(huì)遇到一些固定不變的值,比如數(shù)字100、字符串'你好呀',我們把這些值固定不變的東東稱之為常量。可是有時(shí)候?yàn)榱朔奖悖覀儠?huì)使用某一個(gè)符號(hào)來代表一個(gè)值,它代表的值是可以變化的。比方說我們規(guī)定符號(hào)a代表數(shù)字1,之后我們又可以讓符號(hào)a代表數(shù)字2,我們把這種值可以發(fā)生變化的東東稱之為變量,其中符號(hào)a就稱為這個(gè)變量的變量名。在MySQL中,我們可以通過SET語句來自定義一些我們自己的變量,比方說這樣:
 
  mysql> SET @a = 1;
  Query OK, 0 rows affected (0.00 sec)
 
  mysql>
  上邊的語句就表明我們定義了一個(gè)稱之為a的變量,并且把整數(shù)1賦值給了這個(gè)變量。不過大家需要注意一下,設(shè)計(jì)MySQL的大叔規(guī)定,在我們的自定義變量前邊必須加一個(gè)@符號(hào)(雖然有點(diǎn)兒怪,但這就是人家規(guī)定的,大家遵守就好了)。
 
  如果我們之后想查看這個(gè)變量的值的話,使用SELECT語句就好了,不過仍然需要在變量名稱前加一個(gè)@符號(hào):
 
  mysql> SELECT @a;
  +------+
  | @a   |
  +------+
  |    1 |
  +------+
  1 row in set (0.00 sec)
 
  mysql>
  同一個(gè)變量也可以存儲(chǔ)存儲(chǔ)不同類型的值,比方說我們?cè)侔岩粋€(gè)字符串值賦值給變量a:
 
  mysql> SET @a = '哈哈哈';
  Query OK, 0 rows affected (0.01 sec)
 
  mysql> SELECT @a;
  +-----------+
  | @a        |
  +-----------+
  | 哈哈哈    |
  +-----------+
  1 row in set (0.00 sec)
 
  mysql>
  除了把一個(gè)常量賦值給一個(gè)變量以外,我們還可以把一個(gè)變量賦值給另一個(gè)變量:
 
  mysql> SET @b = @a;
  Query OK, 0 rows affected (0.00 sec)
 
  mysql> select @b;
  +-----------+
  | @b        |
  +-----------+
  | 哈哈哈    |
  +-----------+
  1 row in set (0.00 sec)
 
  mysql>
  這樣變量a和b就有了相同的值'哇哈哈'!
 
  我們還可以將某個(gè)查詢的結(jié)果賦值給一個(gè)變量,前提是這個(gè)查詢的結(jié)果只有一個(gè)值:
 
  mysql> SET @a = (SELECT m1 FROM t1 LIMIT 1);
  Query OK, 0 rows affected (0.00 sec)
 
  mysql>
  還可以用另一種形式的語句來將查詢的結(jié)果賦值給一個(gè)變量:
 
  mysql> SELECT n1 FROM t1 LIMIT 1 INTO @b;
  Query OK, 1 row affected (0.00 sec)
 
  mysql>
  因?yàn)檎Z句SELECT m1 FROM t1 LIMIT 1和SELECT n1 FROM t1 LIMIT 1的查詢結(jié)果都只有一個(gè)值,所以它們可以直接賦值給變量a或者b。我們查看一下這兩個(gè)變量的值:
 
  mysql> SELECT @a, @b;
  +------+------+
  | @a   | @b   |
  +------+------+
  |    1 | a    |
  +------+------+
  1 row in set (0.00 sec)
 
  mysql>
  如果我們的查詢結(jié)果是一條記錄,該記錄中有多個(gè)列的值的話,我們想把這幾個(gè)值分別賦值到不同的變量中,只能使用INTO語句了:
 
  mysql> SELECT m1, n1 FROM t1 LIMIT 1 INTO @a, @b;
  Query OK, 1 row affected (0.00 sec)
 
  mysql>
  這條查詢語句的結(jié)果集中只包含一條記錄,我們把這條記錄的m1列的值賦值到了變量a中,n1列的值賦值到了變量b中。
 
  語句結(jié)束分隔符
  在MySQL客戶端的交互界面處,當(dāng)我們完成鍵盤輸入并按下回車鍵時(shí),MySQL客戶端會(huì)檢測(cè)我們輸入的內(nèi)容中是否包含;、/g或者/G這三個(gè)符號(hào)之一,如果有的話,會(huì)把我們輸入的內(nèi)容發(fā)送到服務(wù)器。這樣一來,如果我們想一次性給服務(wù)器發(fā)送多條的話,就需要把這些語句寫到一行中,比如這樣:
 
  mysql> SELECT * FROM t1 LIMIT 1;SELECT * FROM t2 LIMIT 1;SELECT * FROM t3 LIMIT 1;
  +------+------+
  | m1   | n1   |
  +------+------+
  |    1 | a    |
  +------+------+
  1 row in set (0.00 sec)
 
  +------+------+
  | m2   | n2   |
  +------+------+
  |    2 | b    |
  +------+------+
  1 row in set (0.00 sec)
 
  +------+------+
  | m3   | n3   |
  +------+------+
  |    3 | c    |
  +------+------+
  1 row in set (0.00 sec)
 
  mysql>
  造成這一不便的原因在于,MySQL客戶端檢測(cè)輸入結(jié)束用的符號(hào)和分隔各個(gè)語句的符號(hào)是一樣的!其實(shí)我們也可以用delimiter命令來自定義MySQL的檢測(cè)語句輸入結(jié)束的符號(hào),也就是所謂的語句結(jié)束分隔符,比如這樣:
 
  mysql> delimiter $
  mysql> SELECT * FROM t1 LIMIT 1;
      -> SELECT * FROM t2 LIMIT 1;
      -> SELECT * FROM t3 LIMIT 1;
      -> $
  +------+------+
  | m1   | n1   |
  +------+------+
  |    1 | a    |
  +------+------+
  1 row in set (0.00 sec)
 
  +------+------+
  | m2   | n2   |
  +------+------+
  |    2 | b    |
  +------+------+
  1 row in set (0.00 sec)
 
  +------+------+
  | m3   | n3   |
  +------+------+
  |    3 | c    |
  +------+------+
  1 row in set (0.00 sec)
 
  mysql>
  delimiter $命令意味著修改語句結(jié)束分隔符為$,也就是說之后MySQL客戶端檢測(cè)用戶語句輸入結(jié)束的符號(hào)為$。上邊例子中我們雖然連續(xù)輸入了3個(gè)以分號(hào);結(jié)尾的查詢語句并且按了回車鍵,但是輸入的內(nèi)容并沒有被提交,直到敲下$符號(hào)并回車,MySQL客戶端才會(huì)將我們輸入的內(nèi)容提交到服務(wù)器,此時(shí)我們輸入的內(nèi)容里已經(jīng)包含了3個(gè)獨(dú)立的查詢語句了,所以返回了3個(gè)結(jié)果集。
 
  我們也可以將語句結(jié)束分隔符重新定義為$以外的其他包含單個(gè)或多個(gè)字符的字符串,比方說這樣:
 
  mysql> delimiter EOF
  mysql> SELECT * FROM t1 LIMIT 1;
      -> SELECT * FROM t2 LIMIT 1;
      -> SELECT * FROM t3 LIMIT 1;
      -> EOF
  +------+------+
  | m1   | n1   |
  +------+------+
  |    1 | a    |
  +------+------+
  1 row in set (0.00 sec)
 
  +------+------+
  | m2   | n2   |
  +------+------+
  |    2 | b    |
  +------+------+
  1 row in set (0.00 sec)
 
  +------+------+
  | m3   | n3   |
  +------+------+
  |    3 | c    |
  +------+------+
  1 row in set (0.00 sec)
 
  mysql>
  我們這里采用了EOF作為MySQL客戶端檢測(cè)輸入結(jié)束的符號(hào),是不是很easy啊!當(dāng)然,這個(gè)只是為了方便我們一次性輸入多個(gè)語句,在輸入完成之后最好還是改回我們常用的分號(hào);吧:
 
  mysql> delimiter ;
  小貼士: 我們應(yīng)該避免使用反斜杠(/)字符作為語句結(jié)束分隔符,因?yàn)檫@是MySQL的轉(zhuǎn)義字符。
 
  以上就是“MySQL怎么自定義變量和語句結(jié)束分隔符”這篇文章的所有內(nèi)容,感謝各位的閱讀!

(編輯:武林網(wǎng))

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 青神县| 黎平县| 承德县| 沧州市| 台江县| 卓尼县| 增城市| 玉林市| 塔城市| 中阳县| 醴陵市| 和顺县| 临夏市| 海晏县| 晴隆县| 永兴县| 即墨市| 东平县| 乌拉特后旗| 玛多县| 谢通门县| 湘阴县| 花莲市| 石楼县| 通河县| 聊城市| 陆河县| 成安县| 友谊县| 怀集县| 宁明县| 满城县| 西和县| 长沙县| 绥滨县| 浙江省| 宜章县| 鱼台县| 鄂州市| 成安县| 定襄县|