《數(shù)據(jù)庫系統(tǒng)原理》實驗報告.doc
《《數(shù)據(jù)庫系統(tǒng)原理》實驗報告.doc》由會員分享,可在線閱讀,更多相關《《數(shù)據(jù)庫系統(tǒng)原理》實驗報告.doc(45頁珍藏版)》請在裝配圖網(wǎng)上搜索。
學 生 實 驗 報 告(理工類)課程名稱:數(shù)據(jù)庫系統(tǒng)原理 專業(yè)班級: 14軟件工程1班 學生學號: 1412101055 學生姓名: 孟祥輝 所屬院部: 軟件工程學院 指導教師: 麻春艷 20 15 20 16 學年 第 二 學期 金陵科技學院教務處制實驗報告書寫要求實驗報告原則上要求學生手寫,要求書寫工整。若因課程特點需打印的,要遵照以下字體、字號、間距等的具體要求。紙張一律采用A4的紙張。實驗報告書寫說明實驗報告中一至四項內容為必填項,包括實驗目的和要求;實驗儀器和設備;實驗內容與過程;實驗結果與分析。各院部可根據(jù)學科特點和實驗具體要求增加項目。填寫注意事項(1)細致觀察,及時、準確、如實記錄。(2)準確說明,層次清晰。(3)盡量采用專用術語來說明事物。(4)外文、符號、公式要準確,應使用統(tǒng)一規(guī)定的名詞和符號。(5)應獨立完成實驗報告的書寫,嚴禁抄襲、復印,一經(jīng)發(fā)現(xiàn),以零分論處。實驗報告批改說明實驗報告的批改要及時、認真、仔細,一律用紅色筆批改。實驗報告的批改成績采用百分制,具體評分標準由各院部自行制定。實驗報告裝訂要求實驗批改完畢后,任課老師將每門課程的每個實驗項目的實驗報告以自然班為單位、按學號升序排列,裝訂成冊,并附上一份該門課程的實驗大綱。實驗項目名稱:數(shù)據(jù)庫定義與操作語言 實驗學時: 2 同組學生姓名: 孟陳、陳曉雪、季佰軍 實驗地點: 1318 實驗日期: 5.19 實驗成績: 批改教師: 批改時間: 一、實驗目的1、理解和掌握數(shù)據(jù)庫DDL語言,能夠熟練地使用SQL DDL語句創(chuàng)建、修改和刪除數(shù)據(jù)庫、模式和基本表。2、掌握SQL冊亨徐設計基本規(guī)范,熟練運用SQL語言實現(xiàn)數(shù)據(jù)基本查詢,包括單表查詢、分組統(tǒng)計查詢和連接查詢3、掌握SQL嵌套查詢和集合查詢等, 各種高級查詢的設計方法等.4、熟悉數(shù)據(jù)庫的數(shù)據(jù)更新操作,能夠使用sql語句對數(shù)據(jù)庫進行數(shù)據(jù)的插入、修改、刪除操作。5、熟悉sql語言有關系圖的操作,能夠熟練使用sql語言來創(chuàng)建需要的視圖,定義數(shù)據(jù)庫外模式,并能使用所創(chuàng)建的視圖實現(xiàn)數(shù)據(jù)管理。6、掌握所以設計原則和技巧,能夠創(chuàng)建合適的索引以提高數(shù)據(jù)庫查詢、統(tǒng)計分析效率。二、實驗內容和要求1、理解和掌握SQL DDL語句的語法,特別是各種參數(shù)的具體含義和使用方法;使用sql語句創(chuàng)建、修改和刪除數(shù)據(jù)庫、模式和基本表。掌握sql語句常見語法錯誤的調試方法。2、針對TPC-H數(shù)據(jù)庫設計各種單表查詢sql語句、分組統(tǒng)計查詢語句;設計單個表針對自身的連接查詢,涉及多個表的連接查詢。理解和掌握sql查詢語句各個子句的特點和作用,按照sql程序設計規(guī)范寫出具體的sql查詢語句,并調試通過。3、針對TPC-H數(shù)據(jù)庫,證券分析用戶查詢要求,設計各種嵌套查詢和集合查詢。4、針對TPC-H數(shù)據(jù)庫設計單元主唱入、批量數(shù)據(jù)插入、修改數(shù)據(jù)和刪除數(shù)據(jù)的sql語句。理解和掌握insert、update、delete語法結構的各個組成成分,結合嵌套sql子查詢,分別設計幾個不同形式的插入、修改和刪除數(shù)據(jù)的語句,并調試成功。5、針對給定的數(shù)據(jù)庫模式,以及相應的應用要求,創(chuàng)建視圖和帶WITH CHECK OPTION的視圖,并驗證視圖WITH CHECK OPTION選項的有效性。理解和掌握試圖消解執(zhí)行原理,掌握可更新視圖和不可更新視圖的區(qū)別。6、針對給定的數(shù)據(jù)庫模式和具體應用需求,創(chuàng)建唯一索引、函數(shù)索引、復合索引等;修改索引;刪除索引。設計相應的sql查詢驗證索引有效性,學習利用EXPLAIN命令分析sql查詢是否使用了所創(chuàng)建的索引,并能夠分析其原因,執(zhí)行sql查詢并估算索引提高查詢效率的百分比,要求實驗數(shù)據(jù)達到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個基本表。/*設置當前會話的搜索路徑為sales模式、public模式,基本表就會自動創(chuàng)建在sales模式下。*/SET SEARCH_PATH TO Sales, 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(suppkey 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),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 TABLE 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(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,quantity 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)投影操作)查詢供應商的名稱、地址和聯(lián)系電話。SELECTE name,address,phone FROMSupplier;(2)單表查詢(實現(xiàn)選擇操作)查詢最近一周內提交的總價大于1000元的訂單的編號、顧客編號等訂單的所有信息。SELECT *FROM Sales.Orders WHERE CURRENT_DATE-orderdata1000;(3)不帶分組過濾條件的分組統(tǒng)計查詢統(tǒng)計每個顧客的訂購金額SELECT C.custkey ,SUM(O.totalprice)FROM customer C,Orders OWHERE C.custkey=O.custkeyGROUP BY C.custkey;(4) 帶分組過濾條件的分組統(tǒng)計查詢查詢訂單平均金額超過1000元的顧客編號及其姓名SELECT C.custkey,MAX(C.name)FROM Customer C,Orders OWHERE C.custkey=O.custkeyGROUP BY C.custkey;HAVING AVG(O.totalprice)1000;(5) 表單自身連接查詢查詢與“金倉集團”在同一個國家的供應商編號、名稱和地址信息。SELECT F.suppkey,F.name,F(xiàn).addressFROM Supplier F,Supplier S WHERE F.nationkey=S.nationkey AND S.name=金倉集團;(6) 兩表連接查詢(普通連接)查詢供應價格大于零售價格的零件名、制造商名、零售價格和供應價格。SELECT P.name,P.mfgr,P.retailprice,PS.supplycostFROM Part P,Partsupp PSWHERE P.retailpricePS.supplycost;(7) 兩表連接查詢(自然連接)查詢供應價格大于零售價格的零件名、制造商名、零售價格和供應價格。SELECT P.name,P.mfgr,P.retailprice,PS.supplycostFROM Part P,Partsupp PSWHERE P.partkey=PS.partkey AND P.retailpricePS.supplycost;(8)三表連接查詢查詢顧客“蘇舉庫”訂購的訂單編號、總價及其訂購的零件編號、數(shù)量和明細價格。SELECT O.orderkey,O.totalprice,L.partkey,L.quantity,L.extendedpriceFROM Custom C,Orders O,Lineitem LWHERE C.custkey=O.custkey AND O.orderkey=L.orderkey AND C.name=蘇舉庫;3、數(shù)據(jù)高級查詢實驗(1)IN嵌套查詢查詢訂購了“海大”制造的“船舶模擬駕駛艙”的顧客。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.suppkey 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嵌套查詢查詢沒有購買過“海大”制造的“船舶模擬駕駛艙”的顧客。SELECT custkey,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嵌套查詢查詢至少購買過顧客“張三”購買過的全部零件的顧客姓名。SELECT 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.partkey=LC.partkey);(4)FROM子句中的嵌套查詢查詢訂單平均金額超過1萬元的顧客中的中國籍顧客信息。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=中國;(5)集合查詢(交)查詢顧客“張三”和“李四”都訂購過的全部零件的信息。SELECT P.*FROM Customer C,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.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=PS.partkey AND L.suppkey=PS.suppkey AND 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)集合查詢(差)顧客“張三”訂購過而“李四”沒訂購過的零件的信息。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=張三;EXCEPTSELECT 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ù))插入一條顧客記錄,要求每列都給一個合理的值。INSERT INTO CustomerVALUES (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ù)為隨機小數(shù)生成函數(shù),ROUND()為四舍五入函數(shù)*/(3)批量數(shù)據(jù)INSERT語句 創(chuàng)建一個新的顧客表,把所有中國籍顧客插入到新的顧客表中。CREATE TABLE NewCustmoer AS SELECT * FROM Customer WITH NO DATA;/*WITH NO DATA子句使得SELECT查詢只生成一個結果模式,不查詢出實際數(shù)據(jù)*/INSERT INTO NewCustomer/*批量插入SELECT 語句查詢結果到NewCustomer表中*/SELECT C.*FROM Costomer C,Nation NWHERE C.nationkey=N.nationkey AND N.name=中國; 創(chuàng)建一個顧客購物統(tǒng)計表,記錄每個顧客及其購物總數(shù)和總價等信息。CREATE TABLE ShoppingStat(custkey INTEGER, quantity REAL, totalprice REAL);INSERT INTO ShoppingStatSELECT C.custkey,Sum(L.quantity),Sum(O.totalprice)/*對分組后的數(shù)據(jù)求總和*/FROM Customer C,Order O,Lineitem LWHERE C.custkey=O.custkey AND O.orderkey=L.orderkeyGROUP BY C.custkey倍增零件表的數(shù)據(jù),多次重復執(zhí)行,直到總記錄數(shù)達到50萬為止。INSERT INTO PartSELECT partkey+(SELECT COUNT(*) FROM Part),name,mfgr,brand,type,size,container,retailprice,commentFROM Part;(4)UPDATE語句(插入部分記錄的部分列值) “金倉集團”供應的所有零件的供應成本價下降10%。UPDATE PartSuppSET supplycost=supplycost*0.9WHERE suppkey=(SELECT suppkey/*找出要修改的那些記錄*/ FROM Supplier WHERE name=金倉集團);(5)UPDATE語句(利用一個表中的數(shù)據(jù)修改另外一個表中的數(shù)據(jù)) 利用Part表中的零售價格來修改Lineitem中的extendedprice,其中extendedprice=Part.retailprice*quantity。UPDATE Lineitem LSET L.extendedprice=P.retailprice*L.quantityFROM Part PWHERE L.partkey=P.partkey;/*Lineitem表也可以直接與Part表相連接,而不需通過PartSupp連接*/(6)DELETE基本語句(刪除給定條件的所有記錄) 刪除顧客張三的所有訂單記錄。DELECT FROM Lineitem/*先刪除張三的訂單明細記錄*/WHERE orderkey IN(SELECT orderkey FROM Order O,Customer C WHERE O.custkey=C.custkey AND C.name=張三);DELECT FROM Order/*再刪除張三的訂單記錄*/WHERE custkey=(SELECT custkey FROM Customer WHERE name=張三);5、 視圖(1) 創(chuàng)建視圖(省略視圖列名) 創(chuàng)建一個“海大汽配”供應商供應的零件視圖V_DLMU_PartSupp1,要求列出供應零件的編號、零件名稱、可用數(shù)量、零售價格、供應價格和備注等信息。CREATE VIEW V_DLMU_PARTSUPP1 AS/*由SELECT子句目標列組成視圖屬性*/SELECT P.partkey,P.name,PS.availqty,P.retailprice,PS.supplycost,P.commentFROM Part P,PartSupp PS,Supplier SWHERE 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_CustAvgOrder(custkey,cname,avgprice,avgquantity) ASSELECT C.custkey,MAX(C.name),AVG(O.totalprice),AVG(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)建一個“海大汽配”供應商供應的零件視圖V_DLMU_PartSupp2,要求列出供應零件的編號、可用數(shù)量和供應價格等信息。然后通過該視圖分別增加、刪除和修改一條“海大汽配”零件供應記錄,驗證WITH CHECK OPTION是否起作用。CREATE VIEW V_DLMU_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 suppkey=58889;(4) 可更新的視圖(行列子集視圖) 使用WITH CHECK OPTION,創(chuàng)建一個“海大汽配”供應商供應的零件視圖V_DLMU_PartSupp4,要求列出供應零件的編號、可用數(shù)量和供應價格等信息。然后通過該視圖分別增加、刪除和修改一條“海大汽配”零件供應記錄,驗證該視圖是否是可更新的,并比較上述“(3)創(chuàng)建視圖”實驗任務與本任務結果有何異同。CREATE VIEW V_DLMU_PartSupp3AS SELECT partkey,suppkey,availqty,supplycostFROM PartSuppWHERE suppkey=(SELECT suppkeyFROM 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(100000,NULL,20,2000);(6) 刪除視圖(RESTRICT/CASCADE) 創(chuàng)建顧客訂購零件明細視圖V_CustOrd,要求列出顧客編號、姓名、購買零件數(shù)、金額,然后在該視圖的基礎上,在創(chuàng)建(2)的視圖V_CustAvgOrder,然后使用RESTRICT選項和CASCADE選項刪除視圖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_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ù)索引(對某個屬性的函數(shù)創(chuàng)建索引,稱為函數(shù)索引) 在零件表的零件名稱字段上創(chuàng)建一個零件名稱長度的函數(shù)索引。CREATE INDEX Idx_part_name_fun ON Part(LENGTH(name);(3)創(chuàng)建復合索引(對兩個及兩個以上的屬性創(chuàng)建索引,稱為復合索引) 在零件表的制造商和品牌兩個字段上創(chuàng)建一個復合索引。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 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ù)TestIndex,自動計算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 WHERE name=p_partname;/*執(zhí)行SQL查詢,不保存查詢結果*/ SELECT CLOCK_TIMESTAMP() INTO endtime; SELECT DATEDIFF(ms,begintime,endtime) INTO durationtime; RETURN durationtime;/*計算并返回查詢執(zhí)行時間,時間單位為毫秒ms*/ END; /*查看當零件表Part數(shù)據(jù)模型比較小,并且無索引時的執(zhí)行時間*/ SELECT TestIndex(零件名稱); INSERT INTO Part/*不斷倍增零件表的數(shù)據(jù),直到50萬條記錄*/ SELECT partkey+(SELECT COUNT(*) FROM Part), Name,mfgr,brand,type,size,container,retailprice,comment FRPM Part;/*查看當零件表Part數(shù)據(jù)模型比較大,但無索引時的執(zhí)行時間*/SELECT TestIndex(零件名稱);CREATE INDEX part_name ON Part(name);/*在零件表的零件名稱字段上創(chuàng)建索引*/*查看零件表Part數(shù)據(jù)規(guī)模比較大,有索引時的執(zhí)行時間*/SELECT TestIndex();四、實驗心得通過本次實驗,我知道只有正確理解數(shù)據(jù)庫模式結構,才能正確設計數(shù)據(jù)庫查詢。連接查詢是數(shù)據(jù)庫sql查詢中最重要的查詢,連接查詢的設計要特別注意,不同的查詢表達,其查詢執(zhí)行的性能會有很大差別。正確地設計和執(zhí)行數(shù)據(jù)更新語句,確保正確地錄入數(shù)據(jù)和更新數(shù)據(jù),才能保證查詢的數(shù)據(jù)正確。當數(shù)據(jù)更新失敗時,一個主要原因是更新數(shù)據(jù)時違反了完整性約束。實驗項目名稱:安全性語言實驗 實驗學時: 2 同組學生姓名: 孟陳、陳曉雪、季佰軍 實驗地點: 1318 實驗日期: 5.26 實驗成績: 批改教師: 批改時間: 一、 實驗目的1、 掌握自主存取控制缺陷的定義和維護方法。2、 掌握數(shù)據(jù)庫審計的設置和管理方法,以便監(jiān)控數(shù)據(jù)庫操作,維護數(shù)據(jù)庫安全。二、 實驗內容和要求1、 定義用戶、角色,分配權限給用戶、角色,回收權限,以相應的用戶名登錄數(shù)據(jù)庫驗證權限分配是否正確。選擇一個應用場景,使用自主存取控制機制設置權限分配??梢圆捎脙煞N方案。方案一:采用SYSTEM超級用戶登錄數(shù)據(jù)庫,完成所有權限分配工作,然后用相應用戶名登錄數(shù)據(jù)庫已驗證權限分配正確性;方案二:采用SYSTEM用戶登錄數(shù)據(jù)庫創(chuàng)建3個部門經(jīng)理用戶,并分配相應的權限,然后分別用3個經(jīng)理用戶名登錄數(shù)據(jù)庫,創(chuàng)建相應部門的USER、ROLE,并分配相應權限。2、打開數(shù)據(jù)庫審計開關。以具有審計權限的用戶登錄數(shù)據(jù)庫,設置審計權限,然后以普通用戶登錄數(shù)據(jù)庫,執(zhí)行相應的數(shù)據(jù)操縱sql語句,驗證相應審計設置是否生效,最后在一具有審計權限的用戶登錄數(shù)據(jù)庫,查看是否存在相應的審計信息。三、實驗過程1、自主存取控制實驗(1)創(chuàng)建用戶 為采購、銷售和客戶管理等3個部門的經(jīng)理創(chuàng)建用戶標識,要求具有創(chuàng)建用戶或角色的權利。CREATE USER David WITH CREATEROLE PASSWORD 123456;CREATE USER Tom WITH CREATEROLE PASSWORD 123456;CREATE USER Kathy WITH CREATEROLE PASSWORD 123456;為采購、銷售和客戶管理等3個部門的職員創(chuàng)建用戶標識和用戶口令。CREATE USER Jeffery WITH PASSWORD 123456;CREATE USER Jane WITH PASSWORD 123456;CREATE USER Mike WITH PASSWORD 123456;(2)創(chuàng)建角色并分配權限為各個部門分別創(chuàng)建一個查詢角色,并分配相應的查詢權限。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 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 CustomerQueryRole;為各個部門分別創(chuàng)建一個職員角色,對本部門信息具有查看、插入權限。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 SaleEmployeeRole;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,INSERT ON TABLE Region TO CustomerEmployeeRole;為各個部門創(chuàng)建一個經(jīng)理角色,相應角色對本部門的信息具有完全控制權限,對其他部門的信息具有查詢權。經(jīng)理有權給本部門資源分配權限。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;CREATE 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 CustomerManagerRoleGRANT ALL ON TABLE Nation TO CustomerManagerRoleGRANT ALL ON TABLE Region TO CustomerManagerRoleGRANT SaleQueryRole TO CustomerManagerRoleGRANT PurchaseQueryRole TO CustomerManagerRole(3)給用戶分配權限給部門經(jīng)理分配權限。GRANT PurchaseManagerRole TO David WITH ADMIN OPTION;GRANT SaleManagerRole TO Tom WITH ADMIN OPTION;GRANT CustomerManagerRole TO Kathy WITH ADMIN OPTION;給各部門職員分配權限GRANT PurchaseEmployeeRole TO Jeffery;GRANT SaleEmployeeRole TO Jane;GRANT CustomerEmployeeRole TO Mike;(4)回收角色或用戶權限收回客戶經(jīng)理角色的銷售信息查看權限。REVOKE SaleQueryRole FROM CustomerManagerRole;回收MIKE的客戶部門職員權限。REVOKE CustomerEmployeeRole FROM Mike;(5)驗證權限分配正確性以David用戶名登錄數(shù)據(jù)庫,驗證采購部門經(jīng)理的權限SELECT * FROM Part;DELETE * FROM Order;回收MIKE的客戶部門職員權限SELECT * FROM Customer;SELECT * FROM Part;2、審計實驗(1)審計開關顯示當前審計開關狀態(tài)SHOW AUDIT_TRAIL;打開審計開關SET AUDIT_TRAIL TO ON;(2)數(shù)據(jù)庫操作審計對客戶信息表上的刪除操作設置審計。AUDIT DELETE ON Sales.Customer BY ACCESS;以普通用戶登錄,執(zhí)行sql語句。DELETE Sales.Customer WHERE custkey=1011;查看數(shù)據(jù)庫對象審計信息,驗證審計設置是否生效。SELECT * FROM SYS_AUDIT_OBJECT;(3)語句級審計對表定義的更改語句ALTER設置審計AUDIT ALTER TABLE BY ACCESS;查看所有數(shù)據(jù)庫所有語句級審計設置,驗證審計設置是否生效SELECT * FROM SYS_STMT_AUDIT_OPTS;以普通用戶登錄,執(zhí)行sql語句,驗證審計設置是否生效ALTER TABLE Customer ADD COLUMN tt INT;查看所有審計信息SELECT * FROM SYS_AUDIT_TRAIL;四、實驗心得通過本次實驗,知道了定義用戶、角色,分配權限給用戶、角色,回收權限,并以相應的用戶名登陸數(shù)據(jù)庫驗證權限分配是否正確的方法。并且知道了數(shù)據(jù)庫審計的目的和方法。做實驗的同時,對sql語句有了更熟練的運用。實驗項目名稱:完整性語言實驗 實驗學時: 2 同組學生姓名: 孟陳、陳曉雪、季佰軍 實驗地點: 1318 實驗日期: 6.2 實驗成績: 批改教師: 批改時間: 一、 實驗目的1、 掌握實體完整性的定義和維護方法;2、 掌握參照完整性的定義和維護方法;3、 掌握用戶自定義完整性的定義和維護方法;二、 實驗內容和要求1、定義實體完整性,刪除實體完整性。能夠寫出兩種方式定義實體完整性的SQL語句:創(chuàng)建表時定義實體完整性、創(chuàng)建表后定義實體完整性。設計SQL語句驗證完整性約束是否起作用。2、定義參照完整性,定義參照完整性的違規(guī)處理,刪除參照完整性。寫出兩種方式定義參照完整性的SQL語句:創(chuàng)建表時定義參照完整性、創(chuàng)建表后定義參照完整性。3、針對具體應用語義,選擇NULL/NOT NULL、DEFAULT、UNIQUE、CHECK等,定義屬性上的約束條件。三、實驗過程1、實體完整性實驗(1)創(chuà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)建表時定義實體完整性(表級實體完整性)定義供應商表的實體完整性。CREATE TABLE Supplier( suppkey INSERT, name CHAR(25), address VARCHAR(40), nationkey I- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- 數(shù)據(jù)庫系統(tǒng)原理 數(shù)據(jù)庫 系統(tǒng) 原理 實驗 報告
裝配圖網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學習交流,未經(jīng)上傳用戶書面授權,請勿作他用。
相關資源
更多
正為您匹配相似的精品文檔
鏈接地址:http://m.italysoccerbets.com/p-6501612.html