mysql怎麼建儲存過程 mysql儲存過程怎麼寫

2021-10-18 18:25:51 字數 2027 閱讀 9182

mysql 儲存過程是一些 sql 語句的集合,比如有的時候我們可能需要一大串的 sql 語句,或者說在編寫 sql 語句的過程中還需要設定一些變數的值,這個時候我們就完全有必要編寫乙個儲存過程。下面我們來介紹一下如何建立乙個儲存過程。

語法格式:

可以使用 create procedure 語句建立儲存過程。

語法格式如下:create procedure ( [過程引數[,…] ] )

[過程引數[,…] ] 格式

[ in | out | inout ]

語法說明如下:

1) 過程名

儲存過程的名稱,預設在當前資料庫中建立。若需要在特定資料庫中建立儲存過程,則要在名稱前面加上資料庫的名稱,即 db_name.sp_name。需要注意的是,名稱應當盡量避免選取與 mysql 內建函式相同的名稱,否則會發生錯誤。

2) 過程引數

儲存過程的引數列表。其中,為引數名,為引數的型別(可以是任何有效的 mysql 資料型別)。當有多個引數時,引數列表中彼此間用逗號分隔。儲存過程可以沒有引數(此時儲存過程的名稱後仍需加上一對括號),也可以有 1 個或多個引數。

mysql 儲存過程支援三種型別的引數,即輸入引數、輸出引數和輸入/輸出引數,分別用 in、out 和 inout 三個關鍵字標識。其中,輸入引數可以傳遞給乙個儲存過程,輸出引數用於儲存過程需要返回乙個操作結果的情形,而輸入/輸出引數既可以充當輸入引數也可以充當輸出引數。需要注意的是,引數的取名不要與資料表的列名相同,否則儘管不會返回出錯資訊,但是儲存過程的 sql 語句會將引數名看作列名,從而引發不可預知的結果。

3) 過程體

儲存過程的主體部分,也稱為儲存過程體,包含在過程呼叫的時候必須執行的 sql 語句。這個部分以關鍵字 begin 開始,以關鍵字 end 結束。若儲存過程體中只有一條 sql 語句,則可以省略 begin-end 標誌。

在儲存過程的建立中,經常會用到乙個十分重要的 mysql 命令,即 delimiter 命令,特別是對於通過命令列的方式來操作 mysql 資料庫的使用者,更是要學會使用該命令。

在 mysql 中,伺服器處理 sql 語句預設是以分號作為語句結束標誌的。然而,在建立儲存過程時,儲存過程體可能包含有多條 sql 語句,這些 sql 語句如果仍以分號作為語句結束符,那麼 mysql 伺服器在處理時會以遇到的第一條 sql 語句結尾處的分號作為整個程式的結束符,而不再去處理儲存過程體中後面的 sql 語句,這樣顯然不行。為解決這個問題,通常可使用 delimiter 命令將結束命令修改為其他字元。

語法格式如下:delimiter $$

語法說明如下:$$ 是使用者定義的結束符,通常這個符號可以是一些特殊的符號,如兩個「?」或兩個「¥」等。當使用 delimiter 命令時,應該避免使用反斜槓「\」字元,因為它是 mysql 的轉義字元。

在 mysql 命令列客戶端輸入如下sql語句。mysql > delimiter ??

成功執行這條 sql 語句後,任何命令、語句或程式的結束標誌就換為兩個問號「??」了。

若希望換回預設的分號「;」作為結束標誌,則在 mysql 命令列客戶端輸入下列語句即可:mysql > delimiter ;

注意:delimiter 和分號「;」之間一定要有乙個空格。在建立儲存過程時,必須具有 create routine 許可權。可以使用 show procedure status 命令檢視資料庫中存在哪些儲存過程,若要檢視某個儲存過程的具體資訊,則可以使用 show create procedure 。

建立不帶引數的儲存過程

儲存過程的作用是從學生成績資訊表中查詢學生的成績資訊,輸入的 sql 語句和執行過程如下所示。mysql> delimiter //

mysql> create procedure showstuscore()

-> begin

-> select * from tb_students_score;

-> end //

query ok, 0 rows affected (0.09 sec)

mysql怎麼樣建儲存過程

怎麼樣建乙個帶輸入引數的儲存過程,哪位可以給乙個例子的 還有在mysql中建表的時候 比如說 create table customer id int auto increment primary key not null,name varchar 20 not null,age int not n...

MYSQL批量建表儲存過程

分表比較多的情況,如何批量建立,可通過儲存過程實現 建立乙個儲存過程 紅色表結構,藍色為表名及表數量 delimiter create procedure sp create tab begin set str id int 11 not null auto increment comment 自增...

mysql儲存過程批量建表

asif 用mysql的儲存過程建立100張表 mysql delimiter create procedure createtables begin declareiint declaretable namevarchar 20 declaretable prevarchar 20 declare...