商務(wù)談判課件_第1頁(yè)
商務(wù)談判課件_第2頁(yè)
商務(wù)談判課件_第3頁(yè)
商務(wù)談判課件_第4頁(yè)
商務(wù)談判課件_第5頁(yè)
已閱讀5頁(yè),還剩82頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論