MySQL學習——操作自定義函數

来源:https://www.cnblogs.com/shamao/archive/2019/10/08/11636091.html
-Advertisement-
Play Games

MySQL學習——操作自定義函數 摘要:本文主要學習了使用DDL語句操作自定義函數的方法。 瞭解自定義函數 是什麼 自定義函數是一種與存儲過程十分相似的過程式資料庫對象。它與存儲過程一樣,都是由SQL語句和過程式語句組成的代碼片段,並且可以被應用程式和其他SQL語句調用。 自定義函數與存儲過程的區別 ...


MySQL學習——操作自定義函數

摘要:本文主要學習了使用DDL語句操作自定義函數的方法。

瞭解自定義函數

是什麼

自定義函數是一種與存儲過程十分相似的過程式資料庫對象。它與存儲過程一樣,都是由SQL語句和過程式語句組成的代碼片段,並且可以被應用程式和其他SQL語句調用。

自定義函數與存儲過程的區別

自定義函數不能擁有輸出參數,這是因為自定義函數自身就是輸出參數;而存儲過程可以擁有輸出參數。

自定義函數中必須包含一條return語句,而這條特殊的SQL語句不允許包含於存儲過程中。

可以直接對自定義函數進行調用而不需要使用call語句,而對存儲過程的調用需要使用call語句。

創建自定義函數

語法

1 create function 函數名([參數])
2 returns 類型
3 函數主體

說明

1)函數名

指定自定義函數的名稱。註意,自定義函數不能與存儲過程具有相同的名稱。

2)參數

用於指定自定義函數的參數。這裡的參數只有名稱和類型,不能指定關鍵字in、out和inout。

3)類型

用於聲明自定義函數返回值的數據類型。

4)函數主體

自定義函數的主體部分,也稱函數體。所有在存儲過程中使用的SQL語句在自定義函數中同樣適用,包括前面所介紹的局部變數、set語句、流程式控制制語句、游標等。

除此之外,自定義函數體還必須包含一個 return 返回值 語句,用於指定自定義函數的返回值。在 return 返回值 語句中包含select語句時,select語句的返回結果只能是一行且只能有一列值。

實例

創建不帶參數的自定義函數:

1 mysql> create function showTopGrade()
2     -> returns int(10)
3     -> return (select max(grade) from score);
4 Query OK, 0 rows affected (0.00 sec)
5 
6 mysql> 

創建帶有參數的自定義函數:

1 mysql> create function getStuGrade(stu varchar(45))
2     -> returns int(10)
3     -> return (select max(grade) from score where student = stu);
4 Query OK, 0 rows affected (0.00 sec)
5 
6 mysql> 

使用自定義函數

語法

1 select 自定義函數名稱([參數]);

實例

1 mysql> select showTopGrade();
2 +----------------+
3 | showTopGrade() |
4 +----------------+
5 |             95 |
6 +----------------+
7 1 row in set (0.00 sec)
8 
9 mysql> 

查看自定義函數

查看所有自定義函數

 1 mysql> mysql> show function status;
 2 +------+--------------+----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
 3 | Db   | Name         | Type     | Definer        | Modified            | Created             | Security_type | Comment | character_set_client | collation_connection | Database Collation |
 4 +------+--------------+----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
 5 | demo | getGrade     | FUNCTION | root@localhost | 2019-09-07 18:40:17 | 2019-09-07 18:40:17 | DEFINER       |         | utf8                 | utf8_general_ci      | gb2312_chinese_ci  |
 6 | demo | getStuGrade  | FUNCTION | root@localhost | 2019-09-10 00:25:54 | 2019-09-10 00:25:54 | DEFINER       |         | utf8                 | utf8_general_ci      | gb2312_chinese_ci  |
 7 | demo | showTopGrade | FUNCTION | root@localhost | 2019-09-10 00:19:40 | 2019-09-10 00:19:40 | DEFINER       |         | utf8                 | utf8_general_ci      | gb2312_chinese_ci  |
 8 +------+--------------+----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
 9 3 rows in set (0.00 sec)
10 
11 mysql> 

查看自定義函數的創建語句

1 mysql> mysql> show create function getGrade;
2 +----------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
3 | Function | sql_mode                                   | Create Function                                                                                                        | character_set_client | collation_connection | Database Collation |
4 +----------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
5 | getGrade | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | CREATE DEFINER=`root`@`localhost` FUNCTION `getGrade`() RETURNS int(10) return (select grade from score where id = 12) | utf8                 | utf8_general_ci      | gb2312_chinese_ci  |
6 +----------+--------------------------------------------+------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
7 1 row in set (0.00 sec)
8 
9 mysql> 

修改自定義函數

可以通過先刪除自定義函數,然後重新創建自定義函數的方法實現修改的操作。

刪除自定義函數

語法

1 drop function 自定義函數名稱

實例

1 mysql> drop function getGrade;
2 Query OK, 0 rows affected (0.00 sec)
3 
4 mysql> 

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本篇主要寫一些 腳本條件語句的使用。 條件測試 test 條件表達式 [ 條件表達式 ] 文件測試 :測試是否為目錄(Directory)。 :測試文件或目錄是否存在(Exist)。 :測試是否為文件(File)。 :測試當前用戶是否有許可權讀取(Read)。 :測試當前用戶是否有許可權寫入(Write ...
  • 本篇主要寫一些 腳本條件語句的使用。 條件測試 test 條件表達式 [ 條件表達式 ] 文件測試 :測試是否為目錄(Directory)。 :測試文件或目錄是否存在(Exist)。 :測試是否為文件(File)。 :測試當前用戶是否有許可權讀取(Read)。 :測試當前用戶是否有許可權寫入(Write ...
  • 本篇主要寫一些 腳本的基礎知識,編程規範。 第一個shell腳本 執行腳本 source . sh ./ 符號使用 管道符 和 awk 重定向輸出 重定向輸入 [root@localhost ~] rm test.txt error.log [root@localhost ~] cat error. ...
  • 1.什麼是資料庫管理系統? 資料庫管理系統是由相互關聯的數據和管理這些數據的程式組成。 2.應用 資料庫在生產生活各行各業有著廣泛的應用: (1)銀行金融(2)互聯網應用數據存儲等等等等。資料庫無所不在,無處不在 3.資料庫管理系統DBMS出現前,怎樣用來管理數據? 使用文件處理系統。主要的弊端:( ...
  • MapReduce詳細工作流程之Map階段 如上圖所示 1. 首先有一個200M的待處理文件 2. 切片:在客戶端提交之前,根據參數配置,進行任務規劃,將文件按128M每塊進行切片 3. 提交:提交可以提交到本地工作環境或者Yarn工作環境,本地只需要提交切片信息和xml配置文件,Yarn環境還需要 ...
  • 1.創建資料庫 CREATE DATABASE 資料庫名 2.刪除資料庫 DROP DATABASE 資料庫名 3.選擇資料庫 USE 資料庫名 4.數據類型 (1)數值類型 (2)日期和時間類型 (3)字元串類型 5.創建數據表 CREATE TABLE table_name (column_na ...
  • 轉自: http://www.maomao365.com/?p=9775 摘要: 下文簡述sqlserver資料庫中 text image類型無法使用distinct的處理方法分享 實驗環境:sql server 2017 sqlserver我們常常需要對一系列值進行取distinct操作,但是當直 ...
  • 分組查詢, select 欄位名 from 表名 GROUP BY ....;(欄位部分可以指定的列有限制,1 被分組的列,2 每個分組返回一個值的表達式) 依某個欄位進行分組,可以更加容易對其進行查詢如:最大值,最小值。。。 select 欄位名 from 表名 having by ....; w ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...