版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL4.1SQL概述StructuredQueryLanguage結(jié)構(gòu)化查詢語(yǔ)言介于關(guān)系代數(shù)與關(guān)系演算之間,功能包括:
數(shù)據(jù)查詢、數(shù)據(jù)操縱、數(shù)據(jù)定義、數(shù)據(jù)控制
已成為關(guān)系數(shù)據(jù)庫(kù)領(lǐng)域中一個(gè)主流語(yǔ)言發(fā)展過(guò)程
1974年由Boyce和Chamberlin提出
1975-1979年在IBM研制的System-R上實(shí)現(xiàn)
SQL-86——
第一個(gè)SQL標(biāo)準(zhǔn)
SQL-89——
第二次公布SQL標(biāo)準(zhǔn)
SQL-92——
第三次公布SQL標(biāo)準(zhǔn)
SQL-99——
第四次公布SQL標(biāo)準(zhǔn)(SQL3)SQL的特點(diǎn)
一種一體化的語(yǔ)言SQL具有集數(shù)據(jù)查詢、數(shù)據(jù)操縱、數(shù)據(jù)定義、數(shù)據(jù)控制為一體的特點(diǎn)。一種高度非過(guò)程化的語(yǔ)言面向集合的操作方式同一種語(yǔ)法結(jié)構(gòu)提供兩種使用方法聯(lián)機(jī)交互使用方式——
自含式語(yǔ)言嵌入主語(yǔ)言的使用方式——
嵌入式語(yǔ)言語(yǔ)言簡(jiǎn)潔、易學(xué)易用SQL的命令SQL功能命令動(dòng)詞數(shù)據(jù)定義CREATE,DROP,ALTER數(shù)據(jù)操縱SELECTINSERT,UPDATE,DELETE數(shù)據(jù)控制GRANT,REVOKESQL語(yǔ)言的基本概念
基本表(basetable)
——
本身獨(dú)立存在的表。在SQL中一個(gè)關(guān)系對(duì)應(yīng)一個(gè)表。每個(gè)基本表邏輯上對(duì)應(yīng)一個(gè)存儲(chǔ)文件,可以帶若干索引。視圖(View)
——
從一個(gè)基本表或幾個(gè)基本表或其他視圖導(dǎo)出的表。視圖本身不獨(dú)立存儲(chǔ)在數(shù)據(jù)庫(kù)中,即數(shù)據(jù)庫(kù)中只存放視圖的定義,不存放它對(duì)應(yīng)的數(shù)據(jù)。注意:在用戶眼中,基本表和視圖一樣都是關(guān)系,都可以用SQL語(yǔ)言進(jìn)行查詢。是一個(gè)虛表SQL對(duì)數(shù)據(jù)庫(kù)三級(jí)模式結(jié)構(gòu)的支持SQL視圖1存儲(chǔ)文件1存儲(chǔ)模式外模式模式存儲(chǔ)文件2存儲(chǔ)文件3存儲(chǔ)文件4基本表1基本表2基本表3基本表4視圖1用戶4.2SQL的數(shù)據(jù)定義
SQL的數(shù)據(jù)定義功能包括:
定義基本表、定義視圖、定義索引(還有:定義數(shù)據(jù)庫(kù)、定義規(guī)則、定義存儲(chǔ)過(guò)程)SQL的數(shù)據(jù)定義語(yǔ)句一、基本表的定義一般格式CREATETABLE表名(列定義[,列定義]...[其它參數(shù)]);
其中,列定義
格式為:列名類型[列級(jí)完整性約束]
其它參數(shù)
定義表級(jí)完整性約束條件列級(jí)完整性約束如:不允許空值語(yǔ)句含義執(zhí)行CREATE語(yǔ)句后,在數(shù)據(jù)庫(kù)中建立一個(gè)表框架(空表),表的描述存于數(shù)據(jù)字典中。例:CREATETABLE訂購(gòu)單(職工號(hào)CHAR(2),
供應(yīng)商號(hào)CHAR(2),訂購(gòu)單號(hào)CHAR(4)NOTNULL,訂購(gòu)日期DATE);二、修改基本表的結(jié)構(gòu)一般格式ALTERTABLE表名[ADD(列定義[,列定義]...)
[MODIFY(列名類型[,列名類型]...)]
[DROP完整性約束名];增加新列修改原有的列定義刪除指定的約束注意:無(wú)論基本表中原來(lái)是否有數(shù)據(jù),新加的列一律為空值;不能修改屬性列的名稱;沒(méi)有提供刪除屬性列的語(yǔ)句。例:ALTERTABLE訂購(gòu)單ADD(完成日期DATE);
ALTERTABLE訂購(gòu)單MODIFY(職工號(hào)CHAR(4));
三、刪除基本表一般格式
DROPTABLE表名;語(yǔ)句含義執(zhí)行DROP語(yǔ)句后,將基本表的定義(表框架)連同它的所有元組、索引以及由它導(dǎo)出的所有視圖全部刪除,并釋放相應(yīng)的存儲(chǔ)空間。例DROPTABLE訂購(gòu)單;四、索引的定義和維護(hù)索引的作用加快數(shù)據(jù)查詢速度保證數(shù)據(jù)的唯一性加快連接速度建立索引的原則由DBA(DBO)和DBMS完成索引的建立、刪除和維護(hù)大表應(yīng)該建立索引一個(gè)基本表的索引不要太多根據(jù)查詢要求建立索引索引的建立和刪除建立索引
CREATE[UNIQUE][CLUSTER]INDEX索引名
ON基本表名(列名[次序][,列名[次序]]...);次序:索引值的排列次序,ASC|
DESC,缺省值為ASC。刪除索引
DROPINDEX索引名;
索引的建立和刪除例
CREATEUNIQUEINDEXpidxON訂購(gòu)單(訂購(gòu)單號(hào));
CREATEINDEXsupp_idxON訂購(gòu)單(供應(yīng)商號(hào));
DROPINDEXsupp_idx;4.3SQL的數(shù)據(jù)查詢
SQL數(shù)據(jù)查詢語(yǔ)句的基本格式:
SELECT目標(biāo)列——
要查詢的內(nèi)容
FROM基本表或視圖——
涉及的關(guān)系名
[WHERE條件表達(dá)式]——
查詢條件
[GROUPBY列名1[HAVING條件表達(dá)式]]——
分組
[ORDERBY列名2[ASC|DESC]]——
排序
[COMPUTE短語(yǔ)];——
帶明細(xì)的分組匯總
兩個(gè)基本表倉(cāng)庫(kù)職工SQL數(shù)據(jù)查詢——簡(jiǎn)單查詢(1)檢索工資多于1230元的職工號(hào)。
SELECT職工號(hào)
FROM職工
WHERE工資>1230;
SELECT*FROM職工
WHERE工資>1230;SQL數(shù)據(jù)查詢——簡(jiǎn)單查詢(2)檢索選修課程的學(xué)生號(hào)。
SELECTDISTINCTSnoFROMSC;檢索計(jì)算機(jī)科學(xué)系的學(xué)生姓名和出生年份。
SELECTSN,2005-SAFROMSWHERESD=‘CS’;SQL數(shù)據(jù)查詢——連接查詢找出工資多于1230元的職工號(hào)和他們所在的城市。
SELECT職工號(hào),城市
FROM職工,倉(cāng)庫(kù)
WHERE(職工.倉(cāng)庫(kù)號(hào)=倉(cāng)庫(kù).倉(cāng)庫(kù)號(hào))
AND(工資>1230);SQL數(shù)據(jù)查詢——嵌套查詢(1)檢索選修D(zhuǎn)B課程的學(xué)生學(xué)號(hào)和名字。
SELECTSno,SNFROMSWHERESnoIN
SELECTSnoFROMSCWHERECnoIN
SELECTCnoFROMCWHERE
CN=‘DB’;
從內(nèi)到外逐層處理C4S2,S3,S6SELECTSno,SNFROMS,C,SCWHERES.Sno=SC.Sno
ANDC.Cno=SC.CnoANDCN=‘DB’;SQL數(shù)據(jù)查詢——嵌套查詢(2)查詢所有職工工資都多于1210元的倉(cāng)庫(kù)信息。
SELECT*FROM倉(cāng)庫(kù)WHERE倉(cāng)庫(kù)號(hào)NOTINSELECT倉(cāng)庫(kù)號(hào)
FROM職工
WHERE工資<=1210;WH1SQL數(shù)據(jù)查詢——幾種特殊算符WHERE子句的條件表達(dá)式中可以使用的幾種形式:
列名BETWEEN低值A(chǔ)ND高值列名NOTBETWEEN低值A(chǔ)ND高值列名IN(值1,值2,……
)列名NOTIN(值1,值2,……
)列名LIKE字符串常量—可以用通配符‘%’和‘_’
列名NOTLIKE字符串常量列名ISNULL
列名ISNOTNULLSQL數(shù)據(jù)查詢——相關(guān)子查詢(1)與子查詢相關(guān)的另外兩種嵌套查詢
形如:
[NOT]EXISTS(子查詢)
即:檢查在子查詢中是否存在或不存在元組。表達(dá)式比較算符[ANY|ALL|SOME](子查詢)
即:對(duì)ANY、SOME,在比較運(yùn)算中只要子查詢中有一元組使結(jié)果為真,則結(jié)果為真;對(duì)ALL,要求子查詢中的所有元組都使結(jié)果為真,結(jié)果才為真。SQL數(shù)據(jù)查詢——相關(guān)子查詢(2)檢索選修C2課程的學(xué)生名。
SELECTSNFROMSWHEREEXISTS
(SELECT*FROMSCWHERESno=S.SnoANDCno=‘C2’);
按外層元組的值逐個(gè)處理SQL數(shù)據(jù)查詢——相關(guān)子查詢(3)檢索有職工工資大于WH1倉(cāng)庫(kù)中任意一職工工資的倉(cāng)庫(kù)號(hào)。
SELECTDISTINCT倉(cāng)庫(kù)號(hào)
FROM職工
WHERE工資>ANY
(SELECT工資
FROM職工
WHERE倉(cāng)庫(kù)號(hào)=‘WH1’);1210,1250SQL數(shù)據(jù)查詢——排序按職工工資值的降序列出全部職工的信息。
SELECT*FROM職工
ORDERBY工資DESC;SQL數(shù)據(jù)查詢——庫(kù)函數(shù)SQL為了增強(qiáng)檢索功能,方便計(jì)算提供若干庫(kù)函數(shù):
COUNTSUMAVGMAXMIN給出WH1倉(cāng)庫(kù)的職工人數(shù)。
SELECTCOUNT(*)
FROM職工
WHERE倉(cāng)庫(kù)號(hào)=’WH1‘;給出WH1倉(cāng)庫(kù)的職工工資總和。
SELECTSUM(工資)
FROM職工
WHERE倉(cāng)庫(kù)號(hào)=‘WH1’;
SQL數(shù)據(jù)查詢——分組(1)求每個(gè)倉(cāng)庫(kù)的職工的平均工資。
SELECT倉(cāng)庫(kù)號(hào),AVG(工資)FROM職工
GROUPBY倉(cāng)庫(kù)號(hào);
求有一個(gè)以上職工的倉(cāng)庫(kù)的平均工資。SELECT倉(cāng)庫(kù)號(hào),COUNT(*),AVG(工資)FROM職工GROUPBY倉(cāng)庫(kù)號(hào)
HAVINGCOUNT(*)>=2;SQL數(shù)據(jù)查詢——分組(2)列出全部職工信息并計(jì)算各倉(cāng)庫(kù)的平均工資和工資小計(jì),最后給出全體職工的平均工資和工資總和。
SELECT倉(cāng)庫(kù)號(hào),職工號(hào),工資
FROM職工
ORDERBY倉(cāng)庫(kù)號(hào)
COMPUTEAVG(工資),SUM(工資)BY倉(cāng)庫(kù)號(hào)
COMPUTEAVG(工資),SUM(工資);帶明細(xì)的分組匯總倉(cāng)庫(kù)號(hào)職工號(hào)工資WH1E31210WH1E7125012302460WH2E11220WH2E4125012352470WH3E61230123012301231.56160SQL數(shù)據(jù)查詢——自連接查詢查詢每門課的間接先修課。
在同一個(gè)關(guān)系C中進(jìn)行連接,為加以區(qū)分引入別名。
SELECTFIRST.Cno,SECOND.PCnoFROMCFIRST,CSECONDWHEREFIRST.Pcno=SECOND.Cno;FIRSTSECONDSQL數(shù)據(jù)查詢——外部連接查詢內(nèi)連接:結(jié)果集中只保留符合連接條件的元組(一般、等值、自然)外部連接:查詢結(jié)果集中保留非匹配元組左外部連接(*=):結(jié)果集中保留連接表達(dá)式左表中非匹配元組右外部連接(=*):結(jié)果集中保留連接表達(dá)式右表中非匹配元組例:外部連接查詢工號(hào)姓名性別年齡部門1010李勇男20111011劉晨女191012王明女22121014張立男2113部門號(hào)部門名稱電話11生產(chǎn)科56612計(jì)劃科57813一車間46714科研所職工表部門表內(nèi)連接SELECT職工.*,部門名稱,電話FROM職工,部門WHERE職工.部門=部門.部門號(hào);工號(hào)姓名性別年齡部門部門名稱電話1010李勇男2011生產(chǎn)科5661012王明女2212計(jì)劃科5781014張立男2113一車間467左外連接SELECT職工.*,部門名稱,電話FROM職工,部門WHERE職工.部門*=部門.部門號(hào);工號(hào)姓名性別年齡部門部門名稱電話1010李勇男2011生產(chǎn)科5661011劉晨女191012王明女2212計(jì)劃科5781014張立男2113一車間467右外連接SELECT職工.*,部門名稱,電話FROM職工,部門WHERE職工.部門=*部門.部門號(hào);工號(hào)姓名性別年齡部門部門名稱電話1010李勇男2011生產(chǎn)科5661012王明女2212計(jì)劃科5781014張立男2113一車間467科研所SQL數(shù)據(jù)查詢—組合查詢(并)求選修了C1或C2課程的學(xué)生學(xué)號(hào)SELECTSNOFROMSCOWHERECNO=‘C1’UNIONSELECTSNOFROMSCOWHERECNO=‘C2’;SQL數(shù)據(jù)查詢—組合查詢(交)求選修了C1和C2課程的學(xué)生學(xué)號(hào)SELECTSNOFROMSCOWHERECNO=‘C1’INTERSECTSELECTSNOFROMSCOWHERECNO=‘C2’;SQL數(shù)據(jù)查詢—組合查詢(差)求選修了C1但未選C2課程的學(xué)生學(xué)號(hào)SELECTSNOFROMSCOWHERECNO=‘C1’MINUSSELECTSNOFROMSCOWHERECNO=‘C2’;求選修了C2課程的學(xué)生姓名SELECTSNFROMSWHEREEXISTS(SELECT*FROMSCWHERES.Sno=SnoANDCno=‘C2’);SELECTSNFROMS,SCWHERES.Sno=SC.SnoANDCno=‘C2’;求沒(méi)有選修C2課程的學(xué)生姓名SELECTSNFROMSWHERENOTEXISTS(SELECT*FROMSCWHERES.Sno=SnoANDCno=‘C2’);SELECTSNFROMS,SCWHERES.Sno=SC.SnoANDCno<>‘C2’;×查詢選修了全部課程的學(xué)生姓名SELECTSNFROMSWHERENOTEXISTS(SELECT*FROMCWHERENOTEXISTS(SELECT*FROMSCWHERES.Sno=SnoANDC.Cno=Cno));求至少選修了‘S2’所選修的全部課程的學(xué)生學(xué)號(hào)和姓名SELECTSno,SNFROMSWHERENOTEXISTS(SELECT*FROMSC,SC1WHERESC1.Sno=‘S2’ANDNOTEXISTS(SELECT*FROMSC,SC2WHERES.Sno=SC2.SnoANDSC2.Cno=SC1.Cno));別名4.4SQL的數(shù)據(jù)更新SQL的數(shù)據(jù)更新功能包括:
插入數(shù)據(jù)、修改數(shù)據(jù)、刪除數(shù)據(jù)
不同于數(shù)據(jù)定義,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的操作。SQL的三類數(shù)據(jù)更新語(yǔ)句:插入語(yǔ)句——INSERT有兩種形式修改語(yǔ)句——UPDATE
刪除語(yǔ)句——DELETE一、插入數(shù)據(jù)插入單個(gè)元組
INSERTINTO表名[(列名1[,列名2]…
)]VALUES(常量1[,常量2]…);例:插入一個(gè)學(xué)生記錄
INSERTINTOSVALUES(‘S7’,‘程成‘,‘CS’,19);例:插入一個(gè)選課記錄
INSERTINTOSC(Sno,Cno)VALUES(‘S7’,’C2’);沒(méi)有列出的G取空值插入數(shù)據(jù)——
批量插入
插入子查詢結(jié)果——
批量插入
INSERTINTO表名[(列名1[,列名2]…
)]
子查詢;例:將每個(gè)系學(xué)生的平均年齡存入數(shù)據(jù)庫(kù)。
CREATETABLEDeptAge(SdeptCHAR(15),
AvgageDEC(4,1));
INSERTINTODeptAge(Sdept,Avgage)SELECTSD,AVG(SA)FROMSGROUPBYSD;按系分組二、修改數(shù)據(jù)修改操作又稱更新操作,其語(yǔ)句的一般格式為:
UPDATE表名
SET列名1=表達(dá)式1[,列名2=表達(dá)式2]…[WHERE條件表達(dá)式];語(yǔ)句含義對(duì)指定表中滿足條件的元組,按SET子句中的表達(dá)式的值修改相應(yīng)的列值。若無(wú)WHERE子句,則修改全部元組。允許帶子查詢修改數(shù)據(jù)(1)給WH1倉(cāng)庫(kù)的職工提高10%的工資。
UPDATE職工
SET工資=工資*1.10WHERE倉(cāng)庫(kù)號(hào)=‘WH1’;將北京職工的工資提高10%。
UPDATE職工
SET工資=工資*1.10WHERE倉(cāng)庫(kù)號(hào)INSELECT倉(cāng)庫(kù)號(hào)
FROM倉(cāng)庫(kù)
WHERE城市=‘北京’;修改數(shù)據(jù)(2)修改學(xué)號(hào),將‘97036’號(hào)學(xué)生改為‘98070’號(hào)。
修改學(xué)生關(guān)系表S:
UPDATESSETSno=‘98070’WHERESno=‘97036’;
修改學(xué)生選課關(guān)系表SC:
UPDATESCSETSno=‘98070’WHERESno=‘97036’;注意參照完整性,保持修改操作與數(shù)據(jù)庫(kù)的一致性。三、刪除數(shù)據(jù)刪除語(yǔ)句的一般格式
DELETEFROM表名
[WHERE條件表達(dá)式];語(yǔ)句含義從指定表中刪除滿足WHERE子句條件的元組。若無(wú)WHERE子句,則刪除表中的全部元組。
注意:此語(yǔ)句刪除的是表中的數(shù)據(jù),不是表的定義。允許帶子查詢刪除數(shù)據(jù)刪除WH1倉(cāng)庫(kù)的職工記錄。
DELETEFROM職工
WHERE倉(cāng)庫(kù)號(hào)=‘WH1’;刪除人工智能(AI)課的學(xué)生選課記錄。
DELETEFROMSCWHERECnoINSELECTCnoFROMCWHERECN=‘AI’;保持?jǐn)?shù)據(jù)的一致性!4.5視圖視圖(View)
——
從一個(gè)或幾個(gè)基本表(或視圖)導(dǎo)出的表,是虛表。
即:數(shù)據(jù)庫(kù)中只存放視圖的定義,不存放視圖對(duì)應(yīng)的數(shù)據(jù),它的數(shù)據(jù)仍然存放在原來(lái)的基本表中。
視圖象一個(gè)窗口,透過(guò)它可以看到自己感興趣的數(shù)據(jù)及其變化。
視圖一經(jīng)定義,可以和基本表一樣被查詢、被刪除,也可用來(lái)定義新的視圖,但對(duì)視圖的更新操作有限制。
用戶的外模式由若干基本表和若干視圖組成。一、視圖的定義建立視圖
格式:CREATEVIEW視圖名[(列名[,列名]…)]AS子查詢
[WITHCHECKOPTION];
若省略,則用子查詢中SELECT子句的各目標(biāo)列作為視圖的列名。注意:此時(shí)目標(biāo)列只能是單純的屬性名。表示對(duì)視圖進(jìn)行更新時(shí)要保證更新的元組滿足視圖定義中的條件(子查詢中的條件)。建立視圖(1)建立計(jì)算機(jī)科學(xué)系學(xué)生的視圖。
CREATEVIEWCS-SASSELECTSno,SN,SAFROMSWHERESD=‘CS’WITHCHECKOPTION;要求插入、修改時(shí)要滿足SD=‘CS’的條件CS-S建立視圖(2)建立職工與工作所在城市關(guān)系的視圖。
CREATEVIEWemp_cityASSELECT職工號(hào),工資,城市
FROM職工,倉(cāng)庫(kù)
WHERE職工.倉(cāng)庫(kù)號(hào)=倉(cāng)庫(kù).倉(cāng)庫(kù)號(hào);emp_city建立視圖(3)建立職工年、月工資的視圖。
CREATEVIEWE_sal(職工號(hào),月工資,年工資)ASSELECT職工號(hào),工資,工資*12FROM職工;E_sal視圖列名不可省略刪除視圖刪除視圖
格式:DROPVIEW視圖名;語(yǔ)句含義
將視圖的定義從數(shù)據(jù)字典中刪除。由該視圖導(dǎo)出的視圖,盡管其定義還在數(shù)據(jù)字典中,但已無(wú)法使用,應(yīng)同時(shí)刪除。
注意:如果導(dǎo)出視圖的基本表被刪除,該視圖將失效,需要用DROPVIEW語(yǔ)句刪除。二、視圖的查詢視圖定義后,用戶可以象基本表一樣對(duì)視圖查詢。例:在計(jì)算機(jī)科學(xué)系學(xué)生視圖中查小于20歲的學(xué)生姓名。
SELECTSNFROMCS_SWHERESA<20;視圖查詢的處理DBMS對(duì)視圖查詢的處理
——
將查詢操作和視圖定義中的子查詢結(jié)合起來(lái),形成一個(gè)修正的對(duì)基本表的查詢語(yǔ)句,然后執(zhí)行之。SELECTSNFROMSWHERESD=‘CS’ANDSA<20;注意:這種轉(zhuǎn)換有時(shí)不能直接進(jìn)行三、視圖的更新視圖是虛表,對(duì)它的更新最終要轉(zhuǎn)換為對(duì)基本表的更新。為防止非法操作,視圖定義時(shí)加WITH子句,DBMS將在視圖更新時(shí)檢查視圖定義中的條件,不滿足則拒絕執(zhí)行。并非所有視圖都可更新。視圖的更新例:向計(jì)算機(jī)科學(xué)系學(xué)生視圖CS_S插入一個(gè)新記錄。INSERTINTOCS_SVALUES(‘S9’,‘楊力’,18);INSERTINTOSVALUES(‘S9’,‘楊力’,‘CS’,18);四、視圖的用途(優(yōu)點(diǎn))簡(jiǎn)化用戶的操作
——
視圖機(jī)制使用戶可以只注意他所關(guān)心的數(shù)據(jù)。能使用戶以多種角度看待同一數(shù)據(jù)
——
視圖機(jī)制為不同用戶使用同一個(gè)數(shù)據(jù)庫(kù)提供靈活性。對(duì)重構(gòu)數(shù)據(jù)庫(kù)提供了一定程度的邏輯獨(dú)立性
——
在數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)改變后,用新建立的視圖定義用戶原來(lái)的關(guān)系,使用戶的外模式保持不變。能夠?qū)C(jī)密數(shù)據(jù)提供安全保護(hù)
——
視圖機(jī)制可以對(duì)不同的用戶定義不同的視圖,使機(jī)密數(shù)據(jù)不出現(xiàn)在用戶視圖中,從而自動(dòng)提供了對(duì)機(jī)密數(shù)據(jù)的保護(hù)。4.6SQL的數(shù)據(jù)控制數(shù)據(jù)控制的兩個(gè)主要方面:一是控制用戶對(duì)數(shù)據(jù)的存取權(quán)限——
安全性控制
保護(hù)數(shù)據(jù)庫(kù)防止非法使用造成的數(shù)據(jù)泄露和破壞二是控制數(shù)據(jù)的完整性——
提供完整性約束
數(shù)據(jù)的完整性是指數(shù)據(jù)庫(kù)中數(shù)據(jù)的正確性和相容性注意:數(shù)據(jù)控制也稱數(shù)據(jù)保護(hù),除包括數(shù)據(jù)的安全性控制和完整性控制外,還包括并發(fā)控制和數(shù)據(jù)庫(kù)恢復(fù)。本節(jié)僅討論SQL的安全性控制功能存取控制數(shù)據(jù)庫(kù)系統(tǒng)中保證數(shù)據(jù)安全性的主要措施:
存取控制——
規(guī)定用戶對(duì)數(shù)據(jù)的存取權(quán)限SQL語(yǔ)言為DBA和表主提供定義和回收這種權(quán)限的手段授權(quán)語(yǔ)句的一般格式:
GRANT權(quán)限[,權(quán)限]…[ON對(duì)象類型對(duì)象名]TO用戶[,用戶]...[WITHGRANTOPTION];語(yǔ)義:將指定對(duì)象的指定權(quán)限授予指定用戶。
獲得授權(quán)權(quán)限PUBLIC代表全體用戶不同對(duì)象類型允許的操作權(quán)限授權(quán)與收回權(quán)限授權(quán)例:
GRANTSELECTONTABLE倉(cāng)庫(kù)TOPUBLIC;
GRANTSELECT,INSERTONTABLE職工
TOZhaoWITHGRANTOPTION;收回權(quán)限語(yǔ)句的一般格式:
REVOKE權(quán)限[,權(quán)限]…[ON對(duì)象類型對(duì)象名]FROM用戶[,用戶]…
;語(yǔ)義:收回指定用戶在指定對(duì)象上的指定權(quán)限。收回權(quán)限例:
REVOKEINSERTONTABLE職工FROMZhao;授權(quán)與收回權(quán)限舉例GRANTUPDATE(SN),SELECTONTABLESTOWANG;GRANTALLPRIVILEGESONTABLES,C,SCTOZHANG;GRANTCREATETABONDATABASES_CTOLI;GRANTSELECTONTABLESCTOPUBLIC;REVOKEUPDATE(SN)ONTABLESFROMWANG;REVOKESELECTONTABLESCFROMU2;4.7嵌入式SQL把SQL嵌入到宿主語(yǔ)言中使用必須解決的三個(gè)問(wèn)題:
(1)嵌入識(shí)別問(wèn)題
宿主語(yǔ)言的編譯程序如何區(qū)分主語(yǔ)句和SQL語(yǔ)句。
(2)宿主語(yǔ)言與SQL語(yǔ)言的數(shù)據(jù)交互
SQL語(yǔ)句的結(jié)果提交宿主語(yǔ)言處理,宿主語(yǔ)言的數(shù)據(jù)交給SQL語(yǔ)句使用。
(3)宿主語(yǔ)言的單記錄與SQL的多記錄問(wèn)題
宿主語(yǔ)言一般只能在單記錄方式下工作,一次處理一條記錄;而SQL常常處理的是記錄集合。嵌入式SQL語(yǔ)句的識(shí)別
識(shí)別標(biāo)記
——
為區(qū)分SQL語(yǔ)句和主語(yǔ)句,對(duì)嵌入宿主語(yǔ)言的SQL語(yǔ)句常必須加前綴EXECSQL。SQL語(yǔ)句的結(jié)束標(biāo)志隨主語(yǔ)言不同而不同。
以C作為主語(yǔ)言的嵌入式SQL語(yǔ)句:
EXECSQLSQL語(yǔ)句;
以COBOL作為主語(yǔ)言的嵌入式SQL語(yǔ)句:
EXECSQLSQL語(yǔ)句
END-EXEC
PowerBuilder
SQL語(yǔ)句;嵌入式SQL語(yǔ)句的處理方法預(yù)編譯(常用)修改和擴(kuò)展主語(yǔ)言使之能處理SQL語(yǔ)句直接傳遞給DBMS(PowerBuilder)嵌入式SQL語(yǔ)句與主語(yǔ)言之間的通信在嵌入SQL語(yǔ)句的高級(jí)語(yǔ)言程序中SQL語(yǔ)句負(fù)責(zé)操縱數(shù)據(jù)庫(kù)高級(jí)語(yǔ)言語(yǔ)句負(fù)責(zé)控制程序流程、預(yù)處理兩種計(jì)算模型之間的通信主要包括:
–
向主語(yǔ)言傳遞SQL執(zhí)行狀態(tài),以便據(jù)此控制程序流程。
通過(guò)SQL通信區(qū)(SQLCA)實(shí)現(xiàn)
–主語(yǔ)言向SQL語(yǔ)句提供參數(shù)。
通過(guò)主變量實(shí)現(xiàn)
–SQL語(yǔ)句查詢數(shù)據(jù)庫(kù)的結(jié)果交主語(yǔ)言處理。
通過(guò)主變量和游標(biāo)實(shí)現(xiàn)SQL通信區(qū)與主變量SQL通信區(qū)(SQLCommunicationArea)
定義:EXECSQLINCLUEDSQLCA;說(shuō)明:SQLCA是SQL與主語(yǔ)言的通信區(qū),類似于結(jié)構(gòu)變量,數(shù)據(jù)庫(kù)系統(tǒng)將SQL的執(zhí)行狀態(tài)(成功、失敗、出錯(cuò)原因等)記錄在其中(SQLCODE),程序從該通信區(qū)中得到相關(guān)的信息。主變量
——SQL中使用的主語(yǔ)言程序變量簡(jiǎn)稱主變量。定義:EXECSQLBEGINDECLARESECTION;主變量說(shuō)明……
EXECSQLENDDECLARESECTION;
主變量在SQL語(yǔ)句中使用需要在變量名前加前綴‘:’。SQL的應(yīng)用(1)1.根據(jù)給定學(xué)號(hào)查尋學(xué)生信息,學(xué)號(hào)在主變量GIVENSNO中。EXECSQLSELECTSno,Sn,SD,SAFromSInto:Hsno,:Hsn,:Hsd,:HsaWhereSno=:givensno;SQL的應(yīng)用(2)2.根據(jù)學(xué)號(hào)和課程號(hào)查尋學(xué)生選課成績(jī),學(xué)號(hào)在主變量GIVENSNO和GIVENCNO中。EXECSQLSELECTSn,CN,GFromS,C,SCInto:Hsn,:Hcn,:HgradeWhereSno=:givensnoandCno=:givencnoand&S.Sno=SC.SnoandC.Cno=SC.Cno;SQL的應(yīng)用(3)3.將所有學(xué)生選修數(shù)據(jù)庫(kù)(某課程,課程名在主變量Cname中)的成績(jī)加10分。EXECSQLUpdateSCSetG=G+10WhereCnoInSelectCnoFromCWhereCN=“DB”;
CN=:Cname
SQL的應(yīng)用(4)4.刪除退學(xué)學(xué)生的信息,學(xué)生姓名已經(jīng)在主變量Sname中。EXECSQLDeleteFromSCWhereSnoInselectSnoFromSWhereSN=:Sname;EXECSQLDeleteFromSWhereSN=:Sname;SQL的應(yīng)用(PB)1SQLCA:缺省的事務(wù)對(duì)象CONNECTUSINGSQLCA;DISCONNECTUSINGSQLCA;單行檢索SELECT*FROMSWHERESNO=“S3”INTO:NO,:NAME,:DEPT,:AGE;插入語(yǔ)句INSERTINTOEmployee(emp_no,emp_name)VALUES(:NO,:NAME);SQL的應(yīng)用(PB)2修改語(yǔ)句UPDATESSETSD=:NEWSDWHERESNO=:SNO;刪除語(yǔ)句DELETEFROMEmployeeWHEREemp_no=:NO;SQL的應(yīng)用(PB)3檢查SQL語(yǔ)句的執(zhí)行情況SQLCode(事務(wù)對(duì)象)0:成功-1:失敗100:沒(méi)有返回?cái)?shù)據(jù)IntStudent_noStudent_no=Integer(sle_Sno.text)SELECTS.SN,S.SDINTO:sle_Name.text,:sle_Dept.text FROMsWHERES.SNO=:Student_noUSINGSQLCA;IfSQLCA.SQLCode=100thenMessageBox(“查詢學(xué)生”,“未找到指定學(xué)生”)ElseifSQLCA.SQLCode<0thenMessageBox(“數(shù)據(jù)庫(kù)錯(cuò)誤”,SQLCA.SQLErrText,Exclamation!)EndifIntEmp_numEmp_num=Integer(sle_Emp_Num.text)SELECTemployee.Emp_Lname,employee.Emp_LnameINTO:sle_LName.text,:sle_FName.text FROMemployeeWHEREemployee.Emp_nbr=:Emp_numUSINGEmp_tran;IfEmp_tran.SQLCode=100thenMessageBox(“查詢雇員”,“未找到指定雇員”)ElseifEmp_tran.SQLCode<0then
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030投資銀行行業(yè)市場(chǎng)供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 2026貴州六盤水市青少年活動(dòng)中心第一批招聘外聘教師考試備考題庫(kù)附答案
- 2026年河北石家莊聯(lián)華職業(yè)中學(xué)招聘教師12人參考題庫(kù)附答案
- 2026年二級(jí)注冊(cè)建筑師之建筑結(jié)構(gòu)與設(shè)備考試題庫(kù)500道附完整答案(典優(yōu))
- 《幼兒教育》-第十一章 幼兒園與家庭、社區(qū)和小學(xué)
- 2025年高一地理期末夢(mèng)想啟航測(cè)試卷
- 2026年建筑電氣及照明設(shè)計(jì)經(jīng)驗(yàn)分享
- 2026年辦公室電氣設(shè)計(jì)的現(xiàn)代化趨勢(shì)
- 2025年汽車駕駛員(技師)考試題庫(kù)及模擬考試答案
- 小學(xué)六年級(jí)語(yǔ)文學(xué)習(xí)心得交流
- 盤州市教育局機(jī)關(guān)所屬事業(yè)單位2025年公開(kāi)考調(diào)工作人員備考題庫(kù)完整答案詳解
- 2025-2026四年級(jí)上科學(xué)期末檢測(cè)試題
- 遼寧省鞍山市2025-2026學(xué)年八年級(jí)上學(xué)期1月期末語(yǔ)文試卷
- 班級(jí)演唱會(huì)課件
- 2025馬年元旦新春晚會(huì)活動(dòng)策劃
- 交警新警執(zhí)法培訓(xùn)
- 急性毒性測(cè)試:類器官芯片的快速響應(yīng)
- 骨科護(hù)理標(biāo)準(zhǔn)操作流程手冊(cè)
- 產(chǎn)品推廣專員培訓(xùn)
- DB65T 3119-2022 建筑消防設(shè)施管理規(guī)范
- 書黃筌畫雀文言文課件
評(píng)論
0/150
提交評(píng)論