亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

MySQL中的分隔符

MySQL中的分隔符

GCT1015 2019-06-20 17:32:51
MySQL中的分隔符我經??吹饺藗冊谑褂梅指舴?。我試著找出什么是分隔符,它們的目的是什么。在谷歌搜索了20分鐘之后,我找不到一個能讓我滿意的答案。所以,我現在的問題是:什么是分隔符,什么時候應該使用它們?
查看完整描述

3 回答

?
互換的青春

TA貢獻1797條經驗 獲得超6個贊

默認值以外的分隔符;通常用于定義函數、存儲過程和觸發器,其中必須定義多個語句。定義不同的分隔符,如$$用于定義整個過程的結束,但在它內部,每個語句都由;..這樣,當代碼在mysql客戶端,客戶端可以知道整個過程在哪里結束,并作為一個單元執行它,而不是在內部執行單個語句。

注意,DELIMITER關鍵字是命令行的函數。mysql客戶端(和其他一些客戶端)僅限于,而不是常規的MySQL語言特性。如果您試圖將它通過編程語言API傳遞給MySQL,它將無法工作。其他一些客戶端,如PHPMyAdmin,也有其他方法來指定非默認的分隔符。

例子:

DELIMITER $$/* This is a complete statement, not part of the procedure, so use the custom delimiter $$ */DROP PROCEDURE my_procedure$
$/* Now start the procedure code */CREATE PROCEDURE my_procedure ()BEGIN    
  /* Inside the procedure, individual statements terminate with ; */
  CREATE TABLE tablea (
     col1 INT,
     col2 INT  );

  INSERT INTO tablea    SELECT * FROM table1;

  CREATE TABLE tableb (
     col1 INT,
     col2 INT  );
  INSERT INTO tableb    SELECT * FROM table2;/* whole procedure ends with the custom delimiter */END$
  $/* Finally, reset the delimiter to the default ; */DELIMITER ;

試圖使用DELIMITER對于不支持的客戶端,它將導致將其發送到服務器,服務器將報告語法錯誤。例如,使用PHP和MySQLi:

$mysqli = new mysqli('localhost', 'user', 'pass', 'test');$result = $mysqli->query('DELIMITER $$');echo $mysqli->error;

錯誤有:

SQL語法出現錯誤;請檢查與MySQL服務器版本相對應的手冊,以獲得在第1行“劃界器$”附近使用的正確語法。


查看完整回答
反對 回復 2019-06-20
?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

分隔符語句將標準分隔符(分號(;)更改為另一個分隔符。分隔符從分號(;)改為雙斜杠/。

為什么我們要更改分隔符?

因為我們希望將存儲過程、自定義函數等作為一個整體傳遞給服務器,而不是讓MySQL工具一次解釋每個語句。


查看完整回答
反對 回復 2019-06-20
?
瀟湘沐

TA貢獻1816條經驗 獲得超6個贊

創建具有BEGIN...END塊中的語句以分號結束。(;)..但CREATE PROCEDURE語句還需要一個終止符。因此,程序正文中的分號是否終止就變得模棱兩可了。CREATE PROCEDURE,或終止過程正文中的一條語句。

解決歧義的方法是聲明一個不同的字符串(不能出現在過程主體中),MySQL客戶端將其識別為CREATE PROCEDURE聲明。


查看完整回答
反對 回復 2019-06-20
  • 3 回答
  • 0 關注
  • 1929 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號