1. 程式人生 > >輕松掌握MySQL數據庫存儲過程和觸發器原理

輕松掌握MySQL數據庫存儲過程和觸發器原理

drop execute 數據 所有 type ava sql img oracl

1.1 什麽是存儲過程
帶有邏輯的SQL語句。有條件判斷,有循環,帶流程控制。
客戶端:SQLyog、Navicat
1.2 存儲過程的特點
優點:執行效率高,因為存儲過程是在數據庫服務端執行的。
缺點:MySql的存儲過程不能在oracle或SQLserver中執行,移植性差。
1.3 創建數據庫
create databasedb20171213;//execute
usedb20171213;//execute
create tableemp(depno varchar(12); ****);
1.4 創建存儲過程
創建存儲過程的時候要事先指定一個結束標誌
delimiter? $
create proceduretest_pro1(可以帶參(包括輸入、輸出參數))
begin
select from emp;
end? $
1.5 調用存儲過程
關鍵字:call
calltest_pro1();
?
1.6 帶參存儲過程
in: 表示輸入參數,可以攜帶數據到存儲過程中去;
out: 表示返回參數,可以從存儲過程中返回結果;
inout: 表示輸入輸出參數,既有輸入又有輸出。
1.6.1 帶有輸入參數:
delimiter? $
create procedure test_pro_in(in id int)//in不能省略(關鍵字)
begin
select
from emp where empno = id;
end? $
call test_pro_in(10);//一定要帶參
?帶有多個輸入參數
create procedure test_pro_in(in id1 int, in id2 int)
1.6.2 帶有輸出參數
delimiter? $
create procedure test_pro_out(out num int)
begin
/給輸出參數賦值,關鍵字set/
set? num = 10;
end? $
關鍵字建議大寫
?
call test_pro_out(@val)//@定義變量val,val接收存儲過程的輸出值
select @val?? //查詢變量值
輸出參數一定要設置相應類型的初始,否則不管怎麽計算得出的結果都是null值。
1.6.3 帶輸入輸出參數
關鍵字:inout
delimiter $
create procedure test_pro_inout(inout n int)
begin
set n = n + 100;
end $
set @nn = 8
call test_pro_inout(@nn)
select @nn
1.7 MySQL中的變量
全局變量、局部變量、會話變量(session變量)
1.7.1 全局變量
不是我們能定義的,是MySQL定義的,雖然不能定義,但是可以改變它的值。
//查詢有哪些全局變量
show variables;//顯示所有的全局變量
show variables like ‘char%”;?//模糊匹配查詢
查詢單個全局變量不能用show,應該用select
select @@character_set_client;
給全局變量賦值:
set @@character_set_client = gbk;??//只在當前鏈接中有效(即當前客戶端)
1.7.2 會話變量會話變量以@開頭
br/>會話變量以@開頭
set @vall = 10;
定義一個會話變量時一定要指定值?
存在範圍:
會話(一個客戶端鏈接)。只在當前客戶端有效
cmd登錄:MYSQL-uroot -proot
?use db20171213?? //切換到特定數據庫
查詢:
select @vall;
1.7.2 局部變量
局部變量的位置:存儲過程內。
關鍵字:declare
delimiter? $
create procedure test_pro_loc
begin
declare i int default 1;
select * from emp;
end? $
刪除存儲過程:drop proceduretest_pro_inout;
以上是有關於MySQL數據庫存儲過程和觸發器原理更多技術文章和經驗交流大家可以加群788692365,阿裏P8在此群,一起學習交流架構經驗。https://www.gupaoedu.com/video.html 這裏還有相關java架構免費學習視頻可以觀看。
技術分享圖片

這個七夕咕泡學院送你520七夕告白金速來領取吧!
技術分享圖片

輕松掌握MySQL數據庫存儲過程和觸發器原理