1. 程式人生 > >MySQL知識(十五)——儲存過程的呼叫、檢視、修改和刪除

MySQL知識(十五)——儲存過程的呼叫、檢視、修改和刪除

2 呼叫儲存過程

  儲存過程必須使用CALL語句呼叫,並且儲存過程和資料庫相關,如果要執行其他資料庫中的儲存過程,需要指定資料庫名稱,例如CALL dbname.procname。儲存函式的呼叫與MySQL中預定義的函式的呼叫方式相同。
  呼叫儲存過程示例

mysql> DELIMITER //
mysql> CREATE PROCEDURE CountProc(IN sid INT,OUT num INT)
    -> BEGIN
    -> SELECT COUNT(*) INTO num FROM fruits WHERE s_id=sid;
    -> END
// Query OK, 0 rows affected mysql> DELIMITER ;
mysql> CALL CountProc(101,@num); Query OK, 1 row affected mysql> SELECT @num; +------+ | @num | +------+ | 3 | +------+ 1 row in set

3 檢視儲存過程

3.1 SHOW STATUS檢視狀態

SHOW [PROCEDURE|FUNCTION] STATUS [LIKE 'pattern']

例如:

mysql> SHOW
PROCEDURE STATUS LIKE 'C%'\G;
*************************** 1. row *************************** Db: test Name: CountProc Type: PROCEDURE Definer: [email protected] Modified: 2016-02-27 11:06:11 Created: 2016-02-27 11:06:11 Security_type: DEFINER Comment: character_set_client: utf8 collation_connection: utf8_general_ci Database Collation: latin1_swedish_ci 1 row in set
(0.01 sec)

3.2 SHOW CREATE檢視定義

SHOW CREATE {PROCEDURE|FUNCTION} sp_name

示例:

mysql> SHOW CREATE PROCEDURE CountProc \G;
*************************** 1. row ***************************
           Procedure: CountProc
            sql_mode: NO_ENGINE_SUBSTITUTION
    Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `CountProc`(IN sid INT,OUT num INT)
BEGIN

SELECT COUNT(*) INTO num FROM fruits WHERE s_id=sid;

END
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)

3.3 從表information.schema.Routines檢視資訊

示例:

mysql> SELECT * FROM information_schema.Routines
    -> WHERE ROUTINE_NAME='CountProc'  AND  ROUTINE_TYPE = 'PROCEDURE' \G
*************************** 1. row ***************************
           SPECIFIC_NAME: CountProc
         ROUTINE_CATALOG: def
          ROUTINE_SCHEMA: test
            ROUTINE_NAME: CountProc
            ROUTINE_TYPE: PROCEDURE
               DATA_TYPE:
CHARACTER_MAXIMUM_LENGTH: NULL
  CHARACTER_OCTET_LENGTH: NULL
       NUMERIC_PRECISION: NULL
           NUMERIC_SCALE: NULL
      DATETIME_PRECISION: NULL
      CHARACTER_SET_NAME: NULL
          COLLATION_NAME: NULL
          DTD_IDENTIFIER: NULL
            ROUTINE_BODY: SQL
      ROUTINE_DEFINITION: BEGIN

SELECT COUNT(*) INTO num FROM fruits WHERE s_id=sid;

END
           EXTERNAL_NAME: NULL
       EXTERNAL_LANGUAGE: NULL
         PARAMETER_STYLE: SQL
        IS_DETERMINISTIC: NO
         SQL_DATA_ACCESS: CONTAINS SQL
                SQL_PATH: NULL
           SECURITY_TYPE: DEFINER
                 CREATED: 2016-02-27 11:06:11
            LAST_ALTERED: 2016-02-27 11:06:11
                SQL_MODE: NO_ENGINE_SUBSTITUTION
         ROUTINE_COMMENT:
                 DEFINER: [email protected]
    CHARACTER_SET_CLIENT: utf8
    COLLATION_CONNECTION: utf8_general_ci
      DATABASE_COLLATION: latin1_swedish_ci
1 row in set (0.01 sec)

4 修改儲存過程

  使用ALTER語句可以修改儲存過程或函式的特性,只能修改特性,如果想修改過程體只能刪除儲存過程再重新建立。

ALTER {PROCEDURE|FUNCTION} sp_name [characteriss]

例如,修改儲存過程CountProc的定義,將讀寫許可權改為MODIFIES SQL DATA,並指定呼叫者可以執行:

mysql> ALTER  PROCEDURE  CountProc  
MODIFIES SQL DATA
SQL SECURITY INVOKER ; 
Query OK, 0 rows affected

mysql> SELECT SPECIFIC_NAME,SQL_DATA_ACCESS,SECURITY_TYPE
    -> FROM information_schema.Routines
    -> WHERE ROUTINE_NAME='CountProc' AND ROUTINE_TYPE='PROCEDURE';
+---------------+-------------------+---------------+
| SPECIFIC_NAME | SQL_DATA_ACCESS   | SECURITY_TYPE |
+---------------+-------------------+---------------+
| CountProc     | MODIFIES SQL DATA | INVOKER       |
+---------------+-------------------+---------------+
1 row in set

5 刪除儲存過程

DROP {PROCEDURE|FUNCTION} [IF EXISTS] sp_name

示例:

mysql> DROP PROCEDURE CountProc;
Query OK, 0 rows affected

6 其他

為什麼需要儲存過程

有人說,不需要把複雜過程封裝成MySQL儲存過程,用程式(C++/JAVA)也能實現複雜邏輯。如果用程式呼叫API執行,其實效率相對較慢,原因在於你的應用程式要通過引擎把MySQL語句交付給MySQL引擎來執行,那就不如直接讓MySQL負責它最精通最能夠完成的工作,所以可以在開發當中可以將某些常用的操作封裝成儲存過程。

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

這裡寫圖片描述

知識回顧

這裡寫圖片描述

相關推薦

MySQL知識——儲存過程呼叫檢視修改刪除

2 呼叫儲存過程   儲存過程必須使用CALL語句呼叫,並且儲存過程和資料庫相關,如果要執行其他資料庫中的儲存過程,需要指定資料庫名稱,例如CALL dbname.procname。儲存函式的呼叫與MySQL中預定義的函式的呼叫方式相同。   呼叫儲存過程示

c++11-17 模板核心知識—— 解析模板之依賴型型別名稱與typename Dependent Names of Types

- [模板名稱的問題及解決](#模板名稱的問題及解決) - [typename規則](#typename規則) - [C++20 typename](#c20-typename) 上篇文章[c++11-17 模板核心知識(十四)—— 解析模板之依賴型模板名稱 Dependent Names of Templ

Android項目實戰:自定義不可滑動的ListViewGridView

con app lis androi color max XP xtend exp 原文:Android項目實戰(十五):自定義不可滑動的ListView和GridView不可滑動的ListView (RecyclweView類似) public class NoSc

MySql必知必會實戰練習儲存過程

1. 為什麼使用儲存過程? (1) 通過把處理封裝在容易使用的單元中,簡化複雜操作 (2) 為了保證資料的完整性,不要求反覆建立一系列的處理操作,所有開發人員和應用程式都使用同一(試驗和測試)儲存過程,則所使用的程式碼否的相同的,這一點的延申就是為了防止錯誤,保證資料的一致性 (3)提高效能,因為使用儲

Java學習總結——MySQL數據庫—增,刪,改與部分查詢語句

MySQL數據庫 增 刪 改 查 一.MySQL簡介及在DOS下操作MySQL1.MySQL是一種中型關系型數據庫管理系統(DBMS,Database Management System)。註意:關系型數據庫是按照表的方式存儲數據的2.DOS環境下操作MySQL(1)進入MySQL環境:(

osgEarth的Rex引擎原理分析分頁瓦片載入器在更新遍歷時對請求處理過程

目標:(十四)中的34 osgEarthDrivers/engine_rex/Loader.cpp void PagerLoader::traverse(osg::NodeVisitor& nv) { for(count=0; count < _merges

Go語言基礎—— Go語言實現json資料檔案讀取與儲存

案例: package main import ( "os" "fmt" "encoding/json" "time" ) type Person2 struct { Name string Age int Sex string Hobby []string } fun

輕量ORM-SqlRepoEx 儲存過程操作

 .Net平臺下相容.NET Standard 2.0,一個實現以Lambda表示式轉轉換標準SQL語句,使用強型別操作資料的輕量級ORM工具,在減少魔法字串同時,通過靈活的Lambda表示式組合,實現業務資料查詢的多樣性。 一、儲存過程資料獲取 1、儲存過程 Crea

mysql常用操作語法~~觸發器

理解 mysql觸發器的概念,從某種程度來說,比較像java中的aop。也就是根據一定的規則,攔截某一類情況,然後在適當的時機(before/after)執行一些其他的邏輯。 個人覺得,這是個比較好理解的概念和場景。同時,在儲存過程之後再來看這個功能,那麼它

基於springboot+redis+bootstrap+mysql開發一套屬於自己的分散式springcloud雲許可權架構【許可權架構消費者完整實現

      在第十四章我們已經完成了通用業務類的編寫,因此本章我們將講解如何完整的實現我們的許可權架構的消費者的實現,首先開啟我們的rbac-consumer工程,接著開啟我們的主入口檔案RbacConsumerApplication.java加入@EnableDiscove

MYSQL學習筆記資料插入

插入完整的行 INSERT INTO Customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip

Appium+python自動化- Android 這些基礎知識,你知多少???超詳解

簡介   前邊具體操作和實戰已經講解和分享了很多了,但是一些android的一些基礎知識,你又知道多少了,你都掌握了嗎?這篇就由巨集哥給小夥伴們既是一個分享,又是對前邊的一次總結。為什麼要對這些做一個簡單的分享了,因為在現實具體工作中經常會遇到這樣的問題,這裡還是通過一個小故事來說明一下。  

OpenCV2學習筆記:利用Cmake高速查找OpenCV函數源代碼

one 生成 img log 分享 lan 學習筆記 全部 modules 在使用OpenCV時,在對一個函數的調用不是非常了解的情況下,通常希望查到該函數的官方聲明。而假設想進一步研究OpenCV的函數,則必須深入到源碼。在VS中我們能夠選中想要查

從零開始學習htmlcss樣式設置小技巧——下

right ron pos 瀏覽器 spl pan esc 插入 ccf 六、垂直居中-父元素高度確定的單行文本 1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta charset="

Hibernate:QBC檢索本地SQL檢索

page eight _id div dpa like where sel ati QBC檢索 QBC查詢就是通過使用Hibernate提供的Query By Criteria API來查詢對象,這種API封裝了SQL語句的動態拼裝,對查詢提供了更加面向對象的功能

OGG運維優化腳本-信息同步類--錯誤日誌同步

ogg oracle goldengate 腳本 數據同步 shell 文件:logtitle.sh log.sh路徑:$HOME/ggscript/gginfo該腳本主要用於每小時檢查ggserr.log內包含error關鍵字的信息(具體可調整)然後拼接成html格式文件發送給監控

OpenCV探索之路:角點檢測

回調函數 閾值 source and 類型 幾何 擁有 .com named 角點檢測是計算機視覺系統中用來獲取圖像特征的一種方法。我們都常說,這幅圖像很有特點,但是一問他到底有哪些特點,或者這幅圖有哪些特征可以讓你一下子就識別出該物體,你可能就說不出來了。其實說圖像的特征

x264代碼剖析:核心算法之宏塊編碼中的變換編碼

區域 sse 目的 tor [1] src nco 大小 疊加 x264代碼剖析(十五):核心算法之宏塊編碼中的變換編碼 為了進一步節省圖像的傳輸碼率。須要對圖像進行壓縮,通常採用變換編碼及量化來消除圖像中的相關性以降低圖像編碼的動態範圍。本文主要介

python學習 屏幕抓取

處理 網上 rss 解析 是個 創建 網絡服務器 區別 內容 15.1 屏幕抓取   15.1.1 Tidy和XHTML解析    Tidy:用來修復不規範且隨意的HTML文檔的工具。    為什麽用XHTML: 和舊版本的HTML之間最主要的區別:HTML可能只用一個開始

angular學習——Provider

pri 驗證 module php http easy 核心 views detail 轉載請寫明來源地址:http://blog.csdn.net/lastsweetop/article/details/60966263 Provider簡單介紹