




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
數(shù)據(jù)庫編程
介紹的交互式SQL語言是以單命令的方式操作數(shù)據(jù)庫,缺少靈活數(shù)據(jù)處理功能。
當(dāng)前,許多DBMS系統(tǒng)在標(biāo)準(zhǔn)SQL語言基礎(chǔ)上,引入高級語言程序設(shè)計(jì)的方法,擴(kuò)充程序流程控制語句,具有較強(qiáng)的數(shù)據(jù)操作功能,并兼顧高級語言的編程特點(diǎn)。
本章將介紹SQL程序設(shè)計(jì)技術(shù),包括局部變量、全局變量、控制流語句、游標(biāo)等編程基礎(chǔ)知識。然后,介紹存儲過程、存儲函數(shù)和觸發(fā)器等SQL編程技術(shù)。2第一節(jié)創(chuàng)建存儲過程
一、存儲過程(StoredProcedure)是存儲在數(shù)據(jù)庫服務(wù)器上的SQL程序。存儲過程主要有四個(gè)優(yōu)點(diǎn):(1)可以多次調(diào)用而不必重寫程序,修改存儲過程不影響調(diào)
用的程序,提高程序的可移植性。(2)可以使用一些控制程序流程的語句,編寫復(fù)雜的業(yè)務(wù)處理程序。(3)以編譯后的形式存儲在數(shù)據(jù)庫中,提高系統(tǒng)執(zhí)行速度。(4)調(diào)用存儲過程時(shí)只需要傳遞參數(shù)、結(jié)果和少量必要的消息,從而減少網(wǎng)絡(luò)流量。3二、創(chuàng)建存儲過程1、基本語法格式:CREATEPROCEDUIRE<存儲過程名>([IN|OUT|INOUT]參數(shù)1數(shù)據(jù)類型1,[IN|OUT|INOUT]參數(shù)2數(shù)據(jù)類型2,…)BEGIN存儲過程體;END;參數(shù)分為如下3種類別:IN輸入?yún)?shù)(默認(rèn)為IN參數(shù)),該參數(shù)的值由調(diào)用程序指定。OUT 輸出參數(shù),可將存儲過程計(jì)算結(jié)果返回調(diào)用程序。INOUT具有輸入和輸出兩類參數(shù)的特點(diǎn)。
42、調(diào)用存儲過程的SQL語句
CALL存儲過程名(參數(shù)列表);3、刪除存儲過程的SQL語句
DROPPROCEDURE<存儲過程名>;程序中常用方法:DROPPROCEDUREIFEXISTSPROA;
EXISTS存在量詞,判斷對象是否存在。5
DELIMITER$$DROPPROCEDUREIFEXISTSPROA;CREATEPROCEDUREPROA()BEGINSELECT姓名,工資FROM職工;END$$DELIMITER;說明:為了編譯系統(tǒng)避免沖突,臨時(shí)換一個(gè)不常用的符號做結(jié)束符,先用“DELIMITER$$”將MySQL的結(jié)束符設(shè)置為$$,然后用“DELIMITER;”將結(jié)束符恢復(fù)成分號。4、創(chuàng)建存儲過程的簡單示例創(chuàng)建和調(diào)用存儲過程示例創(chuàng)建存儲過程67第二節(jié)SQL編程基礎(chǔ)
一、BEGIN..END語句BEGIN<SQL語句序列>END二、注釋單行注釋符#
注釋符后直接加注釋內(nèi)容單行注釋符--注釋符后需要加一個(gè)空格多行注釋符/**/從“/*”開始到“*/”結(jié)束,可以跨越多行的注釋內(nèi)容
三、變量MySQL有四種變量類型,即局部變量、用戶變量、會話變量和全局變量,局部變量和用戶變量是根據(jù)用戶的需要,由用戶創(chuàng)建的;會話變量和全局變量屬于系統(tǒng)變量,系統(tǒng)變量在變量名前面有兩個(gè)@,系統(tǒng)變量由系統(tǒng)運(yùn)行需要創(chuàng)建和賦值。1、局部變量
(1)聲明局部變量的語句格式
DECLARE變量名[,…]數(shù)據(jù)類型[DEFAULT默認(rèn)值];
例如DECLAREnameCHAR(8);DECLAREzg_salary,taxDECIMAL(8,2);
8(2)變量賦值語句的三種格式【格式一】SET變量名=表達(dá)式[,變量名=表達(dá)式]...;SETname='李華',zg_salary=8000,tax=zg_salary*0.05;【格式二】SELECT變量名=<表達(dá)式>;SELECTname='李華';【格式三】
SELECT字段名[,字段名,...]INTO變量名[,變量名,...]FROM表名[WHERE<條件表達(dá)式>];(3)顯示變量值的語句
SELECT變量名[,變量名];SELECTname,zg_salary,tax;910在存儲過程中使用變量的示例調(diào)用存儲過程示例112、用戶變量
用戶在客戶端連接數(shù)據(jù)庫后創(chuàng)建的變量,有效期從創(chuàng)建直至數(shù)據(jù)庫斷開為止。用戶變量不用聲明,變量名前面加“@”。
用戶變量賦值的方法有三種:第一種用法:SET@num='E2';或SET@num:='E2’;第二種用法:SELECT@num:='E1’;第三種用法:SELECT@num:=字段名FROM表名WHERE<條件表達(dá)式>;SELECT姓名,工資INTO@name,@zg_salaryFROM職工WHERE職工號LIKE‘E1’;1213四、SQL的控制流語句順序結(jié)構(gòu):程序從上往下依次執(zhí)行。分支結(jié)構(gòu):程序從兩條或多條路徑中選擇一條去執(zhí)行。循環(huán)結(jié)構(gòu):在滿足循環(huán)條件的基礎(chǔ)上,重復(fù)執(zhí)行一段代碼。1.條件分支結(jié)構(gòu)基本語句結(jié)構(gòu):IF<條件表達(dá)式>THEN<語句序列1>;[ELSE<語句序列2>;]ENDIF14IF語句多層嵌套示例IF<條件表達(dá)式1>THEN<語句序列1>ELSEIF<條件表達(dá)式2>THEN<語句序列2>……ELSE<語句序列n>ENDIF;例5.8流程圖創(chuàng)建存儲過程15測試存儲過程的正確性162、CASE語句CASE
WHEN
<條件表達(dá)式1>
THEN
<語句序列1>;
WHEN
<條件表達(dá)式2>
THEN
<語句序列2>;
...
[ELSE
<語句序列N>;]ENDCASE;17例5.9的代碼1819CASE語句的另一種應(yīng)用方法(例5.10)3、循環(huán)語句
WHILE、REPEAT和LOOP結(jié)構(gòu)20三種循環(huán)語句的格式21例5.11使用WHILE語句實(shí)現(xiàn)22例5.11使用REPEAT語句實(shí)現(xiàn)23例5.11使用LOOP語句實(shí)現(xiàn)24第三節(jié)存儲過程的應(yīng)用示例例5.12已知:商品(商品編碼,品名,顏色,花型,規(guī)格,在庫數(shù)量,最高庫存,最低庫存,單價(jià))關(guān)系。創(chuàng)建一個(gè)存儲過程PROF,能夠按照商品編碼查詢庫存狀況。如果商品的庫存數(shù)量大于等于最高庫存,則顯示商品編號、品名、在庫數(shù)量、最高庫存和積壓數(shù)量;如果在庫數(shù)量小于等于最低數(shù)量,則顯示商品編號、品名、在庫數(shù)量、最低庫存和缺貨數(shù)量。25例5.12的源代碼26庫存積壓測試27庫存缺貨測試28第四節(jié)創(chuàng)建存儲函數(shù)1、創(chuàng)建存儲函數(shù)的SQL語句CREATEFUNCTION<函數(shù)名>([參數(shù)數(shù)據(jù)類型[,…]])RETURNS返回值數(shù)據(jù)類型
DETERMINISTIC聲明為確定性函數(shù)BEGINSQL語句序列
(必須有RETURN變量或值)END;說明:函數(shù)可有多個(gè)參數(shù),必須說明參數(shù)和參數(shù)的類型。RETURNS必須說明返回值數(shù)據(jù)類型。DETERMINISTIC聲明函數(shù)是確定性。SQL語句序列是函數(shù)的主體,其中必須包括RETURN
返回函數(shù)值,否則編譯系統(tǒng)提示出錯(cuò)信息。29創(chuàng)建存儲函數(shù)示例30第五節(jié)游標(biāo)及游標(biāo)的應(yīng)用游標(biāo)(CURSOR)相當(dāng)于一個(gè)臨時(shí)表,在表中存放查詢的結(jié)果,為了逐個(gè)地取出這個(gè)表中的元組,設(shè)置一個(gè)指針,指示可取元組的位置;每取一個(gè)元組,指針向前推進(jìn)一個(gè)位置。利用游標(biāo)(CURSOR)機(jī)制,可以將集合操作轉(zhuǎn)換成單記錄的處理方式。31二、游標(biāo)的用法例5.14創(chuàng)建的存儲過程PROG,批量查詢庫存狀況。利用游標(biāo)技術(shù),實(shí)現(xiàn)處理多行數(shù)據(jù)。3233第六節(jié)數(shù)據(jù)庫觸發(fā)器觸發(fā)器的概念
觸發(fā)器(Trigger)是由事件觸發(fā)的某個(gè)操作。它是一種實(shí)現(xiàn)復(fù)雜完整性約束的特殊存儲過程,能夠在符合條件時(shí)自動觸發(fā)的SQL程序。觸發(fā)器的特點(diǎn)(1)觸發(fā)器是數(shù)據(jù)庫的一個(gè)對象,必須創(chuàng)建在一個(gè)特定的表上,并存儲在數(shù)據(jù)庫中。(2)如果對一個(gè)表上的某種操作(如插入、更新或刪除)定義了觸發(fā)器,則該操作發(fā)生時(shí)觸發(fā)器將自動觸發(fā)。(3)觸發(fā)器不能被直接調(diào)用,也不能傳遞或接受參數(shù)。(4)觸發(fā)器和激活它的SQL語句構(gòu)成一個(gè)事務(wù),可以在觸發(fā)器中包含ROLLBACKTRANSACTION語句,根據(jù)觸發(fā)器運(yùn)行的狀態(tài)回滾事務(wù),撤消所有操作。(5)觸發(fā)器是實(shí)現(xiàn)數(shù)據(jù)安全性控制的一種手段。35(1)利用觸發(fā)器能夠?qū)崿F(xiàn)相關(guān)表的級聯(lián)操作。(2)具有更強(qiáng)大和更復(fù)雜的完整性約束定義功能。(3)利用觸發(fā)器可以比較數(shù)據(jù)修改前后的狀態(tài),并可根據(jù)差異而采取不同的對策。(4)應(yīng)用觸發(fā)器能夠簡化復(fù)雜業(yè)務(wù)的實(shí)現(xiàn)方法,用簡單的方法定義復(fù)雜的業(yè)務(wù)規(guī)則和完整性約束條件。(5)由于觸發(fā)器是一種特殊的存儲過程,它具備存儲過程的優(yōu)點(diǎn)。2、觸發(fā)器的優(yōu)點(diǎn)二、創(chuàng)建觸發(fā)器CREATETRIGGER<觸發(fā)器名稱>--創(chuàng)建觸發(fā)器的名稱BEFORE|AFTER--設(shè)置事件發(fā)生前或后執(zhí)行INSERT|UPDATE|DELETE|
--設(shè)定觸發(fā)的事件ON<表名>--創(chuàng)建觸發(fā)器的表FOREACHROW
--對每一行執(zhí)行一次<SQL語句序列>--觸發(fā)的語句系列36NEW將要(BEFORE)或已經(jīng)(AFTER)變動的新數(shù)據(jù)OLD將要(BEFORE)或已經(jīng)(AFTER)變動的舊數(shù)據(jù)
使用方法:NEW.字段名
(為相應(yīng)表某一列名的新值)OLD.字段名
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 縣區(qū)培訓(xùn)材料管理辦法
- 跨境旅游品牌策略-洞察及研究
- 村級畜牧獸醫(yī)管理辦法
- 廈門采購方式管理辦法
- 自適應(yīng)調(diào)優(yōu)算法-洞察及研究
- 僑務(wù)救助資金管理辦法
- 公益崗位動態(tài)管理辦法
- 江西見證取樣管理辦法
- 公司出售資產(chǎn)管理辦法
- 運(yùn)輸管理系統(tǒng)設(shè)計(jì)與開發(fā)模板
- 克萊德貝爾格曼吹灰器說明書(Jetblower)
- 廣西大學(xué)《電機(jī)學(xué)》期末復(fù)習(xí)題及參考答案
- 2024年度破碎機(jī)生產(chǎn)原料供應(yīng)與采購合同
- 外賣配送人員勞動合同
- 《義務(wù)教育數(shù)學(xué)課程標(biāo)準(zhǔn)(2022年版)》初中內(nèi)容解讀
- 精神疾病患者的麻醉管理
- 高一物理競賽試題及答案
- 醫(yī)院預(yù)約平臺建設(shè)方案
- 生命體征課件教學(xué)課件
- 《烏魯木齊市國土空間總體規(guī)劃(2021-2035年)》
- HJ 651-2013 礦山生態(tài)環(huán)境保護(hù)與恢復(fù)治理技術(shù)規(guī)范(試行)
評論
0/150
提交評論