執行一條sql語句需要經過一系列流程:
儲存過程和函式:就是事先經過編譯並儲存在資料庫中的一段sql語句的集合。
使用好處:
1、簡化應用開發人員的很多任務作
2、減少資料在資料庫和應用伺服器之間的傳輸
3、提高了資料處理的效率
● 建立儲存過程:
create
procedure 儲存過程名 (
[proc_parameter[
,…]]
)[characteristic…]routine_body
● 建立函式:
create
function 函式名(
[func_parameter[
,…]]
)returns
type
[characteristic…]routine_body
引數解釋:
• proc_parameter : [in|out|inout] param_name type
• func_paramter : param_name type
• type:任何有效的mysql資料型別
• characteristic:
language sql(預設,且推薦)
|[not] deterministic
||sql security
|comment 『string』
• rountine_body : 有效的sql 過程語句
● 呼叫儲存過程:
call 儲存過程名(引數列表)
● 呼叫函式:
select 函式名(引數列表)
● 修改儲存過程:
alter
procedure 儲存過程名 [charactristic…]
● 修改函式:
alter
function 函式名 [charactristic…]
characteristic:
|sql security
|comment 『string』
說明:一次只能刪除乙個儲存過程或者函式,並且要求有該過程或函式的alter routine 許可權
● 刪除儲存過程:
drop
procedure[if
exists
] 儲存過程名
● 刪除函式:
drop
function[if
exists
] 函式名
1.檢視儲存過程或函式的狀態:
show status
like 儲存過程或函式名
2.檢視儲存過程或函式的定義:
show
create 儲存過程或函式名
3.通過檢視information_schema.routines了解儲存過程和函式的資訊
select
*from rountines where rounine_name =儲存過程名|函式名
1.建立函式,實現傳入工種名,返回該工種的員工人數
use myemployees;
drop
function emfun if
exists
;delimiter $
create
function emfun(jobid varchar(20
))returns
intbegin
declare res int
;select
count(*
)into res
from employees
where job_id = jobid;
return res;
end$
#查詢it_prog的員工人數
select emfun(
"it_prog"
);
2.建立函式,實現傳入員工名,返回該員工的領導名
drop
function emfun2 if
exists
;delimiter $
create
function emfun2(emname varchar(20
))returns
varchar(20
)begin
declare majname varchar(20
);select last_name into majname
from employees
where employee_id = ifnull(
(select manager_id from employees
where last_name = emname)
,'null');
return majname;
end$
#查詢kochhar的領導(如果查詢無領導員工會返回多行報錯)
select emfun2(
"kochhar"
);
3.建立函式,實現傳入成績,如果成績》90,返回a,如果成績》80,返回b,如果成績》60,返回c,否則返回d
delimiter $
create
function test_if(score float
)returns
char
begin
declare ch char
default
'a';
if score>
90then
set ch=
'a';
elseif score>
80then
set ch=
'b';
elseif score>
60then
set ch=
'c';
else
set ch=
'd';
endif
;return ch;
end$
select test_if(
87)$
1.建立儲存過程,如果工資<2000,則刪除,如果5000>工資》2000,則漲工資1000,否則漲工資500
delimiter $
create
procedure test_if_pro(
in sal double
)begin
if sal<
2000
then
delete
from employees where employees.salary=sal;
elseif sal>=
2000
and sal<
5000
then
update employees set salary=salary+
1000
where employees.
`salary`
=sal;
else
update employees set salary=salary+
500where employees.
`salary`
=sal;
endif
;end $
call test_if_pro(
2100
);
2.建立儲存儲存過程或函式實現傳入兩個女神生日,返回大小
delimiter $
create
procedure amdpro3(
in n1 datetime
,in n2 datetime
,out result int
)begin
select datediff(n1,n2)
into result;
end $
call amdpro3(
'1993-02-03 00:00:00'
,'1992-02-03 00:00:00'
,@result);
select
@result
;
mysql的技術要點 Mysql 鎖技術要點
myisam和innodb的區別 mysql預設採用的是myisam。myisam不支援事務,而innodb支援。innodb的autocommit預設是開啟的,即每條sql語句會預設被封裝成乙個事務,自動提交,這樣會影響速度,所以最好是把多條sql語句顯示放在begin和commit之間,組成乙個...
Mysql 掌握要點
innodb與myisam的最大不同有兩點 一是支援事務 transaction 二是採用了行級鎖。行級鎖和表級鎖本來就有許多不同之處,另外,事務的引入也帶來了一些新問題。分表 mysql大表優化方案 定義 所謂事務,它是乙個操作序列,這些操作要麼都執行,要麼都不執行,它是乙個不可分割的工作單位。a...
C 學習要點
1.傳指標時,我們可以通過指標來修改它在外部所指向的內容。但如果要修改外部指標所指向的物件是不可能的。例如傳遞外部指標到函式內來分配空間,必須傳遞指標的指標或指標的引用。2.char carry 10 編譯器會將其後所有的東西都置0 3.函式返回值為const時,返回的東西付給乙個型別相同的標示後其...