<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【問答】MySQL存儲過程中的 ?? 和 // 是什么?

          共 1214字,需瀏覽 3分鐘

           ·

          2021-02-09 14:31

          在平時工作中,有時我們會編寫存儲過程。在存儲過程中我們會在網上看到一些例子,在例子中會有類似 DELIMITER ???或者 DELIMITER //?這種寫法,這種寫法看上去就比較迷惑,并且網上的介紹也模棱兩可。今天我就帶你了解一下這個用法的含義。

          其實含義很簡單,就是使用DELIMITER關鍵字告訴MySQL客戶端,你判斷一條SQL語句是否終止時不要以默認的分隔符;來解析了。用關鍵字DELIMITER 后面的那個符號來解析,比如??

          我們在MySQL客戶端寫完SQL時會以分隔符;來作為一條完整的SQL語句的終止符,比如:

          但是在存儲過程中我們會在一個存儲過程內寫很多以;結束的語句,設置變量,循環(huán),具體的多個SQL語句等都會以;結束,那么就會出現(xiàn)MySQL客戶端解析到第一個;就認為你寫的這個語句已經寫完了,它就發(fā)送這條語句給服務端執(zhí)行這個SQL了。顯然你還沒有寫完,此時解析就會報錯。

          比如你想寫一個包含兩個查詢SQL語句的存儲過程。

          create?procedure?selectTwoSQL()
          begin
          select?*?from?student?where?s_no?=?1;
          select?*?from?teacher?where?id?=?1;
          end;

          如果你沒有改變MySQL客戶端默認的解析語句結束符;,那么當你寫到select * from student where s_no = 1;,按下Enter回車鍵,那么它就會報錯

          原因就在于它(MySQL客戶端)把下面這段SQL當成一條完整的語句交給服務器執(zhí)行了。

          create?procedure?selectTwoSQL()
          begin
          select?*?from?student?where?s_no?=?1;

          這個肯定報錯呀。有人說我可以暫時不按Enter鍵到了最后再按,其實它最終解析的順序是一樣的。

          這次兩個報錯,是因為它把你寫的存儲過程看成三個語句來交給服務器執(zhí)行了,而只有中間的語句select * from teacher where id = 1;是正確的SQL。

          此時你只需要改變一下結束分隔符:

          當你改變分隔符為??時,MySQL客戶端會一直解析到符號??才認為你這條語句結束了。

          此時你已經成功的創(chuàng)建了一個存儲過程了。然后你可以把分隔符重新改為默認的;,然后執(zhí)行存儲過程。



          PS: 問答欄目專注于程序員平時遇到的大大小小的問題,偏實戰(zhàn),如果你平時有遇到什么問題,或者你樂于幫助別人解答問題。歡迎加我微信(QuTanBianCheng_Tao)拉你進問答社區(qū)群,加我時備注問答社區(qū)




          趣談編程

          讓天下沒有

          難懂的技術

          瀏覽 57
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  強姧伦久久久久久久 | 手机毛片网站 | 天天摸天天摸天天 | 国产乱淫AV片免费 | 人妻黄色一级 |