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,儲存過程的引數。下面每個教程都包含了易於理解的示例和詳細的說明。如果您瀏覽並學習所有教程,您可...