通常,在使用關聯式資料庫時,您會發出單獨的結構化查詢語言 (SQL) 查詢來檢索或操作數據,例如 SELECT、INSERT、UPDATE 或 DELETE, 直接從您的應用程式程式碼。這些聲明適用於 並直接操作底層資料庫表。如果一樣的話 語句或語句組在多個應用程式中使用 存取同一個資料庫,它們經常在單獨的資料庫中重複 應用程式.
MySQL,與許多其他關係型資料庫管理系統類似, 支援使用預存程序。預存程序幫助第一組 或多個 SQL 語句以通用名稱重複使用,封裝 資料庫本身內的通用業務邏輯。這樣的程序可以 從存取資料庫的應用程式呼叫以檢索或 以一致的方式操作資料。
使用預存程序,您可以為常見的情況建立可重複使用的例程 跨多個應用程式使用的任務,提供資料驗證, 或透過限制來提供額外的資料存取安全層 資料庫使用者直接存取底層表並發出 任意查詢。
在本教程中,您將了解什麼是預存程序以及如何 建立返回資料並使用輸入和資料的基本預存程序 輸出參數。
連接到 MySQL 並設定範例資料庫
在本節中,您將連接到 MySQL 伺服器並建立一個 範例資料庫,以便您可以按照本指南中的範例進行操作。
在本指南中,您將使用一個虛構的汽車集合。您將儲存 有關當前擁有的汽車的詳細信息,包括其品牌、型號、製造年份,
如果您的SQL 資料庫系統在遠端伺服器上運行,請從本機電腦SSH 到您的伺服器:
ssh sammy@your_server_ip
然後開啟MySQL 伺服器提示,將sammy 替換為您的MySQL使用者名稱account:
mysql -u sammy-p
建立一個資料庫,名稱為procedures:
CREATE DATABASEprocedures;
如果資料庫建立成功,您將收到以下輸出:
OutputQuery OK, 1 row affected (0.01 sec)
選擇程式資料庫,執行以下USE 語句:
USEprocedures;
您將收到以下輸出:
ssh sammy@your_server_ip
選擇資料庫後,您可以在其中建立範例表。表 cars 將包含有關資料庫中汽車的簡化資料。它將包含以下列:
- 品牌:此列包含每輛擁有的汽車的品牌,使用最多 100 個字元的 varchar 資料類型表示。
- 型號:此列保存汽車型號名稱,使用 varchar 資料類型表示,最多 100 個字元。
- 年份:此列儲存汽車的建置年,採用 int 資料型別來儲存數值。
- value:此列使用十進位資料類型儲存汽車的值,最多 10 位數字,小數點後 2 位數字。
使用以下指令建立範例表:
mysql -u sammy-p
如果輸出如下列印後,表格已建立:
CREATE DATABASEprocedures;
接下來,透過執行以下INSERT INTO 操作向cars表格載入一些範例資料:
OutputQuery OK, 1 row affected (0.01 sec)
插入 該行動將在表中添加十輛樣品跑車,其中五輛 保時捷和五款法拉利車款。以下輸出顯示所有 新增了五行:
ssh sammy@your_server_ip
至此,您就可以按照指南的其餘部分進行操作並開始在 SQL 中使用預存程序。
預存程序簡介
MySQL 和許多其他關係型資料庫中的預存程序 系統是包含一個或多個佈局指令的命名對象 然後在調用時由資料庫依序執行。在 最基本的例子,預存程序可以保存一個通用的語句 可重複使用的例程,例如從資料庫擷取數據 經常使用的過濾器。例如,您可以建立一個預存程序來 檢索在最後給定時間內下訂單的線上商店客戶 月數。在最複雜的場景中,預存程序可以 代表描述複雜業務邏輯的廣泛程序 健壯的應用程式。
預存程序中的指令集可以包含傳回或操作資料的常見 SQL 語句,例如 SELECT 或 INSERT 查詢。此外,預存程序可以利用:
- 傳遞給預存程序或透過預存程序傳回的參數。
- 宣告的變數以直接在過程程式碼中處理檢索到的資料。
- 條件語句,允許執行部分內容 預存程序代碼取決於某些條件,例如 IF 或 CASE 指令。
- 循環,例如WHILE、LOOP 和REPEAT,允許多次執行部分程式碼,例如針對檢索到的資料中的每一行執行
- 錯誤處理指令,例如向存取該過程的資料庫用戶返回錯誤訊息。
- 呼叫其他預存程序資料庫。
當透過名稱呼叫過程時,資料庫引擎會依照定義逐條指令執行它。
資料庫使用者必須具有適當的執行權限 給定的程序。此權限要求提供了一層 安全性,禁止直接資料庫訪問,同時授予使用者存取權限 確保安全執行的各個過程。
預存程序直接在資料庫伺服器上執行, 在本地執行所有計算並將結果傳回給呼叫者 僅當完成時才使用。
如果您想更改過程行為,您可以更新 資料庫中的過程,以及正在使用它的應用程式 自動選擇新版本。所有用戶將立即開始 使用新的程式碼而不需要調整它們
以下是用來建立預存程序的 SQL 程式碼的一般結構:
mysql -u sammy-p
此程式碼片段中的第一個和最後一個指令是 DELIMITER // 和 DELIMITER ;。通常,MySQL使用分號符號(;) 分隔語句並指示它們何時開始和結束。如果你 在 MySQL 控制台中執行多個語句,以 分隔 分號,它們將被視為單獨的命令並執行 各自獨立,一個接一個。然而,儲存過程可以 包含多個命令,這些命令將在執行時按順序執行 被叫。當試圖告訴 MySQL 創建時,這會帶來困難 一個新的程序。資料庫引擎會遇到分號 在儲存過程主體中並認為它應該停止執行 陳述。在這種情況下,預期的陳述是整個 過程創建程式碼,而不是過程中的單一指令
要解決此限制,您可以使用 DELIMITER 命令暫時將分隔符號從 ; 變更為 ; 本身,因此 MySQL 會誤解您的意圖。 // 在 CREATE PROCEDURE 期間 稱呼。然後,儲存過程主體內的所有分號都將是 按原樣傳遞到伺服器。整個程序完成後, 分隔符號改回 ;最後一個 DELIMITER ;.
建立新過程的程式碼的核心是 CREATE PROCEDURE 調用,後跟過程名稱: procedure_name 在範例中。過程名稱後面跟著一個可選的列表 過程將接受的參數。最後一部分是程序 正文,包含在 BEGIN 和 END 語句中。裡面是過程程式碼,其中可以包含單一 SQL 語句,例如 SELECT 查詢或更複雜的程式碼。
END 指令以臨時分隔符號 // 結尾,而不是典型的分號。
在下一節中,您將建立一個不包含單一查詢的參數的基本預存程序。
建立一個不帶參數的預存程序參數
在本節中,您將建立第一個預存程序,該程序封裝單一SQL SELECT 語句,以傳回依品牌和價值降序排列的自有汽車清單。
開始於執行您要使用的 SELECT語句:
ssh sammy@your_server_ip
資料庫將傳回以下位置的汽車清單汽車表,先按品牌排序,然後在單一品牌內依價值降序排列:
mysql -u sammy-p
最有價值的法拉利位於清單頂部,最不值錢的保時捷出現在
假設此查詢將在多個應用程式中頻繁使用或 由多個用戶使用,並假設您希望確保每個人都會使用 對結果進行排序的方式完全相同。為此,您想要建立一個 預存程序將該語句保存在可重複使用的名為 procedure.
要建立此預存程序,請執行下列程式碼片段:
CREATE DATABASEprocedures;
如上一節所述,第一個和最後一個指令(DELIMITER // 和 DELIMITER ;)告訴 MySQL 在過程建立期間停止將分號字元視為語句分隔符號。
CREATE PROCEDURE SQL 指令後面接著過程名稱get_all_cars,您可以定義它以最好地描述過程的作用。過程名稱後面有一對括號() 您可以在其中新增參數。在此範例中,該過程不 使用參數,因此括號為空。然後,在定義流程程式碼區塊的開始和結束的 BEGIN 和 END 指令之間,逐字寫入先前使用的 SELECT 語句。
資料庫將傳回一條成功訊息:
ssh sammy@your_server_ip
get_all_cars過程現在保存在資料庫中,當呼叫時,它將執行保存的語句: is.
要執行已儲存的預存程序,可以使用CALL SQL 指令,後面接著過程名稱。嘗試像這樣運行新創建的過程:
mysql -u sammy-p
過程名稱get_all_cars就是使用該過程所需的全部內容。您不再需要手動鍵入先前使用的 SELECT 語句的任何部分。資料庫將顯示結果,就像之前運行的SELECT 語句的輸出一樣:
CREATE DATABASEprocedures;
您現在已成功建立一個不帶任何參數的儲存過程,該儲存過程會傳回cars 表中以特定方式訂購的所有汽車。您可以在多個應用程式中使用該過程。
在下一節中,您將建立一個接受 根據使用者輸入更改過程行為的參數。
以上是如何在 MySQL 中使用預存程序的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文探討了Docker中的優化MySQL內存使用量。 它討論了監視技術(Docker統計,性能架構,外部工具)和配置策略。 其中包括Docker內存限制,交換和cgroups

本文介紹了MySQL的“無法打開共享庫”錯誤。 該問題源於MySQL無法找到必要的共享庫(.SO/.DLL文件)。解決方案涉及通過系統軟件包M驗證庫安裝

本文討論了使用MySQL的Alter Table語句修改表,包括添加/刪除列,重命名表/列以及更改列數據類型。

本文比較使用/不使用PhpMyAdmin的Podman容器直接在Linux上安裝MySQL。 它詳細介紹了每種方法的安裝步驟,強調了Podman在孤立,可移植性和可重複性方面的優勢,還

本文提供了SQLite的全面概述,SQLite是一個獨立的,無服務器的關係數據庫。 它詳細介紹了SQLite的優勢(簡單,可移植性,易用性)和缺點(並發限制,可伸縮性挑戰)。 c

本指南展示了使用自製在MacOS上安裝和管理多個MySQL版本。 它強調使用自製裝置隔離安裝,以防止衝突。 本文詳細詳細介紹了安裝,起始/停止服務和最佳PRA

文章討論了為MySQL配置SSL/TLS加密,包括證書生成和驗證。主要問題是使用自簽名證書的安全含義。[角色計數:159]

文章討論了流行的MySQL GUI工具,例如MySQL Workbench和PhpMyAdmin,比較了它們對初學者和高級用戶的功能和適合性。[159個字符]


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

記事本++7.3.1
好用且免費的程式碼編輯器

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能