變數
系統變數
變數由系統提供,不是使用者自定義的,屬於伺服器層面
全域性變數
會話變數
# 如果是全域性級別,則需要加global,如果是會話級別,則需要加session,如果不寫,則預設是會話
# 檢視全域性變數
show global variables;
show global variableslike "%char%";
# 檢視會話變數
show session variables; # 預設是會話變數
show session variableslike "%char%";
# 檢視指定的某個系統變數的值select @@系統變數名; # 預設檢視的是會話變數select @@global.系統變數名;
# 為系統變數賦值set global|[session] 系統變數名=值; # 預設是會話變數set @@global|[session].系統變數名=值; # 預設是會話變數
自定義變數
使用者自定義的變數
使用者變數:針對於當前會話連線有效,同於會話變數的作用域
# 申明並初始化set @使用者變數名=值;set @使用者變數名:=值;select @使用者變數名:=值;
# 賦值或更新使用者變數的值set @使用者變數名=值;set @使用者變數名:=值;select @使用者變數名:=值;select 字段 into 變數名 from表select count(*) into @count1 fromstudent;
# 檢視使用者變數名select @使用者變數名;
區域性變數:僅僅在begin end中有效,應用在begin end的第一句話
# 宣告declare變數名 型別;declare 變數名 型別 default值;
# 賦值set 區域性變數名=值set 區域性變數名:=值select @區域性變數名:=值select 字段 into @區域性變數名 from表;
#檢視select 區域性變數名
區域性變數和使用者變數
使用者變數: 當前會話 會話的任何地方定義和使用 必須加@符號,不用限定型別
區域性變數: begin end中 只能在begin end中,且為第一句話 一般不加@符號,需要限定型別
儲存過程
介紹一組預先編譯好的sql語句的集合,理解成批處理語句
提高**的重用性
簡化操作
減少了編譯次數,並且減少了和資料庫伺服器的連線次數,提高了效率
建立create procedure儲存過程名(引數列表)begin儲存過程體(一組合法的sql語句)end
注意:引數列表包含三個部分 引數模式 引數名 引數型別
如果儲存過程體僅僅只有一條語句,begin end可以省略
儲存過程體中的每條sql語句的結尾必須要加分號
儲存過程的結尾可以使用delimiter重新設定
引數模式:
in: 該引數可以作為輸入,也就是該引數需要呼叫方法傳入值
out: 該引數可以作為輸出,也就是該引數可以作為返回值
inout: 既可以作為輸入也可以作為輸出,既要傳入值,也可以返回值
呼叫call 儲存過程名(實參列表);
案例/*1. 空參列表
案例1: 插入到admin表中五條記錄
delimiter $
create procedure myp1()
begin
insert into admin(name, `password`)
values('jhon1', "000"),('jhon2',"001");
end $
call myp1()$
select * from admin$
2. in模式引數, 預設是in
案例: 建立儲存過程實現 根據girl name 查詢對應的boy資訊
create procedure myp2(in g_name varchar(20) )
begin
select b.* from boys b right join girls g on b.id=g.boy_id where g.name=g_name;
end $
call myp2('mary')$
案例: 建立儲存過程實現,使用者是否登入成功
create procedure myp3(in name varchar(20), in password varchar(20))
begin
declare res int default '';
select count(*) into res from admin where admin.name=name and admin.password=password;
select if(res>0,'successfule','failed');
end $
call myp3('root','123')$
3. out模式的儲存過程
案例: 根據girl name ,返回boy name
create procedure myp5(in girl_nam varchar(20), out boy_name varchar(20), out age int)
begin
select b.name,b.age into boy_name,age from boys b inner join girls g on b.id=g.boy_id where g.name=girl_name;
end $
call myp5('mary', @bname, @age)$
select @banme,@age$
4. inout 模式引數
案例: 傳入a和b兩個值。最終a和b都翻倍並返回
create procedure myp6(inout a int, inout b int)
begin
set a=a*2;
set b=b*2;
end $
set @a=20$
set @b=20$
call myp6(@a,@b)$
select @a,@b$
刪除儲存過程
drop procedure 儲存過程名
檢視儲存過程
show create procedure 儲存過程名
函式介紹
一組預先編譯好的sql語句的集合,理解成批處理語句
提高**的重用性
簡化操作
減少了編譯次數,並且減少了和資料庫伺服器的連線次數,提高了效率
對比儲存
儲存過程: 可以有0或多個返回, 適合做批量插入、批量更新
函式 : 有且僅有乙個返回,適合做處理資料後返回乙個結果
建立create function函式名(引數列表) returns返回型別begin函式體end
注意:引數列表包含兩部分: 引數名 引數型別
函式體必須有return語句: return 值
函式體僅有一句話時,可以省略begin end
使用delimiter語句設定結束標記
呼叫select 函式名(引數列表)
案例/*1. 無引數返回
案例: 返回員工個數
delimiter $
create function myf1 returns int
begin
declare c int default 0;
select count(*) into c from employees;
return c;
end $
select myf1()$
2. 有引數返回
案例: 根據員工名,返回他的工資
create function(name varchar(20)) returns double
begin
set @sal=0;
select salary into @sal from employees e where e.name =name;
return @sal;
endselect myf2('jhon')$*/
檢視函式
show create function 函式名
刪除函式
drop function 函式名;
mysql過程函式 mysql 儲存過程和函式
乙個儲存程式是可以被儲存在伺服器中的一套sql語句。可以通過客戶端用create procedure和create function 建立乙個儲存過程或函式。在客戶端通過call語句 呼叫所建立的存數過程或函式。語法 建立儲存子程式 create procedure sp name proc par...
Mysql 儲存過程和函式
一 儲存過程 procedure 本質上沒區別,執行的本質都一樣。只是函式有如 只能返回乙個變數的限制。而儲存過程可以返回多個。函式是可以嵌入在sql中使用的,可以在select中呼叫,而儲存過程要讓sql的query 可以執行,需要把 mysql real connect 的最後乙個引數設定為cl...
mysql儲存過程和函式
儲存過程是一系列sql語句集,具有靈活性,速度快,批處理 安全等特點 缺點 程式設計複雜 需要建立資料庫物件的許可權 掌握儲存過程的定義 檢視 修改 刪除 定義儲存過程 create procedure pro name parameter type characteristic routine b...