天天看點

資料庫必知詞彙:存儲過程

|名詞定義|

存儲過程(Stored Procedure)是在大型資料庫系統中,一組為了完成特定功能的SQL 語句集,它存儲在資料庫中,一次編譯後永久有效,使用者通過指定存儲過程的名字并給出參數(如果該存儲過程帶有參數)來執行它。存儲過程是資料庫中的一個重要對象。在資料量特别龐大的情況下利用存儲過程能達到倍速的效率提升。

存儲過程是可程式設計的函數,在資料庫中建立并儲存,可以由SQL語句和控制結構組成。當想要在不同的應用程式或平台上執行相同的函數,或者封裝特定功能時,存儲過程是非常有用的。資料庫中的存儲過程可以看做是對程式設計中面向對象方法的模拟,它允許控制資料的通路方式。

| 發展曆程 |

1989年ANSI SQL标準(1989) 提出存儲過程的标準化。

1992年ANSI SQL标準(1992) 提出SQL的商業化标準。

1998年—SQL Server 7.0釋出,SQL Server 7.0開始進軍企業級資料庫市場,存儲過程得到很好的使用。

2000年—SQL Server 2000釋出。

2005年—SQL Server 2005釋出,增強了T-SQL語言,優化了存儲過程的使用。

2008年—SQL Server 2008釋出。

目前Oracle、Hadoop、Hbase、MySQL等所有主流資料庫最新版本都支援存儲過程。

| 技術特點 |

使用存儲過程的好處:

  • 減少了伺服器/用戶端網絡流量:過程中的指令作為代碼的單個批處理執行。 這可以顯著減少伺服器和用戶端之間的網絡流量,因為隻有對執行過程的調用才會跨網絡發送。 如果沒有過程提供的代碼封裝,每個單獨的代碼行都不得不跨網絡發送。
  • 更強的安全性:多個使用者和用戶端程式可以通過過程對基礎資料庫對象執行操作,即使使用者和程式對這些基礎對象沒有直接權限。 過程控制執行哪些程序和活動,并且保護基礎資料庫對象。 這消除在了單獨的對象級别授予權限的要求,并且簡化了安全層。
  • 代碼的重複使用:任何重複的資料庫操作的代碼都非常适合于在過程中進行封裝。這消除了不必要地重複編寫相同的代碼、降低了代碼不一緻性,并且允許擁有所需權限的任何使用者或應用程式通路和執行代碼。
  • 更容易維護:在用戶端應用程式調用過程并且将資料庫操作保持在資料層中時,對于基礎資料庫中的任何更改,隻有過程是必須更新的。應用程式層保持獨立,并且不必知道對資料庫布局、關系或程序的任何更改的情況。
  • 改進的性能:預設情況下,在首次執行過程時将編譯過程,并且建立一個執行計劃,供以後的執行重複使用。因為查詢處理器不必建立新計劃,是以,它通常用更少的時間來處理過程。如果過程引用的表或資料有顯著變化,則預編譯的計劃可能實際上會導緻過程的執行速度減慢。在此情況下,重新編譯過程和強制新的執行計劃可提高性能。

sql中的存儲過程格式如下:

CREATE PROCEDURE [擁有者.]存儲過程名[;程式編号]

[(參數#1,…參數#1024)]

[WITH

{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}

]

[FOR REPLICATION]

AS 程式行

其中存儲過程名不能超過128個字。每個存儲過程中最多設定1024個參數

存儲過程種類分為:

1、系統存儲過程
2、本地存儲過程
3、臨時存儲過程
4、遠端存儲過程
5、擴充存儲過程
           

| 相關詞 |

Stored Procedure – 存儲過程

RDBMS – 關系資料據庫

IDS -內建資料存儲(Integrated Data Store),這是世界上第一個NDBMS(網狀資料庫管理系統,Network Database Management System),也是第一個資料庫管理系統

Access - 是由微軟釋出的關系資料庫管理系統

MariaDB - 資料庫管理系統是MySQL的一個分支

| 案例展示 |

Oracle – 是甲骨文公司的一種關系資料庫管理系統

SQLServer – 是微軟公司的一種關系資料庫管理系統

MySQL -原本是一個開放源代碼的關系資料庫管理系統,原開發者為瑞典的MySQL AB公司,2009年甲骨文公司收購Sun公司,MySQL成為Oracle旗下産品

PostgreSQL - 是自由的對象-關系型資料庫伺服器

DB2 - 是美國IBM公司發展的一套關系型資料庫管理系統

Hive - 是一個建立在Hadoop架構之上的資料倉庫

|資料來源|

Introduce stored peocedures

https://www.w3schools.com/SQL/sql_stored_procedures.asp

存儲過程(資料庫引擎)

https://docs.microsoft.com/zh-cn/sql/relational-databases/stored-procedures/stored-procedures-database-engine?view=sql-server-ver15

MySQL存儲過程

https://www.cnblogs.com/mark-chan/p/5384139.html