MYSQL儲存過程(六)

2021-07-22 22:38:30 字數 2963 閱讀 6615

1、mysql執行流程,通過儲存過程,可以避免重複語法分和編譯,提高執行效率

2、儲存過程:

(1)是sql語句與控制語句的【預編譯集合】,以【乙個名稱儲存】作為【乙個單元處理】

(2)優點:

· 增強了語句的功能和靈活性:可以通過控制語句對流程進行控制和判斷

· 實現較快的執行速度,只在【第一次呼叫時進行語法分析和編譯】 ,以後直接從記憶體中得到結果

· 減少網路流量

儲存過程語法結構解析

1.建立儲存過程

create

[definer = ]

procedure sp_name ([proc_parameter[,…]]) //可以帶0到多個引數

[characteristic …] routine_body

其中引數

proc_parameter:

[in out inout] param_name type

ps:

in, 表示該引數的值必須在呼叫儲存過程時指定

out, 表示該引數的值可以被儲存過程改變,並且可以返回

inout, 表示該引數的值呼叫時指定,並且可以被改變和返回

2.特性

comment 『string』

ps:

comment:注釋

contains sql:包含sql語句, 但不包含讀或寫資料的語句

no sql:不包含sql語句

reads sql data:包含讀資料的語句

modifies sql data:包含寫資料的語句

sql security 指明誰有許可權來執行

3.過程體

(1)過程體由合法的sql語句構成;

(2)過程體可以是任意sql語句;(增刪改查)

(3)過程體如果為復合結構則使用begin…end語句

(4)復合結構可以使用條件、迴圈等控制語句

使用儲存過程

建立沒有引數的儲存過程

create procedure sp1() select version();

/建立例項**(引數名不能和表中的欄位名相同)/

建立帶有int型別引數的儲存過程:

delimiter // //定界符

create procedure removeuserbyid(in p_id int unsigned) //int 是資料型別

begin delete from users where id = p_id;

end

// //結束

delimiter ;

建立in out引數的儲存過程

delimiter //

create procedure removeruserandreturnusername(in showid int unsigned,out showname int unsigned)

begin

delete from user where id = showid;

select count(id) from user into showname;

end

// select count(id) from user into showname; /* 該語句中的 into 含義就是將 select 語句結果的表示式返回到 showname 變數中 /

call removeruserandreturnusername(10,@nums); /* @nums 所代表的就是使用者變數,可用 select @nums 輸出 /

用 declare 宣告的變數是區域性變數,區域性變數只能存在於 begin…end 之間,且宣告時必須置於 begin…end 的第一行

而通過 select…into…/set @id = 07 這種方法設定的變數我們稱之為使用者變數,只能存在於當前使用者所使用的客戶端有效。

call rmuserandrtusernums(27, @nums);

select @nums; //@nums - 就是使用者變數

建立帶有多個out型別引數的儲存過程

insert test(username) values(『a』),(『b,』),(『c』);

select row_count(); //返回被插入的記錄總數

select * from test;

update test set username = contcat(username, 『–immoc』) where id <= 2;

select row_count(); //返回更新的記錄總數

delimiter //

create procedure rmuserbyageandrtinfos(in p_age smallint unsigned, out delnums smallint unsigned, out leftnums smallint unsigned)

begin

delete from users where age = p_age; //注意變數不同

select row_count() into delnums; //返回插入、刪除和更新的受影響的記錄總數

select count(id) from users into leftnums;

end修改儲存過程:(修改注釋,名稱,不能修改過程體)

alter procedure sp_name [characteristic]

comment 『string』

sql security

刪除儲存過程:

drop procedure [if exists] sp_name;

呼叫儲存過程

call sp_name([parameter[,…]]) //帶引數的儲存過程的呼叫

call sp_name[()] //不帶引數的儲存過程呼叫

call sp1; or call sp1();

六 MySQL儲存過程

在資料庫系統中為了保證資料的完整性和一致性,同時也為了提高其應用效能,大多數的資料庫常採用儲存過程和儲存函式技術 類似於c語言中的函式 mysql5.0以後開始支援儲存過程和儲存函式。1 建立儲存過程 create procedure sp name proc parameter character...

六 MySQL儲存過程

在資料庫系統中為了保證資料的完整性和一致性,同時也為了提高其應用效能,大多數的資料庫常採用儲存過程和儲存函式技術 類似於c語言中的函式 mysql5.0以後開始支援儲存過程和儲存函式。1 建立儲存過程 create procedure sp name proc parameter character...

mysql儲存過程 MySQL儲存過程

在本節中,您將逐步學習如何在mysql中編寫和開發儲存過程。首先,我們向您介紹儲存過程的概念,並討論何時使用它。然後,展示如何使用過程 的基本元素,如建立儲存過程的語句,if else,case,loop,儲存過程的引數。下面每個教程都包含了易於理解的示例和詳細的說明。如果您瀏覽並學習所有教程,您可...