《數(shù)據(jù)庫系統(tǒng)原理》實驗報告

上傳人:jun****875 文檔編號:17746268 上傳時間:2020-12-04 格式:DOC 頁數(shù):45 大小:279.41KB
收藏 版權(quán)申訴 舉報 下載
《數(shù)據(jù)庫系統(tǒng)原理》實驗報告_第1頁
第1頁 / 共45頁
《數(shù)據(jù)庫系統(tǒng)原理》實驗報告_第2頁
第2頁 / 共45頁
《數(shù)據(jù)庫系統(tǒng)原理》實驗報告_第3頁
第3頁 / 共45頁

下載文檔到電腦,查找使用更方便

9.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《《數(shù)據(jù)庫系統(tǒng)原理》實驗報告》由會員分享,可在線閱讀,更多相關(guān)《《數(shù)據(jù)庫系統(tǒng)原理》實驗報告(45頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、 學(xué) 生 實 驗 報 告 (理工類) 課程名稱:數(shù)據(jù)庫系統(tǒng)原理 專業(yè)班級: 14軟件工程1班 學(xué)生學(xué)號: 1412101055 學(xué)生姓名: 孟祥輝 所屬院部: 軟件工程學(xué)院 指導(dǎo)教師: 麻春艷 20 15 ——20 16 學(xué)年 第 二 學(xué)期 金陵科技學(xué)院教務(wù)處制 實驗報告書寫要求 實驗報告原則上要求學(xué)生手寫,要求書寫工整。若因課程特點需打印的,要遵照以下字體、字號、間距等的具體要求。紙張一律采用A4的紙張。 實驗報告書寫

2、說明 實驗報告中一至四項內(nèi)容為必填項,包括實驗?zāi)康暮鸵?;實驗儀器和設(shè)備;實驗內(nèi)容與過程;實驗結(jié)果與分析。各院部可根據(jù)學(xué)科特點和實驗具體要求增加項目。 填寫注意事項 (1)細(xì)致觀察,及時、準(zhǔn)確、如實記錄。 (2)準(zhǔn)確說明,層次清晰。 (3)盡量采用專用術(shù)語來說明事物?!? (4)外文、符號、公式要準(zhǔn)確,應(yīng)使用統(tǒng)一規(guī)定的名詞和符號。 (5)應(yīng)獨立完成實驗報告的書寫,嚴(yán)禁抄襲、復(fù)印,一經(jīng)發(fā)現(xiàn),以零分論處。 實驗報告批改說明 實驗報告的批改要及時、認(rèn)真、仔細(xì),一律用紅色筆批改。實驗報告的批改成績采用百分制,具體評分標(biāo)準(zhǔn)由各院部自行制定。 實驗報告裝訂要求 實驗批改完畢后,任課老師

3、將每門課程的每個實驗項目的實驗報告以自然班為單位、按學(xué)號升序排列,裝訂成冊,并附上一份該門課程的實驗大綱。 實驗項目名稱:數(shù)據(jù)庫定義與操作語言 實驗學(xué)時: 2 同組學(xué)生姓名: 孟陳、陳曉雪、季佰軍 實驗地點: 1318 實驗日期: 5.19 實驗成績: 批改教師: 批改時間: 一、實驗?zāi)康? 1、理解

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

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

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

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

8、les, Public; CREATE TABLE Region( 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( sup

9、pkey INTEGER PRIMARY KEY, name CHAR(25), address VARCHAR(40), 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),

10、 size INTEGER, container CHAR(10), retailprice REAL, comment VARCHAR(23)); CREATE TABLE PartSupp( partkey INTEGER REFERENCES Part(partkey), suppkey INTEGER REFERENCES Supplier(suppkey), availqty INTEGER, supplycost REAL , comment varchar(199), PRIMARY KEY (parkey,suppkey)); CREATE TABL

11、E Costomer( custkey INTEGER PRIMARY KEY, name VARCHAR(25), address VARCHAR(40), nationkey INTEGER REFERENCES Nation(nationkey), phone CHAR(15), acctbal REAL, mktsegment CHAR(10), comment VARCHAR(117)); CREATE TABLE Orders( orderkey INTEGER PRIMARY KEY, custkey INTEGER REFERENCES Customer(

12、custkey), orderstatus CHAR(1), totalprice REAL, orderdate DATE, orderpriority INTEGER, comment VARCHAR(79)); CREATE TABLE Lineitem( orderkey INTEGER REFERENCES Order(orderkey), partkey INTEGER REFERENCES Part(partkey), suppkey INTEGER REFERENCES Supplier(suppkey), linenumber INTEGER, quan

13、tity REAL, extendedprice REAL, discount REAL, tax REAL, returnflag CHAR(1), linestatus CHAR(1), shipinstruct CHAR(25), shipmode CHAR(10), comment VARCHAR(44), PRIMARY KEY(orderkey,linenumber), FOREIGN KEY(Partkey,suppkey) REFERENCES PartSupp(partkey,suppkey)); 2、數(shù)據(jù)基本查詢 (1)單表查詢(實現(xiàn)投影操作) 查

14、詢供應(yīng)商的名稱、地址和聯(lián)系電話。 SELECTE name,address,phone FROMSupplier; (2)單表查詢(實現(xiàn)選擇操作) 查詢最近一周內(nèi)提交的總價大于1000元的訂單的編號、顧客編號等訂單的所有信息。 SELECT *FROM Sales.Orders WHERE CURRENT_DATE-orderdata<7 AND totalprice >1000; (3)不帶分組過濾條件的分組統(tǒng)計查詢 統(tǒng)計每個顧客的訂購金額 SELECT C.custkey ,SUM(O.totalprice) FROM customer C,Orders O WHERE

15、C.custkey=O.custkey GROUP BY C.custkey; (4) 帶分組過濾條件的分組統(tǒng)計查詢 查詢訂單平均金額超過1000元的顧客編號及其姓名 SELECT C.custkey,MAX(C.name) FROM Customer C,Orders O WHERE C.custkey=O.custkey GROUP BY C.custkey; HAVING AVG(O.totalprice)>1000; (5) 表單自身連接查詢 查詢與“金倉集團(tuán)”在同一個國家的供應(yīng)商編號、名稱和地址信息。 SELECT F.suppkey,F.name,F(xiàn).addr

16、ess FROM Supplier F,Supplier S WHERE F.nationkey=S.nationkey AND S.name=金倉集團(tuán); (6) 兩表連接查詢(普通連接) 查詢供應(yīng)價格大于零售價格的零件名、制造商名、零售價格和供應(yīng)價格。 SELECT P.name,P.mfgr,P.retailprice,PS.supplycost FROM Part P,Partsupp PS WHERE P.retailprice>PS.supplycost; (7) 兩表連接查詢(自然連接) 查詢供應(yīng)價格大于零售價格的零件名、制造商名、零售價格和供應(yīng)價格。 SEL

17、ECT P.name,P.mfgr,P.retailprice,PS.supplycost FROM Part P,Partsupp PS WHERE P.partkey=PS.partkey AND P.retailprice>PS.supplycost; (8)三表連接查詢 查詢顧客“蘇舉庫”訂購的訂單編號、總價及其訂購的零件編號、數(shù)量和明細(xì)價格。 SELECT O.orderkey,O.totalprice,L.partkey,L.quantity,L.extendedprice FROM Custom C,Orders O,Lineitem L WHERE C.c

18、ustkey=O.custkey AND O.orderkey=L.orderkey AND C.name=蘇舉庫; 3、數(shù)據(jù)高級查詢實驗 (1)IN嵌套查詢 查詢訂購了“海大”制造的“船舶模擬駕駛艙”的顧客。 SELECT custkey,name FROM Customer WHERE custkey IN ( SELECT O.custkey FROM Orders O,Lineitme L,PartSupp PS,Part P WHERE O.orderkey=L.orderkey AND L.partkey=PS.part

19、key AND L.suppkey=PS.suppkey AND PS.partkey=P.partkey AND P.mfgr=海大 AND P.name=船舶模擬駕駛艙); SELECT custkey,name FROM Customer WHERE cuskey IN ( SELECT O.custkey FROM Orders O,Lineitem L,Part P WHERE O.orderkey=L.orderkey AND L.partkey=P.partkey AND

20、 p.mfgr=海大 AND P.name=船舶模擬駕駛艙); (2)單層EXISTS嵌套查詢 查詢沒有購買過“海大”制造的“船舶模擬駕駛艙”的顧客。 SELECT custkey,name FROM Customer WHERE NOT EXISTS( SELECT O.custkey FROM Orders O,Lineitem L,PartSupp PS,Part P WHERE C.cuskey=O.custkey AND O.orderkey=L.orderkey AND L.partkey=PS.partkey

21、AND L.suppkey=PS.suppkey AND PS.partkey=P.partkey AND p.mfgr=海大 AND P.name=船舶模擬駕駛艙); (3)雙層EXISTS嵌套查詢 查詢至少購買過顧客“張三”購買過的全部零件的顧客姓名。 SELECT CA.name FROM Customer CA WHERE NOT EXISTS (SELECT * FROM Customer CB,Oders OB,Lineitem LB WHERE CB.custkey=OB.custkey AND OB

22、.orderkey=LB.orderkey AND CB.name=張三 AND NOT EXISTS(SELECT * FROM Orders OC,Lineitem LC WHERE CA.custkey=LC.custkey AND OC.orderkey=LC.orderkey AND LB.suppkey=LC.suppkey AND LB.partkey=LC.partkey)); (4)FROM子句中的嵌套查詢 查詢訂單平均金額超過1萬元的顧客中的中國籍顧客信息。 SE

23、LECT 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=中國; (5)集合查詢(交) 查詢顧客“張三”和“李四”都訂購過的全部零件的信息。 SELECT P.* FROM Customer C,Orders O,Lineitem

24、 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.orderk

25、ey=L.orderkey AND L.partkey=PS.partkey AND L.suppkey=PS.suppkey AND PS.partkey=P.partkey AND C.name=李四; (6)集合查詢(并) 查詢顧客“張三”和“李四”訂購的全部零件的信息。 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

26、=PS.partkey AND L.suppkey=PS.suppkey AND PS.partkey=P.partkey AND C.name=張三; UNION 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 AND PS.partkey=P.

27、partkey AND C.name=李四; (7)集合查詢(差) 顧客“張三”訂購過而“李四”沒訂購過的零件的信息。 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 AND PS.partkey=P.partkey AND C.name=張三; EX

28、CEPT 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 AND PS.partkey=P.partkey AND C.name=李四; 4、數(shù)據(jù)更新實驗 (1)INSERT基本語句(插入全部列的數(shù)據(jù)) 插入一條顧客記錄,要求每列都給一個合理的值。 INSE

29、RT INTO Customer VALUES (30,張三,北京市,40,010-51001199,0.00,Northeast,VIP Customer); (2)INSERT基本語句(插入部分列的數(shù)據(jù)) 插入一條訂單記錄,給出必要的幾個字段值。 INSERT INTO Lineitem(orderkey,Linenumber,partkey,suppkey,quantity,shipdate) VALUES(862,ROUND(RANDOM()*100,0,479,1,10,2012-3-6); /*RANDOM()函數(shù)為隨機(jī)小數(shù)生成函數(shù),ROUND()為四舍五入函數(shù)*/

30、 (3)批量數(shù)據(jù)INSERT語句 ①  創(chuàng)建一個新的顧客表,把所有中國籍顧客插入到新的顧客表中。 CREATE TABLE NewCustmoer AS SELECT * FROM Customer WITH NO DATA; /*WITH NO DATA子句使得SELECT查詢只生成一個結(jié)果模式,不查詢出實際數(shù)據(jù)*/ INSERT INTO NewCustomer /*批量插入SELECT 語句查詢結(jié)果到NewCustomer表中*/ SELECT C.* FROM Costomer C,Nation N WHERE C.nationkey=N.nationkey AND N

31、.name=中國; ②  創(chuàng)建一個顧客購物統(tǒng)計表,記錄每個顧客及其購物總數(shù)和總價等信息。 CREATE TABLE ShoppingStat (custkey INTEGER, quantity REAL, totalprice REAL); INSERT INTO ShoppingStat SELECT C.custkey,Sum(L.quantity),Sum(O.totalprice) /*對分組后的數(shù)據(jù)求總和*/ FROM Customer C,Order O,Lineitem L WHERE C.custkey=O.custkey AND O.orde

32、rkey=L.orderkey GROUP BY C.custkey ③ 倍增零件表的數(shù)據(jù),多次重復(fù)執(zhí)行,直到總記錄數(shù)達(dá)到50萬為止。 INSERT INTO Part SELECT partkey+(SELECT COUNT(*) FROM Part), name,mfgr,brand,type,size,container,retailprice,comment FROM Part; (4)UPDATE語句(插入部分記錄的部分列值) “金倉集團(tuán)”供應(yīng)的所有零件的供應(yīng)成本價下降10%。 UPDATE PartSupp SET supplycost=supplycost*

33、0.9 WHERE suppkey=(SELECT suppkey /*找出要修改的那些記錄*/ FROM Supplier WHERE name=金倉集團(tuán)); (5)UPDATE語句(利用一個表中的數(shù)據(jù)修改另外一個表中的數(shù)據(jù)) 利用Part表中的零售價格來修改Lineitem中的extendedprice,其中extendedprice=Part.retailprice*quantity。 UPDATE Lineitem L SET L.extendedprice=P.retailprice*L.quantity

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

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

36、 SELECT P.partkey,P.name,PS.availqty,P.retailprice,PS.supplycost,P.comment FROM Part P,PartSupp PS,Supplier S WHERE P.partkey=PS.partkey AND S.suppkey=PS.suppkey AND S.name=海大汽配; (2) 創(chuàng)建視圖(不能省略列名的情況) 創(chuàng)建一個視圖V_CustAvgOrder,按顧客統(tǒng)計平均每個訂單的購買金額和零件數(shù)量,要求輸出 顧客編號、姓名,平均購買金額和平均購買零件數(shù)量。 CREATE VIEW V_CustAvg

37、Order(custkey,cname,avgprice,avgquantity) AS SELECT C.custkey,MAX(C.name),AVG(O.totalprice),AVG(L.quantity) FROM Customer C,Orders O,Lineitem L WHERE C.custkey=O.custkey AND L.orderkey=O.orderkey GROUP BY C.custkey; (3) 創(chuàng)建視圖(WITH CHECK OPTION) 使用WITH CHECK OPTION,創(chuàng)建一個“海大汽配”供應(yīng)商供應(yīng)的零件視圖V_DLMU_Pa

38、rtSupp2,要求列出供應(yīng)零件的編號、可用數(shù)量和供應(yīng)價格等信息。然后通過該視圖分別增加、刪除和修改一條“海大汽配”零件供應(yīng)記錄,驗證WITH CHECK OPTION是否起作用。 CREATE VIEW V_DLMU_PartSupp2 AS SELECT partkey,suppkey,availqty,supplycost FROM PartSupp WHERE suppkey=(SELECT suppkey FROM Supplier WHERE name=海大汽配) WITH CHECK OPTION; I

39、NSERT INTO V_DLMU_PartSupp2 VALUES (58889,5048,704,77760); UPADTE V_DLMU_PartSupp2 SET supplycost=12 WHERE suppkey=58889; DELETE FROM V_DLMU_PartSupp2 WHERE suppkey=58889; (4) 可更新的視圖(行列子集視圖) 使用WITH CHECK OPTION,創(chuàng)建一個“海大汽配”供應(yīng)商供應(yīng)的零件視圖V_DLMU_PartSupp4,要求列出供應(yīng)零件的編號、可用數(shù)量和供應(yīng)價格等信息。然后通過該視圖分別增加、刪除和修改一

40、條“海大汽配”零件供應(yīng)記錄,驗證該視圖是否是可更新的,并比較上述“(3)創(chuàng)建視圖”實驗任務(wù)與本任務(wù)結(jié)果有何異同。 CREATE VIEW V_DLMU_PartSupp3 AS SELECT partkey,suppkey,availqty,supplycost FROM PartSupp WHERE suppkey=(SELECT suppkey FROM Supplier WHERE name=海大汽配); INSERT INTO V_DLUM_PartSupp3 VALUES(58889,5048,704,77760); UPDATE V_DLMU_Par

41、tSupp3 SET supplycost=12 WHERE suppkey=58889; DELETE FROM V_DLMU_PartSupp3 WHERE suppkey=58889; (5)可更新的視圖 INSERT INTO V_CustAvgOrder VALUES(100000,NULL,20,2000); (6) 刪除視圖(RESTRICT/CASCADE) 創(chuàng)建顧客訂購零件明細(xì)視圖V_CustOrd,要求列出顧客編號、姓名、購買零件數(shù)、金額,然后在該視圖的基礎(chǔ)上,在創(chuàng)建(2)的視圖V_CustAvgOrder,然后使用RESTRICT選項和CASCAD

42、E選項刪除視圖V_CustOrd。 CREATE VIEW V_CustOrd(custkey,cname,qty,extprice) AS SELECT C.custkey,C.name,L.quantity,L.extendedprice FROM Customer C,Order O,Lineitem L WHERE C.custkey=O.custkey AND O.orderkey=L.orderkey; CREATE VIEW V_CustAvgOrder(custkey,cname,avgqty,avgprice) AS SELECT custkey,MA

43、X(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ù)索引(對某個屬性的函數(shù)創(chuàng)建索引,稱為函數(shù)索引) 在零件表的零件名稱字段上創(chuàng)建一個零件

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

45、ON Part; (5) 創(chuàng)建Hash索引 零件表的名稱字段上創(chuàng)建一個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)分析某個SQL查詢語句執(zhí)行時是否使用了索引 EXPLAIN SELECT * FROM part WHERE name=零件; (8) *驗證索引效率 創(chuàng)建一個函數(shù)TestInde

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

47、HERE name=p_partname; /*執(zhí)行SQL查詢,不保存查詢結(jié)果*/ SELECT CLOCK_TIMESTAMP() INTO endtime; SELECT DATEDIFF(‘ms’,begintime,endtime) INTO durationtime; RETURN durationtime; /*計算并返回查詢執(zhí)行時間,時間單位為毫秒ms*/ END; /*查看當(dāng)零件表Part數(shù)據(jù)模型比較小,并且無索引時的執(zhí)行時間*/ SELECT TestIndex(‘零件名稱’); INSERT INTO Part /*不斷倍增零件表的數(shù)據(jù)

48、,直到50萬條記錄*/ SELECT partkey+(SELECT COUNT(*) FROM Part), Name,mfgr,brand,type,size,container,retailprice,comment FRPM Part; /*查看當(dāng)零件表Part數(shù)據(jù)模型比較大,但無索引時的執(zhí)行時間*/ SELECT TestIndex(‘零件名稱’); CREATE INDEX part_name ON Part(name); /*在零件表的零件名稱字段上創(chuàng)建索引*/ /*查看零件表Part數(shù)據(jù)規(guī)模比較大,有索引時的執(zhí)行時間*/ SELECT TestIndex

49、(); 四、實驗心得 通過本次實驗,我知道只有正確理解數(shù)據(jù)庫模式結(jié)構(gòu),才能正確設(shè)計數(shù)據(jù)庫查詢。連接查詢是數(shù)據(jù)庫sql查詢中最重要的查詢,連接查詢的設(shè)計要特別注意,不同的查詢表達(dá),其查詢執(zhí)行的性能會有很大差別。正確地設(shè)計和執(zhí)行數(shù)據(jù)更新語句,確保正確地錄入數(shù)據(jù)和更新數(shù)據(jù),才能保證查詢的數(shù)據(jù)正確。當(dāng)數(shù)據(jù)更新失敗時,一個主要原因是更新數(shù)據(jù)時違反了完整性約束。 實驗項目名稱:安全性語言實驗 實驗學(xué)時: 2 同組學(xué)生姓名: 孟陳、陳曉雪、季佰軍 實驗地點: 1318

50、 實驗日期: 5.26 實驗成績: 批改教師: 批改時間: 一、 實驗?zāi)康? 1、 掌握自主存取控制缺陷的定義和維護(hù)方法。 2、 掌握數(shù)據(jù)庫審計的設(shè)置和管理方法,以便監(jiān)控數(shù)據(jù)庫操作,維護(hù)數(shù)據(jù)庫安全。 二、 實驗內(nèi)容和要求 1、 定義用戶、角色,分配權(quán)限給用戶、角色,回收權(quán)限,以相應(yīng)的用戶名登錄數(shù)據(jù)庫驗證權(quán)限分配是否正確。選擇一個應(yīng)用場景,使用自

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

52、1)創(chuàng)建用戶 為采購、銷售和客戶管理等3個部門的經(jīng)理創(chuàng)建用戶標(biāo)識,要求具有創(chuàng)建用戶或角色的權(quán)利。 CREATE USER David WITH CREATEROLE PASSWORD 123456; CREATE USER Tom WITH CREATEROLE PASSWORD 123456; CREATE USER Kathy WITH CREATEROLE PASSWORD 123456; 為采購、銷售和客戶管理等3個部門的職員創(chuàng)建用戶標(biāo)識和用戶口令。 CREATE USER Jeffery WITH PASSWORD 123456; CREATE USER Jane W

53、ITH PASSWORD 123456; CREATE USER Mike WITH PASSWORD 123456; (2)創(chuàng)建角色并分配權(quán)限 為各個部門分別創(chuàng)建一個查詢角色,并分配相應(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; CRE

54、ATE ROLE SaleQueryRole; GRANT SELECT ON TABLE Order TO SaleQueryRole; 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 Custom

55、erQueryRole; 為各個部門分別創(chuàng)建一個職員角色,對本部門信息具有查看、插入權(quán)限。 CREATE ROLE PurchaseEmployeeRole; 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 SaleEmployeeRol

56、e; GRANT SELECT,INSERT ON TABLE Order TO SaleEmployeeRole; GRANT SELECT,INSERT ON TABLE Lineitem TO SaleEmployeeRole; CREATE ROLE CustomerEmployeeRole; GRANT SELECT,INSERT ON TABLE Customer TO CustomerEmployeeRole; GRANT SELECT,INSERT ON TABLE Nation TO CustomerEmployeeRole; GRANT SELECT,INS

57、ERT ON TABLE Region TO CustomerEmployeeRole; 為各個部門創(chuàng)建一個經(jīng)理角色,相應(yīng)角色對本部門的信息具有完全控制權(quán)限,對其他部門的信息具有查詢權(quán)。經(jīng)理有權(quán)給本部門資源分配權(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 Purcha

58、seManagerRole; GRANT SaleQueryRole TO PurchaseManagerRole; GRANT CustomerQueryRole TO PurchaseManagerRole; CREATE ROLE SaleManagerRole WITH CREATEROLE; GRANT ALL ON TABLE Order TO SaleManagerRole GRANT ALL ON TABLE Lineitem TO SaleManagerRole GRANT SaleQueryRole TO SaleManagerRole GRANT Pur

59、chaseQueryRole TO SaleManagerRole CREATE ROLE CustomerManagerRole WITH CREATEROLE; GRANT ALL ON TABLE Customer TO CustomerManagerRole GRANT ALL ON TABLE Nation TO CustomerManagerRole GRANT ALL ON TABLE Region TO CustomerManagerRole GRANT SaleQueryRole TO CustomerManagerRole GRANT PurchaseQue

60、ryRole TO CustomerManagerRole (3)給用戶分配權(quán)限 給部門經(jīng)理分配權(quán)限。 GRANT PurchaseManagerRole TO David WITH ADMIN OPTION; GRANT SaleManagerRole TO Tom WITH ADMIN OPTION; GRANT CustomerManagerRole TO Kathy WITH ADMIN OPTION; 給各部門職員分配權(quán)限 GRANT PurchaseEmployeeRole TO Jeffery; GRANT SaleEmployeeRole TO Jane; G

61、RANT CustomerEmployeeRole TO Mike; (4)回收角色或用戶權(quán)限 收回客戶經(jīng)理角色的銷售信息查看權(quán)限。 REVOKE SaleQueryRole FROM CustomerManagerRole; 回收MIKE的客戶部門職員權(quán)限。 REVOKE CustomerEmployeeRole FROM Mike; (5)驗證權(quán)限分配正確性 以David用戶名登錄數(shù)據(jù)庫,驗證采購部門經(jīng)理的權(quán)限 SELECT * FROM Part; DELETE * FROM Order; 回收MIKE的客戶部門職員權(quán)限 SELECT * FROM Customer

62、; SELECT * FROM Part; 2、審計實驗 (1)審計開關(guān) 顯示當(dāng)前審計開關(guān)狀態(tài) SHOW AUDIT_TRAIL; 打開審計開關(guān) SET AUDIT_TRAIL TO ON; (2)數(shù)據(jù)庫操作審計 對客戶信息表上的刪除操作設(shè)置審計。 AUDIT DELETE ON Sales.Customer BY ACCESS; 以普通用戶登錄,執(zhí)行sql語句。 DELETE Sales.Customer WHERE custkey=1011; 查看數(shù)據(jù)庫對象審計信息,驗證審計設(shè)置是否生效。 SELECT * FROM SYS_AUDIT_OBJECT; (3)

63、語句級審計 對表定義的更改語句ALTER設(shè)置審計 AUDIT ALTER TABLE BY ACCESS; 查看所有數(shù)據(jù)庫所有語句級審計設(shè)置,驗證審計設(shè)置是否生效 SELECT * FROM SYS_STMT_AUDIT_OPTS; 以普通用戶登錄,執(zhí)行sql語句,驗證審計設(shè)置是否生效 ALTER TABLE Customer ADD COLUMN tt INT; 查看所有審計信息 SELECT * FROM SYS_AUDIT_TRAIL; 四、實驗心得 通過本次實驗,知道了定義用戶、角色,分配權(quán)限給用戶、角色,回收權(quán)限,并以相應(yīng)的用戶名登陸數(shù)據(jù)庫驗證權(quán)限分配是否正確的方

64、法。并且知道了數(shù)據(jù)庫審計的目的和方法。做實驗的同時,對sql語句有了更熟練的運用。 實驗項目名稱:完整性語言實驗 實驗學(xué)時: 2 同組學(xué)生姓名: 孟陳、陳曉雪、季佰軍 實驗地點: 1318 實驗日期: 6.2 實驗成績: 批改教師: 批改時間:

65、 一、 實驗?zāi)康? 1、 掌握實體完整性的定義和維護(hù)方法; 2、 掌握參照完整性的定義和維護(hù)方法; 3、 掌握用戶自定義完整性的定義和維護(hù)方法; 二、 實驗內(nèi)容和要求 1、定義實體完整性,刪除實體完整性。能夠?qū)懗鰞煞N方式定義實體完整性的SQL語句:創(chuàng)建表時定義實體完整性、創(chuàng)建表后定義實體完整性。設(shè)計SQL語句驗證完整性約束是否起作用。 2、定義參照完整性,定義參照完整性的違規(guī)處理,刪除參照完整性。寫出兩種方式定義參照完整性的SQL語句:創(chuàng)建表時定義參照完整性、創(chuàng)建表后定義參照完整性。 3、針對具體應(yīng)用語義,選擇NULL/NOT NULL、DEFAULT、UNIQUE、CHECK

66、等,定義屬性上的約束條件。 三、實驗過程 1、實體完整性實驗 (1)創(chuàng)建表時定義實體完整性(列級實體完整性) 定義供應(yīng)商表的實體完整性。 CREATE TABLE Supplier( suppkey INSERT CONSTRAINT PK_supplier PRIMARY KEY, name CHAR(25), address VARCHAR(40), nationkey INSERT, phone CHAR(15), acctbal REAL, comment VARCHAR(101)); (2)創(chuàng)建表時定義實體完整性(表級實體完整性) 定義供應(yīng)商表的實體完整性。 CREATE TABLE Supplier( suppkey INSERT, name CHAR(25), address VARCHAR(40), nationkey I

展開閱讀全文
溫馨提示:
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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!