MySQL學習要點(9 10)

2021-09-29 01:51:46 字數 4447 閱讀 1598

執行一條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時,返回的東西付給乙個型別相同的標示後其...