在開發過程中,經常會遇到重複使用某乙個功能的情況,為此,mysql引入了儲存過程
儲存過程
就是一條或多條sql語句的集合,當對資料庫進行一系列複雜操作時,儲存過程可以將這些複雜操縱,封裝成乙個**塊,以便重複使用,大大減少資料庫開發人員的工作量
使用create procedure語句
create procedure sp_name([proc_parameter])
[characteristics……]routine_body
create procedure,建立儲存過程的關鍵字
sp_name,為儲存過程的名稱
proc_parameter,為指定儲存過程的引數列表,引數列表的形式,如下
[in|out|inout]param_name type
in,表示輸入引數
out,表示輸出引數
inout,表示既可以輸入,也可以輸出
param_name,表示引數名稱
type,表示引數的型別,可以是mysql資料庫中的任意型別
在建立儲存過程的語法格式中,characteristics用於指定儲存過程的特性,取值如下
說明,routine_doby部分,是由sql語句組成的,當前系統支援的語言為sql,sql是language的唯一值
指明儲存過程執行的結果是否正確,deterministic表示結果是正確的,每次執行儲存過程時,相同的輸入可能得到不同的輸出,如果沒有指定任意乙個值,預設為not deterministic
指明子程式使用sql語句的限制
contains sql,表示子程式包含sql語句,但是,不包含讀寫資料的語句
no sql,表示子程式不包含sql語句
reads sql data,說明子程式,包含讀寫資料的語句
modifies sql data,表示子程式包含寫資料的語句
預設情況下,系統會指定為contains sql
指明,誰有許可權來執行
definer,表示只有定義者才能執行
invoker,表示擁有許可權的呼叫者可以執行
預設情況下,系統指定為definer
注釋資訊,用來表示儲存過程
routine_body,是sql**的內容,可以用begin……end來表示sql**的開始和結束
首先,在資料庫chapter06中,建立表student
建立student表之後,插入4條記錄
建立乙個檢視student表的儲存過程
引數說明
delimiter //
作用,將mysql的結束符設定為//,因為,mysql預設的語句結束符號為分號;,為了避免與儲存過程中,sql語句結束符相衝突,需要使用delimter改變儲存過程的結束符,並且,以end //結束儲存過程
儲存過程,定義完畢之後,再使用delimiter,恢復預設結束符
delimiter,可以指定其他符號作為結束符
注意,delimiter與設定的結束符之間,一定要有乙個空格,否則設定無效
MYSQL 建立儲存過程
無引數儲存過程 delimiter create procedure myfist proc 建立儲存過程 begin select stu id from score where grade 80 and c name 計算機 select name from student where id i...
mysql建立儲存過程
坑一 mysql建立儲存過程中,儲存過程的輸入引數變數命名不應該與欄位名相同。如果相同,導致的結果就是引數的值將不會是你傳入的值,而是變成每條記錄的那個欄位的值。如果在刪除操作時,將會刪除整張表的記錄,是非常危險的。刪除儲存過程 drop procedure if exists pro test 建...
MySQL 建立儲存過程
mysql 版本 5.0.45 p hpmyadmin 版本 2.11.3 首先看 mysql 5.0 參考手冊中關於建立儲存過程的語法說明 create definer proceduresp name proc parameter characteristic.routine body proc...