<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ## 7.7 函數數總結 >[danger]1 函數可以在什么位置寫呢? 一般在select后面 where 后面以及having后面都肯能出現函數,但是并不是所有函數都能在這幾個位置出現,比如聚合函數一般只能在 select 或者having后面出現! >[danger]2 如何自定義函數? ~~~ -- 最簡單的僅有一條sql的函數 create function myselect2() returns int return 666; ~~~ ~~~ create function myselect3() returns int begin declare c int; select id from class where cname="python" into c; return c; end; ~~~ ~~~ -- 帶傳參的函數 create function myselect5(name varchar(15)) returns int begin declare c int; select id from class where cname=name into c; return c; end; ~~~ ``` // 調用函數 select myselect2(); select myselect3(); select myselect5("python"); ``` >[danger]3 關于函數手冊查詢? [https://www.runoob.com/mysql/mysql-functions.html](https://www.runoob.com/mysql/mysql-functions.html) >[danger] 4正則表達式的使用? 查找name字段中以'st'為開頭的所有數據: 1.mysql>SELECT name FROM person_tbl WHERE name REGEXP'^st'; 栗子:查找name字段中以'ok'為結尾的所有數據: 2.mysql>SELECT name FROM person_tbl WHERE name REGEXP'ok$'; 栗子:查找name字段中包含'mar'字符串的所有數據: 3.mysql>SELECT name FROM person_tbl WHERE name REGEXP'mar'; 查找name字段中以元音字符開頭或以'ok'字符串結尾的所有數據: mysql>SELECT name FROM person_tbl WHERE name REGEXP'^\[aeiou\]|ok$'; >[danger]5 sql語句的執行原理? ## **第一步:應用程序把查詢SQL語句發送給服務器端執行。** 我們在數據庫層執行SQL語句時,應用程序會連接到相應的數據庫服務器,把SQL語句發送給服務器處理。 ## **第二步:查詢緩存** 服務器在解析一個查詢語句之前,如果查詢緩存是打開的(MySQL默認打開,可以使用have_query_cache查看),在接收到查詢請求后,并不會直接去數據庫查詢,而是在數據庫的查詢緩存中找是否有相對應的查詢數據(某條給定的查詢語句在第一次執行時,服務器會緩存這條查詢語句和他返回的結果。),如果存在,那么在返回查詢結果之前,MySQL會檢查一次用戶權限。這仍然無需解析查詢SQL語句,因為查詢緩存中已經存放了當前查詢需要訪問的表信息。如果權限沒有問題,則直接從緩存中拿到結果并返回給客戶端。這種情況下,查詢不會被解析,不用生成執行計劃,不會被執行。而其中是否命中緩存是將此查詢語句和緩存中的查詢語句進行比對,如果完全相同,那就認為它們是相同的,就認為命中緩存了。 ## **第三步:查詢優化處理,生成執行計劃** 接下來服務器會將一個SQL轉換成一個執行計劃,而這個階段包括:解析SQL、預處理、優化SQL執行計劃,其中任何一個階段出錯都會導致查詢進行不下去。 1 解析SQL:Mysql通過將SQL語句進行解析,并生成一棵對應的解析樹。MySQL解析器將使用MySQL語法規則驗證和解析查詢,如將驗證是否使用錯誤的關鍵字,或者關鍵字的順序是否正確。 2 預處理:預處理器根據一些Mysql規則進一步檢查解析樹是否合法,如數據表和數據列是否存在,解析列名和別名,是否有歧義。接下來預處理器會驗證用戶權限。查看用戶是否有相應的操作權限。 3 優化SQL:優化器將SQL語句轉化成執行計劃,一條查詢可以有很多種執行方式,最后都返回相同的結果,最后找到其中最好的執行計劃(Mysql使用基于成本的優化器,它將嘗試預測一個查詢使用某種執行計劃的成本,選擇其中成本最小的一個)。 ## 第四步:Mysql根據相應的執行計劃完成整個查詢(此處的執行計劃是一個數據結構) Mysql根據執行計劃給出的執行計劃給出的指令逐步執行。在此過程中,有大量的操作需要通過調用存儲引擎實現的接口完成,這些接口即為“handler API”接口。查詢中的每一個表由一個handler的實例表示。(實際上,在優化階段Mysql就為每一個表創建了一個handelr實例,優化器可以根據這些實例的接口獲取表的相關信息,如表的所有列名、索引統計信息等) ## 第五步:將查詢結果返回客戶端
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看