mysql創建存儲過程代碼(創建存儲過程mysql語句)

  • 1、如何通過用MySQL怎麼創建存儲過程?
  • 2、MySql編寫一個存儲過程?
  • 3、五、MYSQL存儲過程和函數

創建存儲過程

CREATE PROCEDURE 存儲過程名()

一個例子說明:一個返回產品平均價格的存儲過程如下代碼:

CREATE PROCEDURE productpricing()

BEGIN

SELECT Avg(prod_price) AS priceaverage

FROM products;

END;

//創建存儲過程名為productpricing,如果存儲過程需要接受參數,可以在()中列舉出來。即使沒有參數後面仍然要跟()。BEGIN和END語句用來限定存儲過程體,過程體本身是個簡單的SELECT語句

1、delimiter // ,聲明分隔符:DELIMITER是分割符的意思,因為MySQL默認以”;”為分隔符,如果我們沒有聲明分割符,那麼編譯器會把存儲過程當成SQL語句進行處理,則存儲過程的編譯過程會報錯,所以要事先用DELIMITER關鍵字申明當前段分隔符,這樣MySQL才會將”;”當做存儲過程中的代碼,不會執行這些代碼(這裡如果不懂的話,你可以通過試錯的方法來理解)。

2、編寫存儲過程的格式:CREATE PROCEDURE([[IN |OUT |INOUT ]參數名數據類形…])

例子:

1)create procedure proc1(out s int) // 只有輸出

2)create procedure proc2(in p_in bigint) // 只有輸入

3)create procedure proc15() // 沒有輸入與輸出

4)create procedure demo_multi_param(in id bigint,in name varchar(32),out c int) //多輸入與輸出

3、過程體的開始與結束使用BEGIN與END進行標識。

4、select count (*) into s from student; // 過程體,一系列的邏輯語句,sql語句

5、delimiter ; 用完了之後要把分隔符還原。

• create procedure用來創建 存儲過程 ,create function用來創建 函數

• Delimiter命令是改變語句的結束符 ,MySQL默認的結束符為;號,由於procedure和function中的;號並不代表創建的結束,所以要替換成另外的結束符以便表示創建的結束

• rontine_body子句可以包含一個簡單的SQL語句,也可以包含多個SQL語句, 通過begin…end將這多個SQL語句 包含在一起

• MySQL存儲過程和函數中也可以包含類似create和drop等DDL語句

• comment子句用來寫入對存儲過程和函數的注釋

• Language子句用來表示此存儲過程和函數的創建語言

• 存儲過程和函數被標註為deterministic表明當輸入相同的參數是會返回相同的結果,反之如果是not deterministic則表示相同參數不會是相同結果,默認是not deterministic

• 相關屬性短語只有諮詢含義,並不是強制性的約束

• Drop procedure/function語句用來 刪除指定名稱的存儲過程或函數

• Begin…end語句通常出現在存儲過程、函數和觸發器中,其中 可以包含一個或多個語句 ,每個語句用;號隔開

• 標籤label可以加在begin…end語句以及loop, repeat和while語句

• 語句中通過iterate和leave來控制流程,iterate表示返回指定標籤位置,leave表示跳出標籤

• Declare語句通常用來聲明本地變量、游標、條件或者handler

• Declare語句只允許出現在begin … end語句中而且必須出現在第一行

• Declare的順序也有要求,通常是先聲明本地變量,再是游標,然後是條件和handler

• 本地變量可以通過declare語句進行聲明

• 聲明後的變量可以通過select … into var_list進行賦值,或者通過set語句賦值,或者通過定義游標並使用fetch … into var_list賦值

• 通過declare聲明變量方法:

• MySQL支持if,case,iterate,leave,loop,while,repeat語句作為存儲過程和函數中的 流程控制語句 ,另外return語句也是函數中的特定流程控制語句

• Case語句在存儲過程或函數中表明了 複雜的條件選擇語句

• IF語句在存儲過程或函數中表明了 基礎的條件選擇語句

其中在 function 裏面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持。如果我們開啟了 bin-log, 我們就必須為我們的 function 指定一個參數。

在 MySQL 中創建函數時出現這種錯誤的解決方法:

set global log_bin_trust_function_creators=TRUE;

• Iterate語句 僅出現在loop,repeat,while循環語句中,其含義表示重新開始此循環

• Leave語句表明 退出指定標籤的流程控制語句塊

• 通常會用在begin…end,以及loop,repeat,while的循環語句中

• Loop語句是存儲過程或函數中表達 循環執行 的一種方式

• repeat語句是存儲過程或函數中表達 循環執行 的一種方式

• while語句是存儲過程或函數中表達 循環執行 的一種方式

• Return語句用在 函數中,用來終結函數的執行並將指定值返回給調用者

• Cursor游標用來 聲明一個數據集

• 游標的聲明必須在變量和條件聲明之後,在handler聲明之前

• Cursor close語句用來 關閉之前打開的游標

• Cursor declare語句用來聲明一個游標和指定游標對應的數據集合, 通常數據集合是一個select語句

• Cursor fetch語句用來獲取游標指定數據集的 下一行數據 並將各個字段值賦予後面的變量

• Open cursor語句用來打開一個之前已經 聲明好的游標

• Declare condition語句命名 特定的錯誤條件 ,而該特定錯誤可以在declare…handler中指定 處理方法

• 比如在MySQL中1051error code表示的是unknown table的錯誤,如果要對這

個錯誤做特殊處理,可以用三種方法:

• Declare handler語句用來聲明一個handler來處理一個或多個特殊條件,當其中的某個條件滿足時則觸發其中的statement語句執行

• Statement可以是一個簡單SQL語句,也可以是begin…end組成的多個語句

• Handler_action子句聲明當執行完statement語句之後應該怎麼辦

Condition_value的值有以下幾種:

• 當condition發生但沒有聲明handler時,則存儲過程和函數依照如下規則處理

• create trigger語句用來創建一個觸發器,觸發器的作用是當表上有對應SQL語句發生時,則觸發執行

• 觸發器創建時需要 指定對應的表名 tbl_name

• Definer關鍵詞用來指定trigger的安全環境

• Trigger_time指定觸發器的執行時間,BEFORE和AFTER指定觸發器在表中的 每行數據修改前或者後 執行

• Trigger_event指定觸發該觸發器的具體 事件

• INSERT當新的一行數據插入表中時觸發,比如通過執行insert,load data,replace語句插入新數據

• UPDATE當表的一行數據被修改時觸發,比如執行update語句時

• DELETE當表的一行數據被刪除時觸發,比如執行delete,replace語句時

• 當執行insert into … on duplicate key update語句時,當碰到重複行執行update時,則觸發update下的觸發器

• 從5.7.2版本開始,可以創建具有相同trigger_time和trigger_event的同一個表上的多個觸發器,默認情況下按照創建的時間依次執行,通過 指定FOLLOWS/PRECEDES改變執行順序 ,即FOLLOWS時表示新創建的觸發器後執行,PRECEDES則表示新觸發器先執行

• Trigger_body表示觸發器觸發之後要執行的一個或多個語句,在內部可以引用涉及表的字段, OLD.col_name表示行數據被修改或刪除之前的字段數據,NEW.col_name表示行數據被插入或修改之後的字段數據

• Drop trigger語句用來 刪除一個觸發器

• If exists短語用來避免刪除不存在的觸發器時引發報錯

• 當你執行drop table時,表上的觸發器也被drop掉了

原創文章,作者:VI07J,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/127152.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
VI07J的頭像VI07J
上一篇 2024-10-03 23:13
下一篇 2024-10-03 23:13

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • 如何修改mysql的端口號

    本文將介紹如何修改mysql的端口號,方便開發者根據實際需求配置對應端口號。 一、為什麼需要修改mysql端口號 默認情況下,mysql使用的端口號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python字符串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字符串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字符串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變量和數…

    編程 2025-04-29
  • Python3支持多行語句

    Python3是一種高級編程語言,開發人員可以輕鬆地使用該語言編寫簡單到複雜的代碼。其中Python3支持多行語句,方便開發人員編寫複雜的代碼,提高代碼的可讀性和可維護性。 一、使…

    編程 2025-04-29
  • 倉庫管理系統代碼設計Python

    這篇文章將詳細探討如何設計一個基於Python的倉庫管理系統。 一、基本需求 在着手設計之前,我們首先需要確定倉庫管理系統的基本需求。 我們可以將需求分為以下幾個方面: 1、庫存管…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • Python for循環語句打印九九乘法表

    本篇文章將詳細介紹如何使用Python的for循環語句打印九九乘法表。打印九九乘法表是我們初學Python時經常練習的一項基礎操作,也是編寫Python程序的基本能力之一。 1、基…

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Python實現簡易心形代碼

    在這個文章中,我們將會介紹如何用Python語言編寫一個非常簡單的代碼來生成一個心形圖案。我們將會從安裝Python開始介紹,逐步深入了解如何實現這一任務。 一、安裝Python …

    編程 2025-04-29

發表回復

登錄後才能評論