SQL語句需要先編譯然後執行,而預存程序(Stored Procedure)是一組為了完成特定功能的SQL語句集,經編譯後儲存在資料庫中,使用者透過指定預存程序的名字並給定參數(如果該預存程序帶有參數)來呼叫執行它。預存程序是可程式設計的函數,在資料庫中建立並儲存,可以由SQL語句和控制結構組成。當想要在不同的應用程式或平台上執行相同的函數,或封裝特定功能時,預存程序是非常有用的。資料庫中的預存程序可以看做是對程式設計中物件導向方法的模擬,它允許控制資料的存取方式。
推薦課程:MySql教學。
預存程序的優點:
(1).增強SQL語言的功能與彈性:預存程序可以用控制語句寫,有很強的靈活性,可以完成複雜的判斷和較複雜的運算。
(2).標準元件式程式設計:儲存過程建立後,可以在程式中被多次調用,而不必重新編寫該預存程序的SQL語句。而且資料庫專業人員可以隨時對預存程序進行修改,對應用程式原始碼毫無影響。
(3).較快的執行速度:如果某一操作包含大量的Transaction-SQL程式碼或分別被多次執行,那麼預存程序要比批次的執行速度快很多。因為預存程序是預編譯的。在首次運行預存程序時查詢,優化器對其進行分析優化,並且給出最終被儲存在系統表中的執行計劃。而批次的Transaction-SQL語句在每次執行時都要進行編譯和最佳化,速度相對要慢一些。
(4).減少網路流量:針對同一個資料庫物件的操作(如查詢、修改),如果這一操作所涉及的Transaction-SQL語句被組織進儲存過程,那麼當在客戶計算機上呼叫該預存程序時,網路中傳送的只是該呼叫語句,從而大大減少網路流量並降低了網路負載。
(5).作為一種安全機制來充分利用:透過對執行某一預存程序的權限進行限制,能夠實現對相應的資料的存取權限的限制,避免了非授權使用者對數據的訪問,保證了資料的安全。
MySQL的預存程序
預存程序是資料庫的一個重要的功能,MySQL 5.0以前不支援預存程序,這使得MySQL在應用程式上大打折扣。好在MySQL 5.0開始支援預存程序,這樣即可以大幅提高資料庫的處理速度,同時也可以提高資料庫程式設計的彈性。
MySQL預存程序的建立
語法
CREATE PROCEDURE 过程名([[IN|OUT|INOUT] 参数名 数据类型[,[IN|OUT|INOUT] 参数名 数据类型…]]) [特性 ...] 过程体 DELIMITER // CREATE PROCEDURE myproc(OUT s int) BEGIN SELECT COUNT(*) INTO s FROM students; END // DELIMITER ;
分隔符號
MySQL預設以";"為分隔符,如果沒有宣告分割符,則編譯器會把預存程序當成SQL語句處理,因此編譯過程會報錯,所以要事先用「DELIMITER //」宣告目前段分隔符,請編譯器把兩個"//"之間的內容當作預存程序的程式碼,不會執行這些程式碼;「DELIMITER ;」的意思是把分隔符號還原。
參數
預存程序依需求可能會有輸入、輸出、輸入輸出參數,如果有多個參數以","分割開。 MySQL預存程序的參數用在預存程序的定義,共有三種參數型別,IN,OUT,INOUT:
IN參數的值必須在呼叫預存程序時指定,在預存程序中修改此參數的值不能被傳回,為預設值OUT:該值可在儲存過程內部改變,並可返回INOUT:呼叫時指定,並且可被改變和返回
過程體
過程體的開始與結束使用BEGIN與END進行識別。
總結
本次主要是掌握了對於預存程序的使用,總的來說,預存程序實際上類似於C 中的函數,而在C 中我們是需要在創建這一過程的文件中去調用這一函數,但是對於存儲過程來說,相當於是將這一操作過程存儲在數據庫中,可以使用call與對其進行調用,並輸入或輸出一些參數和結果。
印象最深的是類似「in n int」和「out sum int」這樣的對於輸入輸出的定義,透過查看相關博客,可以總結如下對於輸入輸出定義的使用規律:
MySQL預存程序的參數用在預存程序的定義,共有三種參數型別
IN,OUT,INOUT
格式為:Create procedure|function([[IN |OUT | INOUT ] 參數名稱資料類別...])
IN 輸入參數
表示該參數的值必須在呼叫預存程序時指定,在預存程序中修改該參數的值不能被傳回,為預設值
#OUT 輸出參數
此值可在預存程序內部被改變,並可傳回
INOUT 輸入輸出參數
呼叫時指定,且可被改變和回傳
IN 和 OUT在實驗中已有體會,主要是對INOUT的理解,這裡引用一個例子:
參數inout的使用實例(既能輸入一個值又能傳出一個值)
語句功能:傳一個年齡,自動讓年齡增長10歲
create procedure p3(inout age int)
begin
set age:=age 10;
end
其中:呼叫的時候,inout型的參數值既是輸入類型又是輸出類型,給它一個值,值不是變量,因此我們需要先設定一個變數並初始化這個值,呼叫的時候直接傳這個變數即可。
set @currentAge=8$
call p3(@currentAge)$
select @currentAge$
建立並執行完預存程序,運行結果如下:
以上是資料庫預存程序怎麼寫的詳細內容。更多資訊請關注PHP中文網其他相關文章!

在數據庫優化中,應根據查詢需求選擇索引策略:1.當查詢涉及多個列且條件順序固定時,使用複合索引;2.當查詢涉及多個列但條件順序不固定時,使用多個單列索引。複合索引適用於優化多列查詢,單列索引則適合單列查詢。

要優化MySQL慢查詢,需使用slowquerylog和performance_schema:1.啟用slowquerylog並設置閾值,記錄慢查詢;2.利用performance_schema分析查詢執行細節,找出性能瓶頸並優化。

MySQL和SQL是開發者必備技能。 1.MySQL是開源的關係型數據庫管理系統,SQL是用於管理和操作數據庫的標準語言。 2.MySQL通過高效的數據存儲和檢索功能支持多種存儲引擎,SQL通過簡單語句完成複雜數據操作。 3.使用示例包括基本查詢和高級查詢,如按條件過濾和排序。 4.常見錯誤包括語法錯誤和性能問題,可通過檢查SQL語句和使用EXPLAIN命令優化。 5.性能優化技巧包括使用索引、避免全表掃描、優化JOIN操作和提升代碼可讀性。

MySQL異步主從復制通過binlog實現數據同步,提升讀性能和高可用性。 1)主服務器記錄變更到binlog;2)從服務器通過I/O線程讀取binlog;3)從服務器的SQL線程應用binlog同步數據。

MySQL是一個開源的關係型數據庫管理系統。 1)創建數據庫和表:使用CREATEDATABASE和CREATETABLE命令。 2)基本操作:INSERT、UPDATE、DELETE和SELECT。 3)高級操作:JOIN、子查詢和事務處理。 4)調試技巧:檢查語法、數據類型和權限。 5)優化建議:使用索引、避免SELECT*和使用事務。

MySQL的安裝和基本操作包括:1.下載並安裝MySQL,設置根用戶密碼;2.使用SQL命令創建數據庫和表,如CREATEDATABASE和CREATETABLE;3.執行CRUD操作,使用INSERT,SELECT,UPDATE,DELETE命令;4.創建索引和存儲過程以優化性能和實現複雜邏輯。通過這些步驟,你可以從零開始構建和管理MySQL數據庫。

InnoDBBufferPool通過將數據和索引頁加載到內存中來提升MySQL數據庫的性能。 1)數據頁加載到BufferPool中,減少磁盤I/O。 2)臟頁被標記並定期刷新到磁盤。 3)LRU算法管理數據頁淘汰。 4)預讀機制提前加載可能需要的數據頁。

MySQL適合初學者使用,因為它安裝簡單、功能強大且易於管理數據。 1.安裝和配置簡單,適用於多種操作系統。 2.支持基本操作如創建數據庫和表、插入、查詢、更新和刪除數據。 3.提供高級功能如JOIN操作和子查詢。 4.可以通過索引、查詢優化和分錶分區來提升性能。 5.支持備份、恢復和安全措施,確保數據的安全和一致性。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

Dreamweaver Mac版
視覺化網頁開發工具

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