《數(shù)據(jù)庫(kù)系統(tǒng)原理》實(shí)驗(yàn)報(bào)告_第1頁(yè)
《數(shù)據(jù)庫(kù)系統(tǒng)原理》實(shí)驗(yàn)報(bào)告_第2頁(yè)
《數(shù)據(jù)庫(kù)系統(tǒng)原理》實(shí)驗(yàn)報(bào)告_第3頁(yè)
《數(shù)據(jù)庫(kù)系統(tǒng)原理》實(shí)驗(yàn)報(bào)告_第4頁(yè)
《數(shù)據(jù)庫(kù)系統(tǒng)原理》實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩40頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、學(xué) 生 實(shí) 驗(yàn) 報(bào) 告(理工類)課程名稱:數(shù)據(jù)庫(kù)系統(tǒng)原理 專業(yè)班級(jí): 14軟件工程1班 學(xué)生學(xué)號(hào): 學(xué)生姓名: 孟祥輝 所屬院部: 軟件工程學(xué)院 指導(dǎo)教師: 麻春艷 20 15 20 16 學(xué)年 第 二 學(xué)期 金陵科技學(xué)院教務(wù)處制實(shí)驗(yàn)報(bào)告書寫要求實(shí)驗(yàn)報(bào)告原則上要求學(xué)生手寫,要求書寫工整。若因課程特點(diǎn)需打印的,要遵照以下字體、字號(hào)、間距等的具體要求。紙張一律采用A4的紙張。實(shí)驗(yàn)報(bào)告書寫說明實(shí)驗(yàn)報(bào)告中一至四項(xiàng)內(nèi)容為必填項(xiàng),包括實(shí)驗(yàn)?zāi)康暮鸵?;?shí)驗(yàn)儀器和設(shè)備;實(shí)驗(yàn)內(nèi)容與過程;實(shí)驗(yàn)結(jié)果與分析。各院部可根據(jù)學(xué)科特點(diǎn)和實(shí)驗(yàn)具體要求增加項(xiàng)目。填寫注意事項(xiàng)(1)細(xì)致觀察,及時(shí)、準(zhǔn)確、如實(shí)記錄。(2)準(zhǔn)確說明,

2、層次清晰。(3)盡量采用專用術(shù)語(yǔ)來說明事物。(4)外文、符號(hào)、公式要準(zhǔn)確,應(yīng)使用統(tǒng)一規(guī)定的名詞和符號(hào)。(5)應(yīng)獨(dú)立完成實(shí)驗(yàn)報(bào)告的書寫,嚴(yán)禁抄襲、復(fù)印,一經(jīng)發(fā)現(xiàn),以零分論處。實(shí)驗(yàn)報(bào)告批改說明實(shí)驗(yàn)報(bào)告的批改要及時(shí)、認(rèn)真、仔細(xì),一律用紅色筆批改。實(shí)驗(yàn)報(bào)告的批改成績(jī)采用百分制,具體評(píng)分標(biāo)準(zhǔn)由各院部自行制定。實(shí)驗(yàn)報(bào)告裝訂要求實(shí)驗(yàn)批改完畢后,任課老師將每門課程的每個(gè)實(shí)驗(yàn)項(xiàng)目的實(shí)驗(yàn)報(bào)告以自然班為單位、按學(xué)號(hào)升序排列,裝訂成冊(cè),并附上一份該門課程的實(shí)驗(yàn)大綱。實(shí)驗(yàn)項(xiàng)目名稱:數(shù)據(jù)庫(kù)定義與操作語(yǔ)言 實(shí)驗(yàn)學(xué)時(shí): 2 同組學(xué)生姓名: 孟陳、陳曉雪、季佰軍 實(shí)驗(yàn)地點(diǎn): 1318 實(shí)驗(yàn)日期: 5.19 實(shí)驗(yàn)成績(jī): 批改教師

3、: 批改時(shí)間: 一、實(shí)驗(yàn)?zāi)康?、理解和掌握數(shù)據(jù)庫(kù)DDL語(yǔ)言,能夠熟練地使用SQL DDL語(yǔ)句創(chuàng)建、修改和刪除數(shù)據(jù)庫(kù)、模式和基本表。2、掌握SQL冊(cè)亨徐設(shè)計(jì)基本規(guī)范,熟練運(yùn)用SQL語(yǔ)言實(shí)現(xiàn)數(shù)據(jù)基本查詢,包括單表查詢、分組統(tǒng)計(jì)查詢和連接查詢3、掌握SQL嵌套查詢和集合查詢等, 各種高級(jí)查詢的設(shè)計(jì)方法等.4、熟悉數(shù)據(jù)庫(kù)的數(shù)據(jù)更新操作,能夠使用sql語(yǔ)句對(duì)數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)的插入、修改、刪除操作。5、熟悉sql語(yǔ)言有關(guān)系圖的操作,能夠熟練使用sql語(yǔ)言來創(chuàng)建需要的視圖,定義數(shù)據(jù)庫(kù)外模式,并能使用所創(chuàng)建的視圖實(shí)現(xiàn)數(shù)據(jù)管理。6、掌握所以設(shè)計(jì)原則和技巧,能夠創(chuàng)建合適的索引以提高數(shù)據(jù)庫(kù)查詢、統(tǒng)計(jì)分析效率。二、實(shí)驗(yàn)

4、內(nèi)容和要求1、理解和掌握SQL DDL語(yǔ)句的語(yǔ)法,特別是各種參數(shù)的具體含義和使用方法;使用sql語(yǔ)句創(chuàng)建、修改和刪除數(shù)據(jù)庫(kù)、模式和基本表。掌握sql語(yǔ)句常見語(yǔ)法錯(cuò)誤的調(diào)試方法。2、針對(duì)TPC-H數(shù)據(jù)庫(kù)設(shè)計(jì)各種單表查詢sql語(yǔ)句、分組統(tǒng)計(jì)查詢語(yǔ)句;設(shè)計(jì)單個(gè)表針對(duì)自身的連接查詢,涉及多個(gè)表的連接查詢。理解和掌握sql查詢語(yǔ)句各個(gè)子句的特點(diǎn)和作用,按照sql程序設(shè)計(jì)規(guī)范寫出具體的sql查詢語(yǔ)句,并調(diào)試通過。3、針對(duì)TPC-H數(shù)據(jù)庫(kù),證券分析用戶查詢要求,設(shè)計(jì)各種嵌套查詢和集合查詢。4、針對(duì)TPC-H數(shù)據(jù)庫(kù)設(shè)計(jì)單元主唱入、批量數(shù)據(jù)插入、修改數(shù)據(jù)和刪除數(shù)據(jù)的sql語(yǔ)句。理解和掌握insert、updat

5、e、delete語(yǔ)法結(jié)構(gòu)的各個(gè)組成成分,結(jié)合嵌套sql子查詢,分別設(shè)計(jì)幾個(gè)不同形式的插入、修改和刪除數(shù)據(jù)的語(yǔ)句,并調(diào)試成功。5、針對(duì)給定的數(shù)據(jù)庫(kù)模式,以及相應(yīng)的應(yīng)用要求,創(chuàng)建視圖和帶WITH CHECK OPTION的視圖,并驗(yàn)證視圖WITH CHECK OPTION選項(xiàng)的有效性。理解和掌握試圖消解執(zhí)行原理,掌握可更新視圖和不可更新視圖的區(qū)別。6、針對(duì)給定的數(shù)據(jù)庫(kù)模式和具體應(yīng)用需求,創(chuàng)建唯一索引、函數(shù)索引、復(fù)合索引等;修改索引;刪除索引。設(shè)計(jì)相應(yīng)的sql查詢驗(yàn)證索引有效性,學(xué)習(xí)利用EXPLAIN命令分析sql查詢是否使用了所創(chuàng)建的索引,并能夠分析其原因,執(zhí)行sql查詢并估算索引提高查詢效率的百

6、分比,要求實(shí)驗(yàn)數(shù)據(jù)達(dá)到10萬(wàn)條記錄以上的數(shù)據(jù)量,以便驗(yàn)證所以效果.三、實(shí)驗(yàn)過程1、數(shù)據(jù)庫(kù)定義實(shí)驗(yàn)(1) 定義數(shù)據(jù)庫(kù)采用中文字符集創(chuàng)建名為TCHP的數(shù)據(jù)庫(kù)。CREATE DATABASE TPCH ENCODING=GBK;(2) 定義模式在數(shù)據(jù)庫(kù)TPCH中創(chuàng)建名為SALES的模式。Create SCHEMA Sales;(3) 定義基本表在TPCH數(shù)據(jù)庫(kù)的Sales模式中創(chuàng)建8個(gè)基本表。/*設(shè)置當(dāng)前會(huì)話的搜索路徑為sales模式、public模式,基本表就會(huì)自動(dòng)創(chuàng)建在sales模式下。*/SET SEARCH_PATH TO Sales, Public;CREATE TABLE Region(

7、regionkey INTEGER PRIMARY KEY,name CHAR(25),comment VARCHAR(152);CREATE TABLE Nation(nationkey INTEGER PRIMARY KEY,name CHAR(25),address VARCHAR(40),regionkey INTEGER REFERENCES REGION(REGIONKEY),comment VARCHAR(152);CREATE TABLE Supplier(suppkey INTEGER PRIMARY KEY,name CHAR(25),address VARCHAR(40)

8、,nationkey INTEGER REFERENCES Nation(nationkey),phone CHAR(15),acctbal REAL,comment VARCHAR(101);CREATE TABLE Part(partkey INTEGER PRIMARY KEY,name VARCHAR(55),mfgr CHAR(25),/*制造廠*/brand CHAR(10),type VARCHAR (25),size INTEGER,container CHAR(10),retailprice REAL,comment VARCHAR(23);CREATE TABLE Part

9、Supp(partkey INTEGER REFERENCES Part(partkey),suppkey INTEGER REFERENCES Supplier(suppkey),availqty INTEGER,supplycost REAL ,comment varchar(199),PRIMARY KEY (parkey,suppkey);CREATE TABLE Costomer(custkey INTEGER PRIMARY KEY,name VARCHAR(25),address VARCHAR(40),nationkey INTEGER REFERENCES Nation(na

10、tionkey),phone CHAR(15),acctbal REAL,mktsegment CHAR(10),comment VARCHAR(117);CREATE TABLE Orders(orderkey INTEGER PRIMARY KEY,custkey INTEGER REFERENCES Customer(custkey),orderstatus CHAR(1),totalprice REAL,orderdate DATE,orderpriority INTEGER,comment VARCHAR(79);CREATE TABLE Lineitem(orderkey INTE

11、GER REFERENCES Order(orderkey),partkey INTEGER REFERENCES Part(partkey),suppkey INTEGER REFERENCES Supplier(suppkey),linenumber INTEGER,quantity REAL,extendedprice REAL,discount REAL,tax REAL,returnflag CHAR(1),linestatus CHAR(1),shipinstruct CHAR(25),shipmode CHAR(10),comment VARCHAR(44),PRIMARY KE

12、Y(orderkey,linenumber),FOREIGN KEY(Partkey,suppkey) REFERENCES PartSupp(partkey,suppkey);2、數(shù)據(jù)基本查詢(1)單表查詢(實(shí)現(xiàn)投影操作)查詢供應(yīng)商的名稱、地址和聯(lián)系電話。SELECTE name,address,phone FROMSupplier;(2)單表查詢(實(shí)現(xiàn)選擇操作)查詢最近一周內(nèi)提交的總價(jià)大于1000元的訂單的編號(hào)、顧客編號(hào)等訂單的所有信息。SELECT *FROM Sales.Orders WHERE CURRENT_DATE-orderdata1000;(3)不帶分組過濾條件的分組統(tǒng)計(jì)查詢

13、統(tǒng)計(jì)每個(gè)顧客的訂購(gòu)金額SELECT C.custkey ,SUM(O.totalprice)FROM customer C,Orders OWHERE C.custkey=O.custkeyGROUP BY C.custkey;(4) 帶分組過濾條件的分組統(tǒng)計(jì)查詢查詢訂單平均金額超過1000元的顧客編號(hào)及其姓名SELECT C.custkey,MAX(C.name)FROM Customer C,Orders OWHERE C.custkey=O.custkeyGROUP BY C.custkey;HAVING AVG(O.totalprice)1000;(5) 表單自身連接查詢查詢與“金倉(cāng)集

14、團(tuán)”在同一個(gè)國(guó)家的供應(yīng)商編號(hào)、名稱和地址信息。SELECT F.suppkey,F.name,F(xiàn).addressFROM Supplier F,Supplier S WHERE F.nationkey=S.nationkey AND S.name=金倉(cāng)集團(tuán);(6) 兩表連接查詢(普通連接)查詢供應(yīng)價(jià)格大于零售價(jià)格的零件名、制造商名、零售價(jià)格和供應(yīng)價(jià)格。SELECT P.name,P.mfgr,P.retailprice,PS.supplycostFROM Part P,Partsupp PSWHERE P.retailpricePS.supplycost;(7) 兩表連接查詢(自然連接)查詢供

15、應(yīng)價(jià)格大于零售價(jià)格的零件名、制造商名、零售價(jià)格和供應(yīng)價(jià)格。SELECT P.name,P.mfgr,P.retailprice,PS.supplycostFROM Part P,Partsupp PSWHERE P.partkey=PS.partkey AND P.retailpricePS.supplycost;(8)三表連接查詢查詢顧客“蘇舉庫(kù)”訂購(gòu)的訂單編號(hào)、總價(jià)及其訂購(gòu)的零件編號(hào)、數(shù)量和明細(xì)價(jià)格。SELECT O.orderkey,O.totalprice,L.partkey,L.quantity,L.extendedpriceFROM Custom C,Orders O,Lineit

16、em LWHERE C.custkey=O.custkey AND O.orderkey=L.orderkey AND C.name=蘇舉庫(kù);3、數(shù)據(jù)高級(jí)查詢實(shí)驗(yàn)(1)IN嵌套查詢查詢訂購(gòu)了“海大”制造的“船舶模擬駕駛艙”的顧客。SELECT custkey,nameFROM CustomerWHERE custkey IN ( SELECT O.custkey FROM Orders O,Lineitme L,PartSupp PS,Part P WHERE O.orderkey=L.orderkey AND L.partkey=PS.partkey AND L.suppkey=PS.sup

17、pkey AND PS.partkey=P.partkey AND P.mfgr=海大 AND P.name=船舶模擬駕駛艙);SELECT custkey,nameFROM CustomerWHERE cuskey IN ( SELECT O.custkey FROM Orders O,Lineitem L,Part P WHERE O.orderkey=L.orderkey ANDL.partkey=P.partkey ANDp.mfgr=海大 AND P.name=船舶模擬駕駛艙);(2)單層EXISTS嵌套查詢查詢沒有購(gòu)買過“海大”制造的“船舶模擬駕駛艙”的顧客。SELECT cust

18、key,nameFROM CustomerWHERE NOT EXISTS( SELECT O.custkey FROM Orders O,Lineitem L,PartSupp PS,Part P WHERE C.cuskey=O.custkey ANDO.orderkey=L.orderkey ANDL.partkey=PS.partkey ANDL.suppkey=PS.suppkey ANDPS.partkey=P.partkey ANDp.mfgr=海大 AND P.name=船舶模擬駕駛艙);(3)雙層EXISTS嵌套查詢查詢至少購(gòu)買過顧客“張三”購(gòu)買過的全部零件的顧客姓名。SEL

19、ECT CA.nameFROM Customer CAWHERE NOT EXISTS(SELECT * FROM Customer CB,Oders OB,Lineitem LB WHERE CB.custkey=OB.custkey ANDOB.orderkey=LB.orderkey ANDCB.name=張三 ANDNOT EXISTS(SELECT * FROM Orders OC,Lineitem LC WHERE CA.custkey=LC.custkey AND OC.orderkey=LC.orderkey AND LB.suppkey=LC.suppkey AND LB.p

20、artkey=LC.partkey);(4)FROM子句中的嵌套查詢查詢訂單平均金額超過1萬(wàn)元的顧客中的中國(guó)籍顧客信息。SELECT C.*FROM Customer C,(SELECT custkey FROM Orders GROUP BY custkey HAVING AVG(totalprice)10000) B,Nation N WHERE C.custkey=B.custkey AND C.nationkey=N.nationkey AND N.name=中國(guó);(5)集合查詢(交)查詢顧客“張三”和“李四”都訂購(gòu)過的全部零件的信息。SELECT P.*FROM Customer C

21、,Orders O,Lineitem L,PartSupp PS,Part P WHERE C.custkey=O.custkey AND O.orderkey=L.orderkey AND L.suppkey=PS.suppkey AND L.partkey=PS.partkey AND PS.partkey=P.partkey AND C.name=李四;INTERSECTION SELECT P.*FROM Customer C,Orders O,Lineitem L,PartSupp PS,Part P WHERE C.cuskey=O.custkey AND O.orderkey=L

22、.orderkey AND L.partkey=PS.partkey AND L.suppkey=PS.suppkey AND PS.partkey=P.partkey AND C.name=李四;(6)集合查詢(并)查詢顧客“張三”和“李四”訂購(gòu)的全部零件的信息。SELECT P.*FROM Customer C,Orders O,Lineitem L,PartSupp PS,Part P WHERE C.cuskey=O.custkey AND O.orderkey=L.orderkey AND L.partkey=PS.partkey AND L.suppkey=PS.suppkey A

23、ND PS.partkey=P.partkey AND C.name=張三;UNIONSELECT P.*FROM Customer C,Orders O,Lineitem L,PartSupp PS,Part P WHERE C.cuskey=O.custkey AND O.orderkey=L.orderkey AND L.partkey=PS.partkey AND L.suppkey=PS.suppkey AND PS.partkey=P.partkey AND C.name=李四;(7)集合查詢(差)顧客“張三”訂購(gòu)過而“李四”沒訂購(gòu)過的零件的信息。SELECT P.*FROM Cu

24、stomer C,Orders O,Lineitem L,PartSupp PS,Part P WHERE C.cuskey=O.custkey AND O.orderkey=L.orderkey AND L.partkey=PS.partkey AND L.suppkey=PS.suppkey AND PS.partkey=P.partkey AND C.name=張三;EXCEPTSELECT P.*FROM Customer C,Orders O,Lineitem L,PartSupp PS,Part P WHERE C.cuskey=O.custkey AND O.orderkey=L

25、.orderkey AND L.partkey=PS.partkey AND L.suppkey=PS.suppkey AND PS.partkey=P.partkey AND C.name=李四;4、數(shù)據(jù)更新實(shí)驗(yàn)(1)INSERT基本語(yǔ)句(插入全部列的數(shù)據(jù))插入一條顧客記錄,要求每列都給一個(gè)合理的值。INSERT INTO CustomerVALUES (30,張三,北京市,40,010-,0.00,Northeast,VIP Customer);(2)INSERT基本語(yǔ)句(插入部分列的數(shù)據(jù)) 插入一條訂單記錄,給出必要的幾個(gè)字段值。INSERT INTO Lineitem(orderkey

26、,Linenumber,partkey,suppkey,quantity,shipdate)VALUES(862,ROUND(RANDOM()*100,0,479,1,10,2012-3-6);/*RANDOM()函數(shù)為隨機(jī)小數(shù)生成函數(shù),ROUND()為四舍五入函數(shù)*/(3)批量數(shù)據(jù)INSERT語(yǔ)句 創(chuàng)建一個(gè)新的顧客表,把所有中國(guó)籍顧客插入到新的顧客表中。CREATE TABLE NewCustmoer AS SELECT * FROM Customer WITH NO DATA;/*WITH NO DATA子句使得SELECT查詢只生成一個(gè)結(jié)果模式,不查詢出實(shí)際數(shù)據(jù)*/INSERT INTO

27、 NewCustomer/*批量插入SELECT 語(yǔ)句查詢結(jié)果到NewCustomer表中*/SELECT C.*FROM Costomer C,Nation NWHERE C.nationkey=N.nationkey AND N.name=中國(guó); 創(chuàng)建一個(gè)顧客購(gòu)物統(tǒng)計(jì)表,記錄每個(gè)顧客及其購(gòu)物總數(shù)和總價(jià)等信息。CREATE TABLE ShoppingStat(custkey INTEGER, quantity REAL, totalprice REAL);INSERT INTO ShoppingStatSELECT C.custkey,Sum(L.quantity),Sum(O.total

28、price)/*對(duì)分組后的數(shù)據(jù)求總和*/FROM Customer C,Order O,Lineitem LWHERE C.custkey=O.custkey AND O.orderkey=L.orderkeyGROUP BY C.custkey倍增零件表的數(shù)據(jù),多次重復(fù)執(zhí)行,直到總記錄數(shù)達(dá)到50萬(wàn)為止。INSERT INTO PartSELECT partkey+(SELECT COUNT(*) FROM Part),name,mfgr,brand,type,size,container,retailprice,commentFROM Part;(4)UPDATE語(yǔ)句(插入部分記錄的部分列值

29、) “金倉(cāng)集團(tuán)”供應(yīng)的所有零件的供應(yīng)成本價(jià)下降10%。UPDATE PartSuppSET supplycost=supplycost*0.9WHERE suppkey=(SELECT suppkey/*找出要修改的那些記錄*/ FROM Supplier WHERE name=金倉(cāng)集團(tuán));(5)UPDATE語(yǔ)句(利用一個(gè)表中的數(shù)據(jù)修改另外一個(gè)表中的數(shù)據(jù)) 利用Part表中的零售價(jià)格來修改Lineitem中的extendedprice,其中extendedprice=Part.retailprice*quantity。UPDATE Lineitem LSET L.extendedprice=P

30、.retailprice*L.quantityFROM Part PWHERE L.partkey=P.partkey;/*Lineitem表也可以直接與Part表相連接,而不需通過PartSupp連接*/(6)DELETE基本語(yǔ)句(刪除給定條件的所有記錄) 刪除顧客張三的所有訂單記錄。DELECT FROM Lineitem/*先刪除張三的訂單明細(xì)記錄*/WHERE orderkey IN(SELECT orderkey FROM Order O,Customer C WHERE O.custkey=C.custkey AND C.name=張三);DELECT FROM Order/*再刪

31、除張三的訂單記錄*/WHERE custkey=(SELECT custkey FROM Customer WHERE name=張三);5、 視圖(1) 創(chuàng)建視圖(省略視圖列名) 創(chuàng)建一個(gè)“海大汽配”供應(yīng)商供應(yīng)的零件視圖V_DLMU_PartSupp1,要求列出供應(yīng)零件的編號(hào)、零件名稱、可用數(shù)量、零售價(jià)格、供應(yīng)價(jià)格和備注等信息。CREATE VIEW V_DLMU_PARTSUPP1 AS/*由SELECT子句目標(biāo)列組成視圖屬性*/SELECT P.partkey,P.name,PS.availqty,P.retailprice,PS.supplycost,P.commentFROM Par

32、t P,PartSupp PS,Supplier SWHERE P.partkey=PS.partkey AND S.suppkey=PS.suppkey AND S.name=海大汽配;(2) 創(chuàng)建視圖(不能省略列名的情況) 創(chuàng)建一個(gè)視圖V_CustAvgOrder,按顧客統(tǒng)計(jì)平均每個(gè)訂單的購(gòu)買金額和零件數(shù)量,要求輸出 顧客編號(hào)、姓名,平均購(gòu)買金額和平均購(gòu)買零件數(shù)量。CREATE VIEW V_CustAvgOrder(custkey,cname,avgprice,avgquantity) ASSELECT C.custkey,MAX(C.name),AVG(O.totalprice),AV

33、G(L.quantity)FROM Customer C,Orders O,Lineitem LWHERE C.custkey=O.custkey AND L.orderkey=O.orderkeyGROUP BY C.custkey;(3) 創(chuàng)建視圖(WITH CHECK OPTION) 使用WITH CHECK OPTION,創(chuàng)建一個(gè)“海大汽配”供應(yīng)商供應(yīng)的零件視圖V_DLMU_PartSupp2,要求列出供應(yīng)零件的編號(hào)、可用數(shù)量和供應(yīng)價(jià)格等信息。然后通過該視圖分別增加、刪除和修改一條“海大汽配”零件供應(yīng)記錄,驗(yàn)證WITH CHECK OPTION是否起作用。CREATE VIEW V_D

34、LMU_PartSupp2ASSELECT partkey,suppkey,availqty,supplycostFROM PartSuppWHERE suppkey=(SELECT suppkey FROM Supplier WHERE name=海大汽配)WITH CHECK OPTION;INSERT INTO V_DLMU_PartSupp2VALUES (58889,5048,704,77760);UPADTE V_DLMU_PartSupp2SET supplycost=12WHERE suppkey=58889;DELETE FROM V_DLMU_PartSupp2WHERE

35、suppkey=58889;(4) 可更新的視圖(行列子集視圖) 使用WITH CHECK OPTION,創(chuàng)建一個(gè)“海大汽配”供應(yīng)商供應(yīng)的零件視圖V_DLMU_PartSupp4,要求列出供應(yīng)零件的編號(hào)、可用數(shù)量和供應(yīng)價(jià)格等信息。然后通過該視圖分別增加、刪除和修改一條“海大汽配”零件供應(yīng)記錄,驗(yàn)證該視圖是否是可更新的,并比較上述“(3)創(chuàng)建視圖”實(shí)驗(yàn)任務(wù)與本任務(wù)結(jié)果有何異同。CREATE VIEW V_DLMU_PartSupp3AS SELECT partkey,suppkey,availqty,supplycostFROM PartSuppWHERE suppkey=(SELECT sup

36、pkeyFROM SupplierWHERE name=海大汽配); INSERT INTO V_DLUM_PartSupp3VALUES(58889,5048,704,77760);UPDATE V_DLMU_PartSupp3SET supplycost=12WHERE suppkey=58889;DELETE FROM V_DLMU_PartSupp3WHERE suppkey=58889;(5)可更新的視圖INSERT INTO V_CustAvgOrderVALUES(,NULL,20,2000);(6) 刪除視圖(RESTRICT/CASCADE) 創(chuàng)建顧客訂購(gòu)零件明細(xì)視圖V_Cu

37、stOrd,要求列出顧客編號(hào)、姓名、購(gòu)買零件數(shù)、金額,然后在該視圖的基礎(chǔ)上,在創(chuàng)建(2)的視圖V_CustAvgOrder,然后使用RESTRICT選項(xiàng)和CASCADE選項(xiàng)刪除視圖V_CustOrd。CREATE VIEW V_CustOrd(custkey,cname,qty,extprice)ASSELECT C.custkey,C.name,L.quantity,L.extendedpriceFROM Customer C,Order O,Lineitem LWHERE C.custkey=O.custkey AND O.orderkey=L.orderkey;CREATE VIEW V

38、_CustAvgOrder(custkey,cname,avgqty,avgprice)ASSELECT custkey,MAX(cname),AVG(qty),AVG(extprice)FROM V_CustOrd/*在視圖V_CustOrd上再創(chuàng)建視圖*/GROUP BY custkey;DROP VIEW V_CustOrd RESTRICT;DROP VIEW V_CustOrd CASCADE;6、 索引(1) 創(chuàng)建唯一索引 在零件表的零件名稱字段上創(chuàng)建唯一索引。CREATE UNIQUE INDEX Idx_part_name ON Part(name);(2) 創(chuàng)建函數(shù)索引(對(duì)某

39、個(gè)屬性的函數(shù)創(chuàng)建索引,稱為函數(shù)索引) 在零件表的零件名稱字段上創(chuàng)建一個(gè)零件名稱長(zhǎng)度的函數(shù)索引。CREATE INDEX Idx_part_name_fun ON Part(LENGTH(name);(3)創(chuàng)建復(fù)合索引(對(duì)兩個(gè)及兩個(gè)以上的屬性創(chuàng)建索引,稱為復(fù)合索引) 在零件表的制造商和品牌兩個(gè)字段上創(chuàng)建一個(gè)復(fù)合索引。CREATE UNIQUE INDEX Idx_part_mfgr_brand ON Part(mfgr,brand);(4) *創(chuàng)建聚簇索引 在零件表的制造商字段上創(chuàng)建一個(gè)聚簇索引。CREATE UNIQUE INDEX Idx_part_mfgr ON Part(mfgr);CL

40、USTER Idx_part_mfgr ON Part;(5) 創(chuàng)建Hash索引 零件表的名稱字段上創(chuàng)建一個(gè)Hash索引。CREATE INDEX Idx_part_name_hash ON Part USING HASH(name);(6) 修改索引名稱 修改零件表的名稱字段上的索引名。ALTER INDEX Idx_part_name_hash RENAME TO Idx_part_name_hash_new;(7)分析某個(gè)SQL查詢語(yǔ)句執(zhí)行時(shí)是否使用了索引EXPLAIN SELECT * FROM part WHERE name=零件;(8) *驗(yàn)證索引效率 創(chuàng)建一個(gè)函數(shù)TestInde

41、x,自動(dòng)計(jì)算sql查詢執(zhí)行的時(shí)間。 CREATE FUNCTION TestIndex(p_part_name CHAR(55) RETURN INTEGER AS/*自定義函數(shù)TestIndex():輸入?yún)?shù)為零件名稱,返回SQL查詢的執(zhí)行時(shí)間*/ DECLARE begintime TIMESTAMP; endtime TIMESTAMP; durationtime INTEGER; BEGN SELECT CLOCK_TIMESTAMP() INTO begintime;/*記錄查詢執(zhí)行的開始時(shí)間*/ PERFORM *FROM Part WHERE name=p_partname;/*

42、執(zhí)行SQL查詢,不保存查詢結(jié)果*/ SELECT CLOCK_TIMESTAMP() INTO endtime; SELECT DATEDIFF(ms,begintime,endtime) INTO durationtime; RETURN durationtime;/*計(jì)算并返回查詢執(zhí)行時(shí)間,時(shí)間單位為毫秒ms*/ END; /*查看當(dāng)零件表Part數(shù)據(jù)模型比較小,并且無索引時(shí)的執(zhí)行時(shí)間*/ SELECT TestIndex(零件名稱); INSERT INTO Part/*不斷倍增零件表的數(shù)據(jù),直到50萬(wàn)條記錄*/ SELECT partkey+(SELECT COUNT(*) FROM

43、Part), Name,mfgr,brand,type,size,container,retailprice,comment FRPM Part;/*查看當(dāng)零件表Part數(shù)據(jù)模型比較大,但無索引時(shí)的執(zhí)行時(shí)間*/SELECT TestIndex(零件名稱);CREATE INDEX part_name ON Part(name);/*在零件表的零件名稱字段上創(chuàng)建索引*/*查看零件表Part數(shù)據(jù)規(guī)模比較大,有索引時(shí)的執(zhí)行時(shí)間*/SELECT TestIndex();四、實(shí)驗(yàn)心得通過本次實(shí)驗(yàn),我知道只有正確理解數(shù)據(jù)庫(kù)模式結(jié)構(gòu),才能正確設(shè)計(jì)數(shù)據(jù)庫(kù)查詢。連接查詢是數(shù)據(jù)庫(kù)sql查詢中最重要的查詢,連接查詢

44、的設(shè)計(jì)要特別注意,不同的查詢表達(dá),其查詢執(zhí)行的性能會(huì)有很大差別。正確地設(shè)計(jì)和執(zhí)行數(shù)據(jù)更新語(yǔ)句,確保正確地錄入數(shù)據(jù)和更新數(shù)據(jù),才能保證查詢的數(shù)據(jù)正確。當(dāng)數(shù)據(jù)更新失敗時(shí),一個(gè)主要原因是更新數(shù)據(jù)時(shí)違反了完整性約束。實(shí)驗(yàn)項(xiàng)目名稱:安全性語(yǔ)言實(shí)驗(yàn) 實(shí)驗(yàn)學(xué)時(shí): 2 同組學(xué)生姓名: 孟陳、陳曉雪、季佰軍 實(shí)驗(yàn)地點(diǎn): 1318 實(shí)驗(yàn)日期: 5.26 實(shí)驗(yàn)成績(jī): 批改教師: 批改時(shí)間: 一、 實(shí)驗(yàn)?zāi)康?、 掌握自主存取控制缺陷的定義和維護(hù)方法。2、 掌握數(shù)據(jù)庫(kù)審計(jì)的設(shè)置和管理方法,以便監(jiān)控?cái)?shù)據(jù)庫(kù)操作,維護(hù)數(shù)據(jù)庫(kù)安全。二、 實(shí)驗(yàn)內(nèi)容和要求1、 定義用戶、角色,分配權(quán)限給用戶、角色,回收權(quán)限,以相應(yīng)的用戶名登錄數(shù)據(jù)

45、庫(kù)驗(yàn)證權(quán)限分配是否正確。選擇一個(gè)應(yīng)用場(chǎng)景,使用自主存取控制機(jī)制設(shè)置權(quán)限分配??梢圆捎脙煞N方案。方案一:采用SYSTEM超級(jí)用戶登錄數(shù)據(jù)庫(kù),完成所有權(quán)限分配工作,然后用相應(yīng)用戶名登錄數(shù)據(jù)庫(kù)已驗(yàn)證權(quán)限分配正確性;方案二:采用SYSTEM用戶登錄數(shù)據(jù)庫(kù)創(chuàng)建3個(gè)部門經(jīng)理用戶,并分配相應(yīng)的權(quán)限,然后分別用3個(gè)經(jīng)理用戶名登錄數(shù)據(jù)庫(kù),創(chuàng)建相應(yīng)部門的USER、ROLE,并分配相應(yīng)權(quán)限。2、打開數(shù)據(jù)庫(kù)審計(jì)開關(guān)。以具有審計(jì)權(quán)限的用戶登錄數(shù)據(jù)庫(kù),設(shè)置審計(jì)權(quán)限,然后以普通用戶登錄數(shù)據(jù)庫(kù),執(zhí)行相應(yīng)的數(shù)據(jù)操縱sql語(yǔ)句,驗(yàn)證相應(yīng)審計(jì)設(shè)置是否生效,最后在一具有審計(jì)權(quán)限的用戶登錄數(shù)據(jù)庫(kù),查看是否存在相應(yīng)的審計(jì)信息。三、實(shí)驗(yàn)過

46、程1、自主存取控制實(shí)驗(yàn)(1)創(chuàng)建用戶 為采購(gòu)、銷售和客戶管理等3個(gè)部門的經(jīng)理創(chuàng)建用戶標(biāo)識(shí),要求具有創(chuàng)建用戶或角色的權(quán)利。CREATE USER David WITH CREATEROLE PASSWORD ;CREATE USER Tom WITH CREATEROLE PASSWORD ;CREATE USER Kathy WITH CREATEROLE PASSWORD ;為采購(gòu)、銷售和客戶管理等3個(gè)部門的職員創(chuàng)建用戶標(biāo)識(shí)和用戶口令。CREATE USER Jeffery WITH PASSWORD ;CREATE USER Jane WITH PASSWORD ;CREATE USER

47、Mike WITH PASSWORD ;(2)創(chuàng)建角色并分配權(quán)限為各個(gè)部門分別創(chuàng)建一個(gè)查詢角色,并分配相應(yīng)的查詢權(quán)限。CREATE ROLE PurchaseQueryRole;GRANT SELECT ON TABLE Part TO PurchaseQueryRole;GRANT SELECT ON TABLE Supplier TO PurchaseQueryRole;GRANT SELECT ON TABLE PartSupp TO PurchaseQueryRole;CREATE ROLE SaleQueryRole;GRANT SELECT ON TABLE Order TO Sa

48、leQueryRole;GRANT SELECT ON TABLE Lineitem TO SaleQueryRole;CREATE ROLE CustomerQueryRole;GRANT SELECT ON TABLE Customer TO CustomerQueryRole;GRANT SELECT ON TABLE Nation TO CustomerQueryRole;GRANT SELECT ON TABLE Region TO CustomerQueryRole;為各個(gè)部門分別創(chuàng)建一個(gè)職員角色,對(duì)本部門信息具有查看、插入權(quán)限。CREATE ROLE PurchaseEmploy

49、eeRole;GRANT SELECT,INSERT ON TABLE Part TO PurchaseEmployeeRole;GRANT SELECT,INSERT ON TABLE Supplier TO PurchaseEmployeeRole;GRANT SELECT,INSERT ON TABLE PartSupp TO PurchaseEmployeeRole;CREATE ROLE SaleEmployeeRole;GRANT SELECT,INSERT ON TABLE Order TO SaleEmployeeRole;GRANT SELECT,INSERT ON TABL

50、E Lineitem TO SaleEmployeeRole;CREATE ROLE CustomerEmployeeRole;GRANT SELECT,INSERT ON TABLE Customer TO CustomerEmployeeRole;GRANT SELECT,INSERT ON TABLE Nation TO CustomerEmployeeRole;GRANT SELECT,INSERT ON TABLE Region TO CustomerEmployeeRole;為各個(gè)部門創(chuàng)建一個(gè)經(jīng)理角色,相應(yīng)角色對(duì)本部門的信息具有完全控制權(quán)限,對(duì)其他部門的信息具有查詢權(quán)。經(jīng)理有權(quán)給本

51、部門資源分配權(quán)限。CREATE ROLE PurchaseManagerRole WITH CREATEROLE;GRANT ALL ON TABLE Part TO PurchaseManagerRole;GRANT ALL ON TABLE Supplier TO PurchaseManagerRole;GRANT ALL ON TABLE PartSupp TO PurchaseManagerRole;GRANT SaleQueryRole TO PurchaseManagerRole;GRANT CustomerQueryRole TO PurchaseManagerRole;CREA

52、TE ROLE SaleManagerRole WITH CREATEROLE;GRANT ALL ON TABLE Order TO SaleManagerRoleGRANT ALL ON TABLE Lineitem TO SaleManagerRoleGRANT SaleQueryRole TO SaleManagerRoleGRANT PurchaseQueryRole TO SaleManagerRoleCREATE ROLE CustomerManagerRole WITH CREATEROLE;GRANT ALL ON TABLE Customer TO CustomerMana

53、gerRoleGRANT ALL ON TABLE Nation TO CustomerManagerRoleGRANT ALL ON TABLE Region TO CustomerManagerRoleGRANT SaleQueryRole TO CustomerManagerRoleGRANT PurchaseQueryRole TO CustomerManagerRole(3)給用戶分配權(quán)限給部門經(jīng)理分配權(quán)限。GRANT PurchaseManagerRole TO David WITH ADMIN OPTION;GRANT SaleManagerRole TO Tom WITH ADMIN OPTION;GRANT Cust

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論