MySQL建立儲存過程

2021-08-04 08:13:10 字數 1656 閱讀 4248

在開發過程中,經常會遇到重複使用某乙個功能的情況,為此,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...