圖解面試題:SQL存儲過程有什麼用?

面試中有時候會問:存儲過程有什麼用?看了今天的知識,你就知道如何回答了。

1.存儲過程是什麼?

假如你每天要開車完成一些列重複的操作:車鑰匙啓動車,倒車。現在出現了一款新車,可以自動的完成這些重複的工作。每次你上車以後,車就自動幫助你倒出來了。

同樣的,在工作裏也會經常遇到重複性的工作,這時候就可以把常用的SQL寫好存儲起來,這就是存儲過程。

這樣下次遇到同樣的問題,直接使用存儲過程就可以了,就不需要再重新寫一遍SQL了,這就極大的提高了工作效率。

2.如何使用存儲過程?

使用存儲過程需要:1)先定義存儲過程 2)使用已經定義好的存儲過程。

 (1)無參數的存儲過程

定義存儲過程的語法形式:

create procedure 存儲過程名稱()
begin 
<sql語句> ;
end;

語法裏的begin...end用於表示sql語句的開始和結束。語法裏面的<sql語句>就是重複使用的sql語句。下面通過一個例子看下如何使用。例如查出“學生表”裏的學生姓名。

sql語句是:

select 姓名 
from 學生表;

把這個sql語句放入存儲過程的語法裏,並給這個存儲過程起個名字叫做就a_stuent1:

create procedure a_stuent1()
begin 
select 姓名 
from 學生表;
end;

在navicat裏允許以後,建立的存儲過程就會在下圖的地方:

下次使用存儲過程的用下面sql語句就可以,就不需要重新寫一遍sql了。

call 存儲過程名稱();

(2)有參數的存儲過程

前面的存儲過程名稱後面是(),括號裏面沒有參數。當括號裏面有參數時,就是下面的語法:

create procedure 存儲過程名稱(參數1,參數2,...)
begin 
<sql語句> ;
end;

通過一個案例看下,現在要在“學生表”裏查找出指定學號的學生姓名。如果指定學號是0001,那麼sql語句是:

select 姓名 
from 學生表
where 學號='0001';

現在問題來了,一開始不知道指定學號是哪一個,只有使用的時候才知道業務需求。比如今天要查找學號0001,明天要查找學號002。這時候就需要用到參數,來靈活應對這種情況。把sql語句放入存儲過程語法裏就是:

create procedure getNum(num varchar(100))
begin 
select 姓名 
from 學生表
where 學號=num;
end;

其中getNum是存儲過程的名稱,後面括號裏面的num varchar(100)是參數,參數由2部分組成:參數名稱是num;參數類型是是varchar(100),這裏表示是字符串類型。

存儲過程裏面的sql語句(where 學號=num)使用了這個參數num。這樣在使用存儲過程的時候,給定參數的值就可以靈活的按業務需求來查詢了。

比如現在要查詢學號=0001的學生姓名,那麼就在使用存儲過程的參數中給出學號的值,也就是下面括號裏的0001:

call getNum(0001);

3.有哪些注意事項

1)定義存儲過程語法裏的SQL語句代碼塊必須是完整的sql語句,必須用“;”結尾

create procedure 存儲過程名稱(參數1,參數2,...)
begin 
<sql語句> ;
end;

2)定義不同的存儲過程,要使用不同的存儲過程名稱,相同的存儲過程的名字會引起系統報錯。

4.存儲過程有什麼用?

如果業務比較複雜、重複性工作比較多,存儲過程會比較實用。

把重複要做的事情整理成一步一步的業務步驟,然後把業務步驟寫成sql語句,然後再把sql語句寫到存儲過程的語法裏。就像自動駕駛一樣,把可能遇到的狀況提前規劃好,就不需要自己操縱方向盤,車子就按照我們寫的步驟向前開了。

推薦:如何從零學會sql?


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章