搜尋
首頁資料庫mysql教程如何在 MySQL 中使用預存程序

通常,在使用關聯式資料庫時,您會發出單獨的結構化查詢語言 (SQL) 查詢來檢索或操作數據,例如 SELECT、INSERT、UPDATE 或 DELETE, 直接從您的應用程式程式碼。這些聲明適用於 並直接操作底層資料庫表。如果一樣的話 語句或語句組在多個應用程式中使用 存取同一個資料庫,它們經常在單獨的資料庫中重複 應用程式.

MySQL,與許多其他關係型資料庫管理系統類似, 支援使用預存程序。預存程序幫助第一組 或多個 SQL 語句以通用名稱重複使用,封裝 資料庫本身內的通用業務邏輯。這樣的程序可以 從存取資料庫的應用程式呼叫以檢索或 以一致的方式操作資料。

使用預存程序,您可以為常見的情況建立可重複使用的例程 跨多個應用程式使用的任務,提供資料驗證, 或透過限制來提供額外的資料存取安全層 資料庫使用者直接存取底層表並發出 任意查詢。

在本教程中,您將了解什麼是預存程序以及如何 建立返回資料並使用輸入和資料的基本預存程序 輸出參數。

截屏2025-01-15 11.29.41.png

連接到 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中文網其他相關文章!

陳述
本文轉載於:digitalocean.com。如有侵權,請聯絡admin@php.cn刪除
MySQL與Sqlite有何不同?MySQL與Sqlite有何不同?Apr 24, 2025 am 12:12 AM

MySQL和SQLite的主要區別在於設計理念和使用場景:1.MySQL適用於大型應用和企業級解決方案,支持高性能和高並發;2.SQLite適合移動應用和桌面軟件,輕量級且易於嵌入。

MySQL中的索引是什麼?它們如何提高性能?MySQL中的索引是什麼?它們如何提高性能?Apr 24, 2025 am 12:09 AM

MySQL中的索引是數據庫表中一列或多列的有序結構,用於加速數據檢索。 1)索引通過減少掃描數據量提升查詢速度。 2)B-Tree索引利用平衡樹結構,適合範圍查詢和排序。 3)創建索引使用CREATEINDEX語句,如CREATEINDEXidx_customer_idONorders(customer_id)。 4)複合索引可優化多列查詢,如CREATEINDEXidx_customer_orderONorders(customer_id,order_date)。 5)使用EXPLAIN分析查詢計劃,避

說明如何使用MySQL中的交易來確保數據一致性。說明如何使用MySQL中的交易來確保數據一致性。Apr 24, 2025 am 12:09 AM

在MySQL中使用事務可以確保數據一致性。 1)通過STARTTRANSACTION開始事務,執行SQL操作後用COMMIT提交或ROLLBACK回滾。 2)使用SAVEPOINT可以設置保存點,允許部分回滾。 3)性能優化建議包括縮短事務時間、避免大規模查詢和合理使用隔離級別。

在哪些情況下,您可以選擇PostgreSQL而不是MySQL?在哪些情況下,您可以選擇PostgreSQL而不是MySQL?Apr 24, 2025 am 12:07 AM

選擇PostgreSQL而非MySQL的場景包括:1)需要復雜查詢和高級SQL功能,2)要求嚴格的數據完整性和ACID遵從性,3)需要高級空間功能,4)處理大數據集時需要高性能。 PostgreSQL在這些方面表現出色,適合需要復雜數據處理和高數據完整性的項目。

如何保護MySQL數據庫?如何保護MySQL數據庫?Apr 24, 2025 am 12:04 AM

MySQL數據庫的安全可以通過以下措施實現:1.用戶權限管理:通過CREATEUSER和GRANT命令嚴格控制訪問權限。 2.加密傳輸:配置SSL/TLS確保數據傳輸安全。 3.數據庫備份和恢復:使用mysqldump或mysqlpump定期備份數據。 4.高級安全策略:使用防火牆限制訪問,並啟用審計日誌記錄操作。 5.性能優化與最佳實踐:通過索引和查詢優化以及定期維護兼顧安全和性能。

您可以使用哪些工具來監視MySQL性能?您可以使用哪些工具來監視MySQL性能?Apr 23, 2025 am 12:21 AM

如何有效監控MySQL性能?使用mysqladmin、SHOWGLOBALSTATUS、PerconaMonitoringandManagement(PMM)和MySQLEnterpriseMonitor等工具。 1.使用mysqladmin查看連接數。 2.用SHOWGLOBALSTATUS查看查詢數。 3.PMM提供詳細性能數據和圖形化界面。 4.MySQLEnterpriseMonitor提供豐富的監控功能和報警機制。

MySQL與SQL Server有何不同?MySQL與SQL Server有何不同?Apr 23, 2025 am 12:20 AM

MySQL和SQLServer的区别在于:1)MySQL是开源的,适用于Web和嵌入式系统,2)SQLServer是微软的商业产品,适用于企业级应用。两者在存储引擎、性能优化和应用场景上有显著差异,选择时需考虑项目规模和未来扩展性。

在哪些情況下,您可以選擇SQL Server而不是MySQL?在哪些情況下,您可以選擇SQL Server而不是MySQL?Apr 23, 2025 am 12:20 AM

在需要高可用性、高級安全性和良好集成性的企業級應用場景下,應選擇SQLServer而不是MySQL。 1)SQLServer提供企業級功能,如高可用性和高級安全性。 2)它與微軟生態系統如VisualStudio和PowerBI緊密集成。 3)SQLServer在性能優化方面表現出色,支持內存優化表和列存儲索引。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!