第一篇:實(shí)驗(yàn)報(bào)告五數(shù)據(jù)庫(kù)
實(shí)驗(yàn)報(bào)告
《數(shù)據(jù)庫(kù)原理應(yīng)用及應(yīng)用》實(shí)驗(yàn)報(bào)告
題目:
實(shí)驗(yàn)五:1、表的更新
2、視圖的創(chuàng)建、查詢(xún)及更新
日期
2014-04-08
班級(jí)
學(xué)號(hào) 2 姓名
成績(jī)
實(shí)驗(yàn)環(huán)境:在已安裝的安全的 0 SQL Server 2000 上
實(shí)驗(yàn)內(nèi)容與完成情況:
一、
表的更新
1.插入 Insert into Values
或 Insert into
Select
2.修改
Update
Set
Where
3.刪除
DELETE
WHERE 二、視圖的創(chuàng)建
create view s(sno,sname,cno,cname,grade)as select student.sno,sname ,sc.cno,cname,grade from student,sc,course where student.sno=sc.sno and sc.cno=course.cno 查詢(xún)
select * from s 視圖刪除
Drop view s 視圖的更新 Update s Set Grade=grade+3
P.115:
一、插入元組 例 1
結(jié)果:
例 2
結(jié)果:
例 3
結(jié)果:
例 4
二、修改數(shù)據(jù) 例 5
結(jié)果:
例 6
結(jié)果:
例 7
結(jié)果:
三、刪除數(shù)據(jù) 例 8
結(jié)果:
例 9
結(jié)果:
例 10
結(jié)果:
建立視圖 例 1
例 2
例 3
例 4
例 5
例 6
例 7
例 8
例 9
例 10
例 11
更新視圖 例 12
結(jié)果:
例 13
結(jié)果:
例 14
結(jié)果:
出現(xiàn)的問(wèn)題及解決方法:
教師評(píng)語(yǔ)
第二篇:數(shù)據(jù)庫(kù)實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)一 PowerDesigner 的 CDM 應(yīng)用
1:實(shí)驗(yàn)?zāi)康?/p>
使用PowerDesinger進(jìn)行數(shù)據(jù)庫(kù)概念模型設(shè)計(jì),掌握CDM中的實(shí)體、實(shí)體屬性、實(shí)體與實(shí)體之間聯(lián)系的操作方法。2:實(shí)驗(yàn)內(nèi)容
建立一個(gè)“實(shí)驗(yàn)一練習(xí)”命名的Conceptual Data Model(CDM)文件,其中應(yīng)包括的實(shí)體、實(shí)體的屬性及實(shí)體之間的聯(lián)系。3:實(shí)驗(yàn)結(jié)果
4.實(shí)驗(yàn)心得
初次接觸數(shù)據(jù)庫(kù)原理實(shí)驗(yàn),相對(duì)來(lái)說(shuō)還是比較陌生,但老師講解還相對(duì)比較清楚,并且實(shí)驗(yàn)報(bào)告寫(xiě)的十分清楚,只是遇到多建立了一個(gè)實(shí)體而無(wú)法刪除的問(wèn)題,通過(guò)同學(xué)的幫助也解決了,相對(duì)來(lái)說(shuō)第一次實(shí)驗(yàn)還是比較順利的。
實(shí)驗(yàn)二 PowerDesigner 的 PDM 應(yīng)用
1.實(shí)驗(yàn)?zāi)康?/p>
用PowerDesinger的工具將CDM生成PDM過(guò)程,熟悉PDM工作區(qū),為生成數(shù)據(jù)庫(kù)中的物理的表打下基礎(chǔ)。完成這個(gè)實(shí)驗(yàn)后,應(yīng)該能夠了解從CDM到PDM的轉(zhuǎn)換過(guò)程,熟悉PowerDesinger的PDM工作區(qū),使用工具選項(xiàng)板進(jìn)行PDM對(duì)象設(shè)計(jì)。
2.實(shí)驗(yàn)內(nèi)容
從CDM生成PDM,設(shè)計(jì)結(jié)束后,利用PowerDesigner的“生成數(shù)據(jù)庫(kù)”功能,產(chǎn)生數(shù)據(jù)庫(kù)中各數(shù)據(jù)對(duì)象的定義,再運(yùn)行MySQL的命令行客戶(hù)端軟件,打開(kāi)test數(shù)據(jù)庫(kù),運(yùn)行crebas.sql,同時(shí)進(jìn)行中英文的轉(zhuǎn)換,最后運(yùn)行show tables命令查看表。
3.實(shí)驗(yàn)結(jié)果
4.實(shí)驗(yàn)心得
經(jīng)過(guò)本次實(shí)驗(yàn),學(xué)會(huì)了用PowerDesinger的工具將CDM生成PDM過(guò)程,并且利用crebas.sql進(jìn)行中英文的轉(zhuǎn)換,最后利用show tables命令查看表,受益匪淺。
實(shí)驗(yàn) 三Navicat for MySQL的使用和SQL語(yǔ)言數(shù)據(jù)定義語(yǔ)言DDL 1.實(shí)驗(yàn)?zāi)康?/p>
了解Navicat for MySQL的啟動(dòng),熟悉如何在Navicat for MySQL下配置數(shù)據(jù)庫(kù)聯(lián)接。了解DDL語(yǔ)言的CREATE、DROP、ALTER對(duì)表、索引、視圖的操作,學(xué)會(huì)在Navicat for MySQL中用DDL語(yǔ)言進(jìn)行對(duì)表、索引、視圖的增加、刪除和改動(dòng) 2.實(shí)驗(yàn)內(nèi)容
1.啟動(dòng)Navicat for MySQL。
2.在MySQL–新建連接中完成連接參數(shù)配置,并完成連接測(cè)試和保存連接參數(shù)。3.查看mysql數(shù)據(jù)庫(kù)的help_category表的定義、表中數(shù)據(jù)與索引、完整性約束等。4.查看mysql數(shù)據(jù)庫(kù)的其它數(shù)據(jù)庫(kù)對(duì)象,如視圖、索引、存儲(chǔ)過(guò)程、函數(shù)、觸發(fā)器。5.在Navicat for MySQL中打開(kāi)查詢(xún),新建查詢(xún),運(yùn)行簡(jiǎn)單的SQL語(yǔ)句,如select * from help_keyword where help_keyword_id<=3;觀察下結(jié)果。3.實(shí)驗(yàn)結(jié)果
4.實(shí)驗(yàn)心得
使用navicat for MySQL連接數(shù)據(jù)庫(kù)的時(shí)候,不能正常連接到數(shù)據(jù)庫(kù),出現(xiàn)“access denied for user’root@’localhost”的錯(cuò)誤提示,經(jīng)過(guò)查找發(fā)現(xiàn)是MySQL沒(méi)有正確安裝,重裝之后就可以正常的訪(fǎng)問(wèn)數(shù)據(jù)庫(kù),在本次實(shí)驗(yàn)中也學(xué)會(huì)了Navicat for MySQL的基礎(chǔ)的查詢(xún)使用以及簡(jiǎn)單的SQL語(yǔ)句的運(yùn)行。
實(shí)驗(yàn) 四 SQL語(yǔ)言數(shù)據(jù)定義語(yǔ)言DDL 1:實(shí)驗(yàn)?zāi)康?/p>
本次實(shí)驗(yàn)了解SQL語(yǔ)言中DDL語(yǔ)言的CREATE、DROP、ALTER對(duì)表、索引、視圖的操作,掌握在Navicat for MySQL中用DDL語(yǔ)言進(jìn)行對(duì)表、索引、視圖的增加、刪除和改動(dòng)。掌握使用SQL語(yǔ)句增加或刪除約束,加深對(duì)完整性概念的理解,達(dá)到靈活應(yīng)用的目的。掌握使用SQL語(yǔ)句定義和刪除同義詞。2:實(shí)驗(yàn)原理
在 Navicat for MySQL 中使用 CREATE 命令完成對(duì)表、索引、視圖、同義詞 的創(chuàng)建,使用 DROP 命令完成對(duì)表、索引、視圖、同義詞的刪除,使用 ALTER 命 令對(duì)表結(jié)構(gòu)進(jìn)行修改及完整性約束的增加、刪除。
3:實(shí)驗(yàn)代碼及結(jié)果 相應(yīng)SQL語(yǔ)句為:
CREATE TABLE NewTable(studentid varchar(10)NOT NULL , name varchar(20)NOT NULL , sex varchar(2)NOT NULL , age integer NOT NULL , Fee decimal(10,2)NULL , address varchar(50)NULL , memo varchar(300)NULL , PRIMARY KEY(studentid));
截圖如下:
3.用Create Table語(yǔ)句建表CourseAa,相應(yīng)的SQL語(yǔ)句為: CREATE TABLE CourseAa(Aa1 Varchar(20), Aa2 INTEGER, Aa3 decimal(10)); 截圖如下:
5.用Create Table語(yǔ)句建表ChooseBb 相應(yīng)的SQL語(yǔ)句如下: CREATE TABLE ChooseBb(Bb1 VARCHAR(30), Bb2 INTEGER, Bb3 DECIMAL(6));
6.用Drop Table語(yǔ)句刪除表CourseAa,相應(yīng)的SQL語(yǔ)句如下: Drop table CourdeAa;
7.用Alter Table語(yǔ)句更新表ChooseBb,添加一個(gè)屬性名Bb4,類(lèi)型Varchar,長(zhǎng)度20,完整性約束設(shè)為非空值,缺省值設(shè)為字符“系統(tǒng)測(cè)試值”,相應(yīng)的SQL語(yǔ)句如下: ALTER TABLE choosebb ADD Bb4 VARCHAR(30)NOT NULL;
8.用Alter Table語(yǔ)句更新表ChooseBb,添加一個(gè)屬性名Bb5,類(lèi)型Varchar, 長(zhǎng)度10,完整性約束設(shè)為主碼。完成后,表ChooseBb的設(shè)計(jì)如下所示。相應(yīng)的SQL語(yǔ)句如下:
ALTER TABLE choosebb ADD Bb5 VARCHAR(30)PRIMARY KEY;
9.用Create View語(yǔ)句建立一個(gè)視圖View_Choosebb,生成的視圖屬性名(View_bb1,View_bb2,view_bb3), 其中View_bb1對(duì)應(yīng)于基表ChooseBb的Bb1、View_bb2對(duì)應(yīng)于基表ChooseBb的Bb4、view_bb3對(duì)應(yīng)于基表ChooseBb的Bb5。完成后,視圖View_Choosebb的設(shè)計(jì)如下所示。
相應(yīng)的SQL語(yǔ)句如下:
CREATE VIEW View_Choosebb AS SELECT Bb4 AS View_bb1,View_bb2 FROM chooseBb;CREATE VIEW View_Choosebb AS SELECT Bb5 AS View_bb3 FROM chooseBb;10.用Drop View語(yǔ)句刪除視圖View_Choosebb。相應(yīng)的SQL語(yǔ)句如下: DROP VIEW View_choosebb;11.用Create Index語(yǔ)句對(duì)表ChooseBb的Bb2屬性建立一個(gè)升序索引,索引名Index_bb2。用Create Index語(yǔ)句對(duì)表ChooseBb的Bb4屬性建立一個(gè)降序索引,索引名Index_bb4。相應(yīng)的SQL語(yǔ)句如下:
CREATE INDEX Index_bb2 ON ChooseBb(Bb4 DESC);12.用Drop Index語(yǔ)句刪除索引Index_bb2。相應(yīng)的SQL語(yǔ)句如下:
DROP INDEX Index_bb2 ON ChooseBb;
4:實(shí)驗(yàn)中遇到的問(wèn)題及心得體會(huì)
1、用Drop Table語(yǔ)句刪除表CourseAa的時(shí)候,在SQL瀏覽框中輸入語(yǔ)句并運(yùn)行,發(fā)現(xiàn)左邊項(xiàng)目欄中還是有CourseAa表的存在,但是確打不開(kāi)CourseAa表,弄了很長(zhǎng)時(shí)間,也不知道是什么情況,最后嘗試刷新頁(yè)面之后,發(fā)現(xiàn)語(yǔ)句運(yùn)行正確,CourseAa表成功刪除。
2、由于理論課時(shí)查詢(xún)語(yǔ)言之學(xué)到了表的查詢(xún),到后面實(shí)驗(yàn)中涉及視圖的建立及查詢(xún),也不清楚是怎么回事,而且由于對(duì)查詢(xún)語(yǔ)句的不熟悉,實(shí)驗(yàn)過(guò)程中進(jìn)行緩慢,視圖的部分是課下看書(shū)慢慢寫(xiě)的,沒(méi)有截圖。
通過(guò)這次實(shí)驗(yàn),初步了解了SQL語(yǔ)言中DDL語(yǔ)言的CREATE、DROP、ALTER對(duì)表、索引、視圖的操作,掌握在Navicat for MySQL中用DDL語(yǔ)言進(jìn)行對(duì)表、索引、視圖的增加、刪除和改動(dòng)。掌握使用SQL語(yǔ)句增加或刪除約束。因?yàn)閷?shí)驗(yàn)過(guò)程中對(duì)這些語(yǔ)句的不熟悉耽誤課很長(zhǎng)時(shí)間,還需課下多下工夫多看、多寫(xiě)。
實(shí)驗(yàn)五
SQL語(yǔ)言數(shù)據(jù)操縱語(yǔ)言DML
1:實(shí)驗(yàn)?zāi)康?/p>
SQL 語(yǔ)言的數(shù)據(jù)操縱功能通過(guò) DML(數(shù)據(jù)維護(hù)語(yǔ)言)實(shí)現(xiàn)。DML 包括數(shù)據(jù)查詢(xún) 和數(shù)據(jù)更新兩種數(shù)據(jù)操縱語(yǔ)句。其中,數(shù)據(jù)查詢(xún)指對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)查詢(xún)、統(tǒng)計(jì)、分組、排序等操作;數(shù)據(jù)更新指數(shù)據(jù)的插入、更新和刪除等數(shù)據(jù)維護(hù)操作。
本次實(shí)驗(yàn)了解 DML 語(yǔ)言的 INSERT、UPDATE、DELETE 等數(shù)據(jù)維護(hù)語(yǔ)言,掌握 在 Navicat for MySQL 中用 DML 語(yǔ)言的 INSERT、UPDATE、DELETE 對(duì)表進(jìn)行數(shù)據(jù) 插入、更新和刪除。
2實(shí)驗(yàn)內(nèi)容
在 Navicat for MySQL 中使用 INSERT 語(yǔ)句向表中插入數(shù)據(jù)。使用 UPDATE 語(yǔ)句更新(修改)表中已有數(shù)據(jù)。使用 DELETE 語(yǔ)句刪除表中數(shù)據(jù)。
3:實(shí)驗(yàn)代碼及結(jié)果
1、用Create Table語(yǔ)句建立test表,其語(yǔ)句和截圖如下所示; CREATE TABLE `NewTable`(`Name` varchar(20)NOT NULL , `Age` integer NULL , `Score` numeric(10,2)NOT NULL , `Address` varchar(60)NULL);
2、繼續(xù)用Create Table語(yǔ)句建立test_temp表,其語(yǔ)句同1。
3、用INSERT語(yǔ)句對(duì)表test_temp,插入如實(shí)驗(yàn)報(bào)告中的三條記錄,其插入語(yǔ)句和截圖如下: INSERT INTO test_temp
VALUES('鄭七',21,'490.50','重郵宿舍11-2-1');INSERT INTO test_temp
VALUES('張八',20,'560.00','南福苑3-3-3');INSERT INTO test_temp
VALUES('王九',10,'515.00','學(xué)生新區(qū)19-7-1');
4、用INSERT INTO…SELECT…FROM語(yǔ)句,將test_temp表中的數(shù)據(jù),插入到test中,其語(yǔ)句及其截圖如下: INSERT INTO test
SELECT * FROM test_temp;
5、用UPDATE語(yǔ)句將test表中年齡小于20的數(shù)據(jù),將其成績(jī)更新為原來(lái)的成績(jī)加5分,其語(yǔ)句和截圖如下:
UPDATE test SET Score=Score+5 WHERE Age<=20;
6用UPDATE語(yǔ)句將test表中居住在南福苑所有的學(xué)生年齡減少1歲,其語(yǔ)句和截圖如下:、UPDATE test SET Age=Age-1 WHERE Address Like '南福苑%';
7、用DELETE語(yǔ)句將test表中年齡大于等于21 并且成績(jī)大于等于500的學(xué)生數(shù)據(jù)刪除,其語(yǔ)句和截圖如下: DELETE FROM test
WHERE Score<=500 AND Age>=21;
8、用DELETE語(yǔ)句將test表中成績(jī)小于550并且居住在重郵宿舍的學(xué)生數(shù)據(jù)刪除,其語(yǔ)句和截圖如下:
DELETE FROM test WHERE Score<=550 AND Address LIke'重郵宿舍%';
4實(shí)驗(yàn)心得
這次實(shí)驗(yàn)從實(shí)驗(yàn)原理還是實(shí)驗(yàn)操作來(lái)說(shuō)還是相對(duì)簡(jiǎn)單的,但越是對(duì)簡(jiǎn)單的是就越容易犯迷糊,這次件表命名給了我很多啟示,以后對(duì)細(xì)節(jié)還是要十分注意的。
實(shí)驗(yàn)六 SQL語(yǔ)言數(shù)據(jù)查詢(xún)語(yǔ)言DQL
1:實(shí)驗(yàn)?zāi)康?/p>
本次實(shí)驗(yàn)了解 SQL 語(yǔ)言的 SELECT 語(yǔ)句對(duì)數(shù)據(jù)的查詢(xún),學(xué)會(huì)在 Navicat for MySQL 中用 SELECT 語(yǔ)句對(duì)表中的數(shù)據(jù)進(jìn)行簡(jiǎn)單查詢(xún)、連接查詢(xún)、嵌套查詢(xún)和組 合查詢(xún)。2:實(shí)驗(yàn)原理
在 Navicat for MySQL 中使用 SELECT 語(yǔ)句從表中查詢(xún)數(shù)據(jù)、統(tǒng)計(jì)數(shù)據(jù)及對(duì) 數(shù)據(jù)進(jìn)行分組和排序等操作。3:實(shí)驗(yàn)代碼及結(jié)果
1.用 Create Table 建立 Student 表:
2.用 Create Table 建立 Course 表:
3.用 Create Table 建立 Choose 表:
4.用 INSERT 語(yǔ)句向 Student 表中插入 3 個(gè)元組:
5.用 INSERT 語(yǔ)句向 Course 表中插入 3 個(gè)元組:
6.用 INSERT 語(yǔ)句向 Choose 表中插入 7 個(gè)元組:
7.用 SELECT 語(yǔ)句,查詢(xún)計(jì)算機(jī)學(xué)院學(xué)生的學(xué)號(hào)和姓名。
8.用 SELECT 語(yǔ)句的 between?and?表示查詢(xún)條件,查詢(xún)年齡在 20~23 歲的學(xué) 生信息。
9.用 SELECT 語(yǔ)句的 COUNT()聚集函數(shù),統(tǒng)計(jì) Student 表中學(xué)生總?cè)藬?shù)。
10.分別用 SELECT 語(yǔ)句的 max()、min()、sum()、avg()四個(gè)聚集函數(shù),計(jì)算 Choose 表中 C1 課程的最高分、最低分、總分、平均分。max():
Min():
Sum();
avg():
11.用 SELECT 語(yǔ)句對(duì)空值(NULL)的判斷條件,查詢(xún) Course 表中先修課稱(chēng)編號(hào)為 空值的課程編號(hào)和課程名稱(chēng)。
12.用 SELECT 語(yǔ)句的連接查詢(xún),查詢(xún)學(xué)生的學(xué)號(hào)、姓名、選修的課程名及成績(jī)。
13.用 SELECT 的存在量詞 EXISTS,查詢(xún)與“張三”在同一個(gè)學(xué)院學(xué)習(xí)的學(xué)生信 息。
14.用 SELECT 語(yǔ)句的嵌套查詢(xún),查詢(xún)選修 C1 課程的成績(jī)低于“張三”的學(xué)生的 學(xué)號(hào)和成績(jī)。
15.用 SELECT 語(yǔ)句的組合查詢(xún)(UNION),查詢(xún)選修了 C1 課程或者選修了 C3 課程 的學(xué)生學(xué)號(hào)。
16.用 SELECT 語(yǔ)句的組合查詢(xún)(UNION)與 DISTINCT 短語(yǔ),查詢(xún)選修了 C1 課程或 者選修了 C3 課程的學(xué)生學(xué)號(hào),并取消重復(fù)的數(shù)據(jù)。
4.實(shí)驗(yàn)心得
本次實(shí)驗(yàn)室相對(duì)于前幾次來(lái)說(shuō)比較困難的一次,因?yàn)檎Z(yǔ)句剛學(xué)過(guò),下去也沒(méi)有及時(shí)去練習(xí),對(duì)于很多還是比較困難,在本次實(shí)驗(yàn)中通過(guò)練習(xí),讓我了解 SQL 語(yǔ)言的 SELECT 語(yǔ)句對(duì)數(shù)據(jù)的查詢(xún),學(xué)會(huì)在 Navicat forMySQL 中用 SELECT 語(yǔ)句對(duì)表中的數(shù)據(jù)進(jìn)行簡(jiǎn)單查詢(xún)、連接查詢(xún)、嵌套查詢(xún)和組合查詢(xún)。課下時(shí)間也會(huì)多多練習(xí)SQl語(yǔ)句。
實(shí)驗(yàn)七
MYSQL應(yīng)用開(kāi)發(fā)環(huán)境的建立
1:實(shí)驗(yàn)?zāi)康?/p>
通過(guò)在Windows平臺(tái)下,搭建Apache Httpd Web服務(wù)器,PHP腳本支持,訪(fǎng)問(wèn)MySQL數(shù)據(jù)庫(kù)等,學(xué)習(xí)了解MySQL應(yīng)用開(kāi)發(fā)環(huán)境的建立過(guò)程。本次實(shí)驗(yàn)通過(guò)安裝Apache HTTD Server 2.2、PHP 5.3.28,配置httpd.conf和PHP.ini文件,完成MySQL的PHP應(yīng)用開(kāi)發(fā)環(huán)境的建立。2:實(shí)驗(yàn)內(nèi)容
1、按照實(shí)驗(yàn)指導(dǎo)安裝Apache http Server。成功后,截圖如下:
2、配置Apache服務(wù)器支持PHP文件解析,截圖如下:
3、實(shí)驗(yàn)測(cè)試成功,截圖如下:
3:遇到的問(wèn)題及解決 配置PHP擴(kuò)展支持MySQL數(shù)據(jù)庫(kù)。用記事本打開(kāi)php5.3.28之下的php.ini文件,把;extension=php_mysql.dll去掉。只是去掉了extension=php_mysql.dll,而,而沒(méi)有其前面的分號(hào)去掉就保存了文件。
4:實(shí)驗(yàn)心得
通過(guò)在 Windows平臺(tái)下,搭建 Apache Httpd Web 服務(wù)器,PHP 腳本支持,訪(fǎng)問(wèn) MySQL 數(shù)據(jù)庫(kù)等,我學(xué)習(xí)了解 了MySQL 應(yīng)用開(kāi)發(fā)環(huán)境的建立過(guò)程。學(xué)會(huì)了安裝 Apache HTTD Server 2.2、PHP 5.3.28,配置 httpd.conf和 PHP.ini 文件,完成 MySQL 的 PHP 應(yīng)用開(kāi)發(fā)環(huán)境的建立。
實(shí)驗(yàn)八 MySQL的存儲(chǔ)過(guò)程
1:實(shí)驗(yàn)?zāi)康?/p>
存儲(chǔ)過(guò)程分為兩類(lèi):1.系統(tǒng)提供的存儲(chǔ)過(guò)程;2.用戶(hù)自定義存儲(chǔ)過(guò)程。
存儲(chǔ)過(guò)程具有的優(yōu)點(diǎn):1.存儲(chǔ)過(guò)程允許標(biāo)準(zhǔn)組件式編程;2.存儲(chǔ)過(guò)程能夠?qū)?現(xiàn)較快的執(zhí)行速度;3.存儲(chǔ)過(guò)程能夠減少網(wǎng)絡(luò)流量;4.存儲(chǔ)過(guò)程可被作為一種安 全機(jī)制來(lái)充分利用。存儲(chǔ)過(guò)程是可復(fù)用的組件!想象一下如果你改變了主機(jī)的語(yǔ) 言,這對(duì)存儲(chǔ)過(guò)程不會(huì)產(chǎn)生影響,因?yàn)樗菙?shù)據(jù)庫(kù)邏輯而不是應(yīng)用程序。存儲(chǔ)過(guò) 程是可以移植的!
本次實(shí)驗(yàn)了解 MySQL 存儲(chǔ)過(guò)程的創(chuàng)建、修改和刪除的方法和步驟,掌握在 Navicat for MySQL中對(duì)存儲(chǔ)過(guò)程的進(jìn)行創(chuàng)建、修改和刪除,掌握在MySQL Command Line Client 中調(diào)用帶參數(shù)和不帶參數(shù)的存儲(chǔ)過(guò)程。
2:實(shí)驗(yàn)內(nèi)容
1、MySQL Command Line Client中創(chuàng)建存儲(chǔ)過(guò)程,按照實(shí)驗(yàn)指導(dǎo)書(shū)創(chuàng)建第一、第二個(gè)存儲(chǔ)過(guò)程及其調(diào)用。
2、調(diào)用第三、第四個(gè)傳出參數(shù)的存儲(chǔ)過(guò)程:
3、創(chuàng)建存儲(chǔ)過(guò)程third_p(),顯示表cqupt中的數(shù)據(jù),并對(duì)其進(jìn)行調(diào)用測(cè)試。
4、創(chuàng)建存儲(chǔ)過(guò)程simpleproc2(),對(duì)傳入?yún)?shù)進(jìn)行乘以10的處理,變量定義@x,并對(duì)其進(jìn)行調(diào)用測(cè)試。5.用Drop Procedure語(yǔ)句刪除存儲(chǔ)過(guò)程first_p。
3:實(shí)驗(yàn)結(jié)果
4:心得體會(huì)
通過(guò)此次實(shí)驗(yàn),學(xué)會(huì)了在MySQL Command Line Client中創(chuàng)建存儲(chǔ)過(guò)程及其調(diào)用,并傳遞參數(shù)對(duì)其進(jìn)行調(diào)用測(cè)試.實(shí)驗(yàn)九MySQL的觸發(fā)器和SQL語(yǔ)言數(shù)據(jù)控制語(yǔ)言DCL 1:實(shí)驗(yàn)?zāi)康?/p>
觸發(fā)器是特定事件出現(xiàn)的時(shí)候,自動(dòng)執(zhí)行的代碼塊,類(lèi)似于存儲(chǔ)過(guò)程。觸發(fā)器與存儲(chǔ)過(guò)程的區(qū)別在于:存儲(chǔ)過(guò)程是由用戶(hù)或應(yīng)用程序顯式調(diào)用的,而觸發(fā)器是不能被直接調(diào)用的,由DBMS自動(dòng)執(zhí)行。觸發(fā)器具有這些功能:
1、允許/限制對(duì)表的修改;
2、自動(dòng)生成派生列,比如自增字段;
3、強(qiáng)制數(shù)據(jù)一致性;
4、提供審計(jì)和日志記錄;
5、防止無(wú)效的事務(wù)處理;
6、啟用復(fù)雜的業(yè)務(wù)邏輯。
本次實(shí)驗(yàn)了解MySQL觸發(fā)器的創(chuàng)建、修改和刪除的方法和步驟,掌握在Navicat for MySQL中對(duì)觸發(fā)器的進(jìn)行創(chuàng)建、修改和刪除,掌握觸發(fā)器觸發(fā)測(cè)試的方法。2:實(shí)驗(yàn)內(nèi)容
1、創(chuàng)建觸發(fā)器audit_student,該觸發(fā)器對(duì)修改student表的時(shí)間、用戶(hù)名記錄到日志表中。
2.執(zhí)行
五、教學(xué)過(guò)程中
(三)實(shí)驗(yàn)內(nèi)容的第二部分改造簡(jiǎn)單觸發(fā)器,增加觸發(fā)類(lèi)型判斷功能,驗(yàn)證觸發(fā)器的改造和改造后的觸發(fā)器觸發(fā)測(cè)試。3.自行編寫(xiě)student表的觸發(fā)器aduit_student_update,在對(duì)student表進(jìn)行更新操作前觸發(fā),觸發(fā)時(shí),向student_log表寫(xiě)入觸發(fā)用戶(hù)、觸發(fā)時(shí)間和觸發(fā)類(lèi)型。并對(duì)該新建進(jìn)行觸發(fā)測(cè)試。
4.自行編寫(xiě)student表的觸發(fā)器aduit_student_delete,在對(duì)student表進(jìn)行刪除操作后觸發(fā),觸發(fā)時(shí),向student_log表寫(xiě)入觸發(fā)用戶(hù)、觸發(fā)時(shí)間和觸發(fā)類(lèi)型。并對(duì)該新建進(jìn)行觸發(fā)測(cè)試。
3:實(shí)驗(yàn)結(jié)果
①輸入如下語(yǔ)句,建立實(shí)驗(yàn)表student,如圖所示: create table student(SNO varchar(10),SNAME varchar(30),Sage Int);
②輸入如下語(yǔ)句,建立日志表student_log,并查看日志表是否為空,如圖所示:
create table student_log(who varchar(30),whattimeTIMESTAMP);
select * from student_log;
③輸入如下語(yǔ)句,在student表上語(yǔ)句觸發(fā)器,如圖所示: use test;
Create trigger audit_student Beforeinsert On student For each row Begin Insert into student_log(Who,whattime)Values(current_user,current_timestamp);End;
建立④輸入如下語(yǔ)句對(duì)觸發(fā)器進(jìn)行INSERT觸發(fā)測(cè)試,如圖所示: 對(duì)student表做一個(gè)INSERT操作:
Insert into student values('1992150033','吳思遠(yuǎn)',40);
輸入如下語(yǔ)句查看表student_log,檢查觸發(fā)器工作結(jié)果,表student_log中數(shù)據(jù)如圖所示:
select * from student_log;
①輸入如下語(yǔ)句,修改日志表結(jié)構(gòu),增加一個(gè)屬性存放觸發(fā)語(yǔ)句類(lèi)型。如圖所示: alter table student_log add(action varchar(20));
②修改觸發(fā)器,記錄觸發(fā)語(yǔ)句類(lèi)型。選中student表,單擊右鍵,選擇設(shè)計(jì)表,點(diǎn)擊觸發(fā)器選項(xiàng)卡,在定義中對(duì)INSERT進(jìn)行編輯,如圖所示:
select * from student_log
4:實(shí)驗(yàn)心得
本次實(shí)驗(yàn)讓我了解 MySQL 觸發(fā)器的創(chuàng)建、修改和刪除的方法和步驟,掌握在
Navicat for MySQL 中對(duì)觸發(fā)器進(jìn)行創(chuàng)建、修改和刪除的步驟,掌握了觸發(fā)器觸發(fā)測(cè)試的方法。
實(shí)驗(yàn)十SQL的數(shù)據(jù)控制通過(guò)DCL(數(shù)據(jù)控制語(yǔ)言)實(shí)現(xiàn)
1:實(shí)驗(yàn)?zāi)康?/p>
DCL 通過(guò)對(duì)數(shù)據(jù)庫(kù)用戶(hù)的授 權(quán)和權(quán)限回收命令來(lái)實(shí)現(xiàn)有關(guān)數(shù)據(jù)的存取控制,以保證數(shù)據(jù)庫(kù)的安全性
本次實(shí)驗(yàn)了解 DCL 語(yǔ)言的 GRANT 和 REVOKE 語(yǔ)句對(duì)數(shù)據(jù)庫(kù)存取權(quán)限的控制,學(xué)會(huì)在Navicat for MySQL中用GRANT、REVOKE語(yǔ)句對(duì)數(shù)據(jù)庫(kù)存取權(quán)限進(jìn)行設(shè)定。
2:實(shí)驗(yàn)內(nèi)容
1.登錄mysql,創(chuàng)建用戶(hù)jason,密碼為abc123,并授權(quán)該用戶(hù)完整訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)test。即執(zhí)行如下DCL語(yǔ)句:GRANT ALL ON test.* TO jason@“%”IDENTIFIED BY “abc123”;2.啟動(dòng)另外一個(gè)Navicat for MySQL,在MySQL –新建連接中完成jason連接參數(shù)配置
3.對(duì)user表進(jìn)行授予權(quán)限操作,并用select insert 進(jìn)行測(cè)試 4.對(duì)user表進(jìn)行收回權(quán)限操作,用select insert語(yǔ)句進(jìn)行測(cè)試 3:實(shí)驗(yàn)結(jié)果
GRANT ALL ON test.* TO jason@“%” IDENTIFIED BY “abc123”;GRANT SELECT on mysql.host to jason;
2、將數(shù)據(jù)庫(kù) mysql 中表 host 的查詢(xún)權(quán)限從用戶(hù) jason 回收
3.創(chuàng)建用戶(hù)jason,密碼為abc123,并授權(quán)該用戶(hù)完整訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)test。GRANT ALL ON test.* TO jason@“%” IDENTIFIED BY “abc123”;
4.啟動(dòng)另外一個(gè)Navicat for MySQL,在MySQL –新建連接中完成jason連接參數(shù)配置。為了能查詢(xún)到相應(yīng)的數(shù)據(jù),我們必須進(jìn)行授權(quán)操作。語(yǔ)句如下: Grant select on mysql.user to jason;
授權(quán)后,現(xiàn)在切換到Navicat for MySQL,執(zhí)行之前窗口中的查詢(xún)語(yǔ)句:
5、接下來(lái),切換到MySQL的命令行客戶(hù)端,創(chuàng)建一個(gè)簡(jiǎn)單的表,切換到Navicat for MySQL,新建一個(gè)查詢(xún):
insert into mysql.dcltest(id,name)values(1,'張三豐');
6、切換到MySQL的命令行客戶(hù)端,執(zhí)行如下授權(quán)語(yǔ)句,進(jìn)行INSERT權(quán)限的授予: Grant insert on mysql.user to jason;
輸入如下查詢(xún)語(yǔ)句:
Select * from mysql.dcltest;
權(quán)限授予后,root(數(shù)據(jù)庫(kù)超級(jí)用戶(hù))可以進(jìn)行權(quán)限的回收。
7、切換到Navicat for MySQL,新建一個(gè)查詢(xún),執(zhí)行如下插入語(yǔ)句: insert into mysql.dcltest(id,name)values(2,'掃地僧');執(zhí)行如下權(quán)限回收語(yǔ)句:
Revoke insert on mysql.dcltest from jason;
新建一個(gè)查詢(xún),執(zhí)行如下查詢(xún)語(yǔ)句: select * from mysql.dcltest;
Revoke select on mysql.dcltest from jason;
4:實(shí)驗(yàn)心得
通過(guò)本次實(shí)驗(yàn),我了解DCL語(yǔ)言的GRANT和REVOKE語(yǔ)句對(duì)數(shù)據(jù)庫(kù)存取權(quán)限的控制,學(xué)會(huì)在Navicat for MySQL中用GRANT、REVOKE語(yǔ)句對(duì)數(shù)據(jù)庫(kù)存取權(quán)限進(jìn)行設(shè)定。
實(shí)驗(yàn)十一MySQL的事務(wù)與鎖
1:實(shí)驗(yàn)?zāi)康?/p>
事務(wù)(Transaction)是MySQL數(shù)據(jù)庫(kù)系統(tǒng)中的一個(gè)邏輯工作單元,是完成一組數(shù)據(jù)庫(kù)操作的程序執(zhí)行單元;鎖(Lock)是MySQL數(shù)據(jù)庫(kù)系統(tǒng)中并發(fā)控制的常用方法.本次實(shí)驗(yàn)了解MySQL事務(wù)的設(shè)置、提交和回退的方法和步驟,掌握MySQL Command Line Client中如何進(jìn)行相關(guān)操作。了解MySQL的表鎖定與鎖定解除,掌握MySQL Command Line Client中如何進(jìn)行相關(guān)操作。2:實(shí)驗(yàn)內(nèi)容
啟動(dòng)MySQL的命令行客戶(hù)端,輸入密碼mysql(小寫(xiě));執(zhí)行
五、教學(xué)過(guò)程中
(三)實(shí)驗(yàn)內(nèi)容的1部分,學(xué)習(xí)和驗(yàn)證MySQL的事務(wù);在實(shí)驗(yàn)步驟2的基礎(chǔ)上,在數(shù)據(jù)bankrecord的表record中,添加一個(gè)元組id為3的張六,初始余額2萬(wàn);自己寫(xiě)事務(wù)完成如下操作:李四向張六轉(zhuǎn)賬5千,然后取消該轉(zhuǎn)賬;王五向李四轉(zhuǎn)賬1萬(wàn)5,然后確認(rèn)轉(zhuǎn)賬;執(zhí)行
五、教學(xué)過(guò)程中
(三)實(shí)驗(yàn)內(nèi)容的2部分,學(xué)習(xí)和驗(yàn)證MySQL的鎖;在步驟4的基礎(chǔ)上,在數(shù)據(jù)庫(kù)bookrecord的表sellrecord中,添加一個(gè)元組id為2000的書(shū)籍Oracle數(shù)據(jù)庫(kù)實(shí)用教程庫(kù),存為2本;在當(dāng)前MySQL命令行客戶(hù)端里面模擬李四購(gòu)書(shū),另外啟動(dòng)一個(gè)MySQL命令行客戶(hù)端,模擬王五購(gòu)書(shū);要求使用寫(xiě)鎖先鎖定后,再修改,因?yàn)閹?kù)存有兩本,所以李四和王五都能買(mǎi)到,庫(kù)存為0,并且兩人的名字都出現(xiàn)在buyername 3:實(shí)驗(yàn)結(jié)果
create database bankrecord character set utf8 collate utf8_general_ci;use bankrecord;
create table record(id int,name varchar(20),jine decimal(8,2));
set names gbk;
insert into record values(1, '李四',20000);insert into record values(2, '王五',20000);start transaction;
update record set jine=jine-10000 where name='李四';select * from record;rollback;
select * from record;
1、查看數(shù)據(jù)庫(kù)自動(dòng)提交模式是否打開(kāi):
2,按照實(shí)驗(yàn)指導(dǎo)先建立數(shù)據(jù)庫(kù)、表和向表中插入初始賬戶(hù)記錄:
3、完成開(kāi)始事務(wù),從李四賬戶(hù)轉(zhuǎn)出 1 萬(wàn)元,向王五賬戶(hù)中轉(zhuǎn)入 1 萬(wàn)元,提交確認(rèn)轉(zhuǎn)賬:
4、安實(shí)驗(yàn)指導(dǎo)執(zhí)行語(yǔ)句先建立數(shù)據(jù)庫(kù)、表和向表中插入初始書(shū)籍記錄:
5、在數(shù)據(jù)庫(kù) bankrecord 的表 record 中,添加一個(gè)元組id 為 3 的張六,初始余額 2 萬(wàn),李四向張六轉(zhuǎn)賬 5 千,然后取消該轉(zhuǎn)賬;王五向李四轉(zhuǎn)賬 1 萬(wàn) 5,然后確認(rèn)轉(zhuǎn)賬(語(yǔ)句在圖中顯示):
6、在數(shù)據(jù)庫(kù) bookrecord 的表 sellrecord 中,添加一個(gè)元組id 為 2000 的書(shū)籍 Oracle 數(shù)據(jù)庫(kù)實(shí)用教程庫(kù),存為 2 本(相關(guān)語(yǔ)句在圖中顯示):
7、在當(dāng)前 MySQL 命令行客戶(hù)端里面模擬李四購(gòu)書(shū),另外啟動(dòng)一個(gè) MySQL 命令行客戶(hù) 端,模擬王五購(gòu)書(shū)(語(yǔ)句在圖中顯示)。
4:實(shí)驗(yàn)心得
本次實(shí)驗(yàn)了解 MySQL 事務(wù)的設(shè)置、提交和回退的方法和步驟,掌握 MySQL Command Line Client 中如何進(jìn)行相關(guān)操作。了解 MySQL 的表鎖定與鎖定解除,掌握 MySQL Command Line Client 中如何進(jìn)行相關(guān)操作。
實(shí)驗(yàn)十二MySQL的常用函數(shù)MySQL 1:實(shí)驗(yàn)?zāi)康?/p>
本次實(shí)驗(yàn)了解 MySQL 常用字符串、日期和時(shí)間函數(shù)等的使用,掌握 MySQL Command Line Client 中如何進(jìn)行相關(guān)操作。常用函數(shù)包括常用字符串、日期和時(shí)間函數(shù)等各類(lèi)函數(shù)。2:實(shí)驗(yàn)內(nèi)容
啟動(dòng) MySQL 的命令行客戶(hù)端,輸入密碼 mysql(小寫(xiě));執(zhí)行
五、教學(xué)過(guò)程中
(三)實(shí)驗(yàn)內(nèi)容的 1 部分,學(xué)習(xí)和驗(yàn)證 MySQL 的字符串函數(shù);在實(shí)驗(yàn)步驟 2 的基礎(chǔ)上,學(xué)習(xí)如下兩個(gè)函數(shù)并完成題目:定位和位置函數(shù) LOCATE(substr,str),返回字符串 str 中子字符串 substr 的第一次出現(xiàn)位置,如果 str 中不包含 substr,返回 0。
請(qǐng)使用LOCATE函數(shù)計(jì)算needle在haystackneedlehaystack第一次出現(xiàn)的位置;子字符串函數(shù) SUBSTRING(str,pos,len),從字符串 str 返回一個(gè)長(zhǎng)度同 len 字符相同的子字符串,起始于位置 pos;請(qǐng)使用 SUBSTRING 函數(shù)計(jì)算 backspace,從第 2 個(gè)字符起,長(zhǎng)度為 5 的子字符串;字符串函數(shù)的解答腳本和結(jié)果請(qǐng)保存,老師會(huì)檢查;執(zhí)行
五、教學(xué)過(guò)程中
(三)實(shí)驗(yàn)內(nèi)容的 2 部分,學(xué)習(xí)和驗(yàn)證 MySQL 的日期和時(shí)間函數(shù);在步驟 4 的基礎(chǔ)上,學(xué)習(xí)如下一個(gè)函數(shù)并完成題目:周函數(shù) WEEK(date),返回 date 時(shí)間包含的星期數(shù);請(qǐng)使用 WEEK 函數(shù)計(jì)算當(dāng)前日期包含的星期數(shù)。3:實(shí)驗(yàn)結(jié)果
4:實(shí)驗(yàn)心得
通過(guò)本次實(shí)驗(yàn)掌握了MySQL 常用函數(shù)包括常用字符串、日期和時(shí)間函數(shù)等各類(lèi)函數(shù),并且學(xué)會(huì)了MySQL Command Line Client 中如何進(jìn)行相關(guān)操作。
第三篇:數(shù)據(jù)庫(kù)實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)7 索引和數(shù)據(jù)完整性的使用
1、目的與要求
(1)掌握索引的使用方法;
(2)掌握數(shù)據(jù)完整性的實(shí)現(xiàn)方法;
2、實(shí)驗(yàn)準(zhǔn)備
(1)了解索引的作用與分類(lèi);(2)掌握索引的創(chuàng)建方法;
(3)理解數(shù)據(jù)的完整性的概念與分類(lèi);(4)掌握各種數(shù)據(jù)完整性的實(shí)現(xiàn)方法。
3、實(shí)驗(yàn)內(nèi)容
(1)建立索引
①使用CREATE INDEX語(yǔ)句創(chuàng)建索引。
對(duì)YGGL數(shù)據(jù)庫(kù)的Employees表中的DepartmentID列建立索引。在查詢(xún)分析器中輸入如下程序并執(zhí)行: USE YGGL GO CREATE INDEX depart_ind
ON Employees(DepartmentID)GO 在Employees表的Name列和Address列上建立復(fù)合索引。CREATE INDEX Ad_ind
ON Employees(Name,Address)對(duì)Departments表上的DepartmentName列建立唯一非聚集索引。CREATE UNIQUE INEDX Dep_ind ON Departments(DepartmentName)【思考與練習(xí)】
a.索引創(chuàng)建完后在對(duì)象資源管理器中查看表中的索引。b.了解索引的分類(lèi)情況
c.使用CREATE INDEX語(yǔ)句能創(chuàng)建主題嗎? d.在什么情況下可以看到建立索引的好處?
②使用界面方式創(chuàng)建索引。
使用界面方式在Employees表的PhoneNumber列上創(chuàng)建索引。
啟動(dòng)SQL Server Management Studio,在對(duì)象資源管理器中展開(kāi)數(shù)據(jù)庫(kù)YGGL,展開(kāi)表Employees,右擊“索引,選擇“新建索引”選項(xiàng)。在新建索引的窗口中填寫(xiě)索引的名稱(chēng)和類(lèi)型,單擊“添加”按鈕,在列表框中選擇要?jiǎng)?chuàng)建的索引的列,選擇完單擊“確定”按鈕即完成創(chuàng)建工作。【思考與練習(xí)】
a.使用界面方式創(chuàng)建一個(gè)復(fù)合索引。
b.在Employees表的表設(shè)計(jì)窗口選擇Address列,右擊選擇“索引/鍵”菜單項(xiàng),在新窗口中的Address列創(chuàng)建一個(gè)唯一的索引。
c.創(chuàng)建一個(gè)數(shù)據(jù)量很大的新表,查看使用索引和不使用索引的區(qū)別。
(2)重建索引。
重建表Employees中的所有索引。USE YGGL GO ALTER INDEX ALL
ON Employ REBUILD 【思考與練習(xí)】重建表Employees中EmployeeID列上的索引。
(3)刪除索引。
使用DROP INDEX語(yǔ)句刪除表Employees上的索引Depart_ind,計(jì)劃使用如下SQL語(yǔ)句:
DROP INDEX Depart_ind ON Employees 【思考與練習(xí)】
a.使用QROP INDEX一次刪除Employees表上的多個(gè)索引 b使用界面方式刪除Department表上的索引。
(4)數(shù)據(jù)完整性。
①創(chuàng)建一個(gè)表Employees5,只含EmployeesID,Name,Sex和Education列。將Name,設(shè)為主鍵,作為列Name的約束。對(duì)EmployeesID列進(jìn)行UNIQUE約束,并作為表的約束。
CREATE TABLE Employees5(EmployeesID char(6)NOT NULL PRIMARY KEY, Sex tinyint Education char(4), CONSTRAINT UK_id UNIQUE(EmployeesID))
②刪除上例中創(chuàng)建的UNIQUE約束。ALTER TABLE Employees5 DROPCONSTRAINT UK_id GO 【思考與練習(xí)】
a.使用T-SQL命令創(chuàng)建一個(gè)新表,使用一個(gè)復(fù)合列作為主鍵,作為表的約束,并為其命名。b.使用語(yǔ)句為表ALTER TABLEEmployees5添加一個(gè)新列Address,并為該列定義UNIQUE約束,并了解如何使用圖形向?qū)Х绞絼h除主鍵和UNIOQUE約束。
③創(chuàng)建新表student,只考慮“號(hào)碼”和“性別”兩列,性別只能包含男或女。CREATE TABLE student(號(hào)碼char(6)NOT NULL 性別char(2)Employees
CHECK(性別 IN(“男”,“女”))
【思考與練習(xí)】 向該表插入數(shù)據(jù),“性別”列插入“男”和“女”以外的字符,查看會(huì)發(fā)生什么情況。
④創(chuàng)建新表Salary2,結(jié)構(gòu)與Salary相同,但Salary2表不可以O(shè)utCome列大于Income列。
CREATE TABLE Salary2(EmployeesID char(6)NOT NULL Income Float NOT NULL, OUTCOME FLOAT NOT NULL, CHECK(INCOME>=OUTCOME))【思考與練習(xí)】
a.向表中插入數(shù)據(jù),查看OUTCOME值比INCOME值大是會(huì)有什么情況。b.創(chuàng)建一個(gè)表Employees6,只考慮“學(xué)號(hào)”和“出生日期”兩列,出生日期必須晚于1980年1月1日。
⑤對(duì)YGGL數(shù)據(jù)庫(kù)中的Employees表進(jìn)行修改,為其增加“DepartmentID”字段的CHECK約束。
use YGGL go alter table Employees add constraint depart check(DepartmentID>=1 and DepartmentID<=5)【思考與練習(xí)】測(cè)試CHECK約束的有效性。
⑥創(chuàng)建一個(gè)規(guī)則對(duì)象,用以限制輸入到該規(guī)則所綁定的列中的值只能是該規(guī)則中列出的值。
create rule list_rule as @list in('財(cái)務(wù)部','研發(fā)部','人力資源部','銷(xiāo)售部')go exec sp_bindrule 'list_rule','Departments.DepartmentName' go 【思考與練習(xí)】創(chuàng)建一個(gè)規(guī)則對(duì)象,限制在0~20之間。然后把他綁定知道Employees表的WorkYear字段上。
刪除上述建立的規(guī)則對(duì)象。
⑦創(chuàng)建一個(gè)表Salary3,要求所有Salary3表上EmployeeID列的值都要出現(xiàn)在Salary表中,利用參照完整性約束實(shí)現(xiàn),要求當(dāng)刪除或修改Salary表上的EmployeeID列時(shí),Salary3表中的EmployeeID值也會(huì)隨之變化
create table Salary3(EmployeeID char(6)not null primary key, InCome float not null, OutCome float(8)not null, foreign key(EmployeeID)references Salary(EmployeeID)on update cascade
on delete cascade)
4、實(shí)驗(yàn)結(jié)果
(1)建立索引 ①【思考與練習(xí)】
a.索引創(chuàng)建完后在對(duì)象資源管理器中查看表中的索引。
b.了解索引的分類(lèi)情況
答:索引分為兩類(lèi):分別是聚集索引和非聚集索引,其中有唯一索引和復(fù)合索引。每一個(gè)表中只可以有一個(gè)聚集索引,但可以有多個(gè)非聚集索引。c.使用CREATE INDEX語(yǔ)句能創(chuàng)建主題嗎? 不可以
d.在什么情況下可以看到建立索引的好處? 當(dāng)要在龐大的數(shù)據(jù)庫(kù)中尋找自己想要的數(shù)據(jù)的時(shí)候,建立索引是很有好處的,優(yōu)點(diǎn)如下:
第一:通過(guò)創(chuàng)建唯一性索引,可以保證數(shù)據(jù)庫(kù)表中每一行數(shù)據(jù)的唯一性。
第二:可以大大加快數(shù)據(jù)的檢索速度,這也是創(chuàng)建索引的最主要的原因。第三:可以加速表和表之間的連接,特別是在實(shí)現(xiàn)數(shù)據(jù)的參考完整性方面特別有意義。
第四:在使用分組和排序子句進(jìn)行數(shù)據(jù)檢索時(shí),同樣可以顯著減少查詢(xún)中分組和排序的時(shí)間。第五,通過(guò)使用索引,可以在查詢(xún)的過(guò)程中,使用優(yōu)化隱藏器,提高系統(tǒng)的性能。
②【思考與練習(xí)】
a.使用界面方式創(chuàng)建一個(gè)復(fù)合索引。
b.在Employees表的表設(shè)計(jì)窗口選擇Address列,右擊選擇“索引/鍵”菜單項(xiàng),在新窗口中的Address列創(chuàng)建一個(gè)唯一的索引。
c.創(chuàng)建一個(gè)數(shù)據(jù)量很大的新表,查看使用索引和不使用索引的區(qū)別。
(2)重建索引。
【思考與練習(xí)】重建表Employees中EmployeeID列上的索引。USE YGGL GO create index employid_ind ON Employees(EmployeeID)GO ALTER INDEX employid_ind ON Employees REBUILD GO
(3)刪除索引。
【思考與練習(xí)】
a.使用QROP INDEX一次刪除Employees表上的多個(gè)索引
USE YGGL GO DROP INDEX Employees.depart_ind,Employees.Employ_ind GO
b使用界面方式刪除Department表上的索引。
(4)數(shù)據(jù)完整性。
②【思考與練習(xí)】
a.使用T-SQL命令創(chuàng)建一個(gè)新表,使用一個(gè)復(fù)合列作為主鍵,作為表的約束,并為其命名。
USE YGGL GO CREATE TABLE Employ(EmployeeID char(8)NOT NULL, Name char(10)NOT NULL, Sex bit NOT NULL, Education char(5), CONSTRAINT UK_id PRIMARY KEY(EmployeeID,Name,Sex))
b.使用語(yǔ)句為表ALTER TABLEEmployees5添加一個(gè)新列Address,并為該列定義UNIQUE 約束。
USE YGGL GO ALTER TABLE Employees5 ADD Address varchar(40)NULL CONSTRAINT USK_id UNIQUE GO
C.使用界面方式為一個(gè)新表定義主鍵和UNIQUE約束,并了解如何使用圖形向?qū)Х绞絼h除主鍵和UNIQUE約束。
③【思考與練習(xí)】
向該表插入數(shù)據(jù),“性別”列插入“男”和“女”以外的字符,查看會(huì)發(fā)生什么情況。
④【思考與練習(xí)】
a.向表中插入數(shù)據(jù),查看OUTCOME值比INCOME值大是會(huì)有什么情況。
INSERT 語(yǔ)句與CHECK 約束“CK__Salary2__1A14E395”沖突。該沖突發(fā)生于數(shù)據(jù)庫(kù)“YGGL”,表“dbo.Salary2”。
語(yǔ)句已終止。
b.創(chuàng)建一個(gè)表Employees6,只考慮“學(xué)號(hào)”和“出生日期”兩列,出生日期必須晚于1980年1月1日。USE YGGL
GO CREATE TABLE Employees6(學(xué)號(hào) char(6)NOT NULL,出生日期
varchar(20)NOT NULL
CHECK(出生日期>'1980-1-1'))
⑤【思考與練習(xí)】測(cè)試CHECK約束的有效性。
insert into Employees6 values('001','1980-1-0')
INSERT 語(yǔ)句與CHECK 約束“CK__Employees6__出生日期__1BFD2C07”沖突。該沖突發(fā)生于數(shù)據(jù)庫(kù)“YGGL”,表
“dbo.Employees6”, column '出生日期'。語(yǔ)句已終止。結(jié)果是:上面的記錄添加不進(jìn)去.表現(xiàn)出了check的有效性.⑥【思考與練習(xí)】創(chuàng)建一個(gè)規(guī)則對(duì)象,限制在0~20之間。然后把他綁定知道Employees表的WorkYear字段上。USE YGGL
GO CREATE RULE Emp_rule
AS @Emp like'[0-20]' GO EXEC sp_bindrule 'Emp_rule','Employees.WorkYear' GO
刪除上述建立的規(guī)則對(duì)象。USE YGGL
GO EXEC sp_unbindrule 'Employees.WorkYear' DROP RULE Emp_rule GO
⑦a.創(chuàng)建完Salary3表后,初始化該標(biāo)的數(shù)據(jù)與salary表相同。刪除salary表中一行數(shù)據(jù),在查看salary3表的內(nèi)容,看看會(huì)發(fā)生什么情況。
B.使用ALTER TABLE語(yǔ)句向salary表中的EmployeeID列上添加一個(gè)外鍵,要求EmployeeIs表中要?jiǎng)h除或修改與EmployeeID值有關(guān)的行時(shí),檢查Salary表中有沒(méi)有與該EployeeID值相關(guān)的記錄,如果存在則拒絕更新Emloyees表。C.在對(duì)象資源管理器中建立Departments、Employees和Salary三個(gè)表之間的參照關(guān)系。
第四篇:數(shù)據(jù)庫(kù)實(shí)驗(yàn)報(bào)告
數(shù)據(jù)庫(kù)系統(tǒng)原理課程設(shè)計(jì)
總結(jié)報(bào)告
學(xué)院: 軟件學(xué)院 專(zhuān)業(yè): 軟件工程 年級(jí): 2009 學(xué)號(hào): 20092647 姓名: 李野
1、開(kāi)發(fā)環(huán)境
Windows7系統(tǒng)
2、DBMS系統(tǒng)架構(gòu)
采用向量的存儲(chǔ)結(jié)構(gòu)存儲(chǔ)數(shù)據(jù)字典信息;屬性信息,表結(jié)構(gòu),索引結(jié)構(gòu),用戶(hù)授權(quán)機(jī)制都用相應(yīng)的類(lèi)表示;將表實(shí)體(表中內(nèi)容)存儲(chǔ)在文件中,方便查閱;每當(dāng)執(zhí)行相應(yīng)的SQL語(yǔ)句時(shí)只需查閱數(shù)據(jù)字典及修改數(shù)據(jù)文件。
3、DBMS主要功能模塊
(1)DDL功能模擬(2)DML功能模擬
(3)關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)的查詢(xún)優(yōu)化(4)DCL功能模擬
3.1 SQL語(yǔ)言的詞法和語(yǔ)法分析(1)功能介紹
判斷輸入的SQL語(yǔ)句是否符合詞法以及語(yǔ)法規(guī)則
(2)相關(guān)理論
將輸入的文本當(dāng)成一個(gè)字符串來(lái)處理,通過(guò)匹配該字符串中的關(guān)鍵字來(lái)確定要做什么功能,若都不能匹配,則說(shuō)明出現(xiàn)詞法或語(yǔ)法錯(cuò)誤。
(3)算法描述
將輸入的文本保存在字符串s1中,將s1用換行符“n”分割,保存在array[]中,掃描字符串?dāng)?shù)組中的每個(gè)成員。
a.若以“create table”開(kāi)頭,查找information文件是否含有“create table”后的表的信息,如果有,則返回true,表示數(shù)據(jù)字典中已有該表,若返回false,表示數(shù)據(jù)字典中沒(méi)有該表信息,則把相應(yīng)的屬性名及其類(lèi)型寫(xiě)進(jìn)數(shù)據(jù)字典,并標(biāo)明是否有主外鍵。b.若以“drop table”開(kāi)頭,則調(diào)用“drop”函數(shù)
表示刪除表。
c.若以“alter table”開(kāi)頭,判斷其后是否有“add”或“drop”,“add”表示添加屬性,“drop”表示刪除屬性。
d.若以“insert”開(kāi)頭,調(diào)用“insert()”函數(shù),表示插入元組。e.若以“delete”開(kāi)頭,調(diào)用“delete()”函數(shù),表示刪除元組。f.若以“update”開(kāi)頭,判斷其后是否有“where”條件,若有,則調(diào)用“update()”函數(shù),否則調(diào)用“update0()”函數(shù),表示修改相應(yīng)的元組。g.若以“select”開(kāi)頭,判斷其后是否有“*”,若有,則調(diào)用“selectall()”函數(shù),否則調(diào)用“select()”函數(shù),表示查詢(xún)。
h.若以“create unique index”開(kāi)頭,則調(diào)用“index()”函數(shù),表示創(chuàng)建索引。
i.若以“drop index”開(kāi)頭,則調(diào)用“dropindex()”函數(shù),表示刪除索引。
(4)程序流程圖
開(kāi)始將文本框中內(nèi)容保存在字符串中Create table開(kāi)頭Drop table開(kāi)頭alter table開(kāi)頭insert開(kāi)頭delete開(kāi)頭Create unique index開(kāi)頭Drop index開(kāi)頭刪除該表信息,并修改數(shù)據(jù)字典數(shù)據(jù)字典中是否有該表信息否是寫(xiě)回?cái)?shù)據(jù)字典Drop添加屬性判斷其后為“add”或“drop”add插入元組刪除元組創(chuàng)建索引刪除索引標(biāo)記該表已存在刪除屬性
表3.1-1
3.2創(chuàng)建數(shù)據(jù)庫(kù)及數(shù)據(jù)操作功能(1)功能介紹
1、實(shí)現(xiàn)建立數(shù)據(jù)庫(kù)表結(jié)構(gòu)的功能。
a.支持整型、符點(diǎn)型、字符型數(shù)據(jù)。b.以文件形式保存基本表。c.建立相應(yīng)的數(shù)據(jù)字典。
2、實(shí)現(xiàn)輸入數(shù)據(jù)庫(kù)記錄的功能。
3、實(shí)現(xiàn)刪除數(shù)據(jù)庫(kù)記錄的功能。
4、實(shí)現(xiàn)修改數(shù)據(jù)庫(kù)記錄的功能。
5、實(shí)現(xiàn)顯示數(shù)據(jù)庫(kù)結(jié)構(gòu)和內(nèi)容(以表格形式顯示)。
6、實(shí)現(xiàn)在已有的關(guān)系中添加屬性的功能;
7、實(shí)現(xiàn)從已有的關(guān)系中刪除屬性的功能;
8、實(shí)現(xiàn)刪除表的功能。
(2)相關(guān)理論
通過(guò)編寫(xiě)一系列的SQL語(yǔ)句,實(shí)現(xiàn)創(chuàng)建表,刪除表,插入屬性,刪除屬性,插入元組,刪除元組,修改元組,查找元組等一系列操作。
(3)算法描述
a.創(chuàng)建表
首先判斷該表是否存在,若不存在則將create table 后的語(yǔ)句保存,即將屬性名及類(lèi)型存儲(chǔ)到數(shù)據(jù)字典中,否則輸出“該表已存在”。b.刪除表
首先在數(shù)據(jù)字典中將該表信息找到,并將其刪除,再找到該數(shù)據(jù)文件,也將其刪除,若該表有索引文件,也將該索引文件刪除。c.添加屬性
在數(shù)據(jù)字典中找到該表位置,將要添加的屬性名及類(lèi)型追加到末尾。d.刪除屬性
在數(shù)據(jù)字典中找到該表并找到該屬性,將該屬性刪除,找到該表的數(shù)據(jù)文件,刪除此文件中該屬性域。e.插入元組
讀數(shù)據(jù)字典,找到該文件,并記錄該表屬性的名字及類(lèi)型與要插入的數(shù)據(jù)進(jìn)行匹配,此時(shí)注意類(lèi)型為“Int”“float”型的輸入是否正確,還要注意“char()”類(lèi)型是否超界。若判斷完畢,將這些數(shù)據(jù)寫(xiě)到數(shù)據(jù)文件末尾,若該表有索引文件,還要基于插入新元組后的表建立新索引。f.刪除元組
查找數(shù)據(jù)文件,找到與“where”后的條件相符的元組,并刪除。g.修改元組
首先查看是否有“where”條件,若沒(méi)有,則將數(shù)據(jù)文件全部讀出,并將數(shù)據(jù)文件改成“set”后的條件;否則查找數(shù)據(jù)文件并全部讀出,找到與“where”后的條件相符的元組,根據(jù)“set”后的條件進(jìn)行修改,并寫(xiě)回文件中。
(4)程序流程圖
a.創(chuàng)建表程序流程圖
開(kāi)始文本中以create table開(kāi)頭查找數(shù)據(jù)字典是否有該表信息?否是將屬性名及類(lèi)型寫(xiě)進(jìn)數(shù)據(jù)字典
表3.2-1
提示該表已尋在
b.刪除表程序流程圖
開(kāi)始文本以“drop table”開(kāi)始查找數(shù)據(jù)字典是否存在該表?是在數(shù)據(jù)字典中將該表信息刪除否提示不存在該表找到相應(yīng)數(shù)據(jù)文件并將其刪除結(jié)束
表3.3-2
c.添加/刪除屬性程序流程圖
開(kāi)始文本以“alter table”開(kāi)始其后為“add”或“drop”add drop在數(shù)據(jù)字典中加入該屬性信息(名字及類(lèi)型)在數(shù)據(jù)字典中刪除該屬性信息找到數(shù)據(jù)文件,刪除該屬性信息結(jié)束 表3.2-3
d.插入元組程序流程圖
開(kāi)始文本以“insert”開(kāi)始查數(shù)據(jù)字典,記錄屬性名及類(lèi)型掃描待插入的每個(gè)屬性與數(shù)據(jù)字典中的屬性比較char()int或float是否匹配或越界是否匹配不匹配或越界都匹配提示屬性類(lèi)型輸入錯(cuò)誤寫(xiě)入數(shù)據(jù)文件尾是否有索引文件有無(wú)重寫(xiě)索引文件結(jié)束 表3.2-4
e.刪除元組程序流程圖
開(kāi)始文本以“delete”開(kāi)始查找數(shù)據(jù)字典是否存在該表?是否讀數(shù)據(jù)文件提示不存在該表找到與“where”后相匹配的數(shù)據(jù)文件并將其刪除結(jié)束
表3.3-5
f.修改元組程序流程圖
開(kāi)始文本以“update”開(kāi)始其后為是否有“where”條件無(wú)有將數(shù)據(jù)文件中相應(yīng)的內(nèi)容全部改為“set”后的條件找到數(shù)據(jù)文件中符合“where”后條件的元組將該元組相應(yīng)條件改為“set”后信息是否有相應(yīng)的索引文件有無(wú)重寫(xiě)索引文件結(jié)束 表3.2-6
(5)測(cè)試用例與實(shí)驗(yàn)結(jié)果
a.創(chuàng)建表 測(cè)試用例: create table s(s# char(9)sname char(8)age int sex char(2)primary key s#)
create table c(c# char(5)cname char(20)teacher char(8)primary key c#)
create table sc(s# char(9)c# char(5)grade float primary out key s# from s primary out key c# from c)實(shí)驗(yàn)結(jié)果: b.刪除表 測(cè)試用例: drop table sc 實(shí)驗(yàn)結(jié)果:
C:插入元組 測(cè)試用例:
insert into s values('s1','lou',21,'F')insert into s values('s2','lu',20,'F')insert into s values('s3','ha',22,'M')insert into s values('s4','zhang',21,'F')insert into s values('s5','qian',20,'M')
insert into s values('s6','sun',18,'F')insert into s values('s7','lisan',21,'F')insert into s values('s8','qian',20,'M')insert into s values('s9','wugozi',18,'F')insert into c values('c1','math','zhao')insert into c values('c2','chinese','qian')insert into c values('c3','english','sun')insert into c values('c4','cs','li')insert into c values('c5','java','zhou')insert into c values('c6','c++','wu')insert into c values('c7','jsp','zheng')insert into c values('c8','j2ee','wang')insert into c values('c9','asp','sima')insert into sc values('s1','c1',67)insert into sc values('s2','c2',80)insert into sc values('s3','c3',100)insert into sc values('s4','c4',99)insert into sc values('s5','c5',87)insert into sc values('s6','c6',78)insert into sc values('s7','c7',90)insert into sc values('s8','c8',87)insert into sc values('s9','c9',78)實(shí)驗(yàn)結(jié)果:
d:刪除元組 測(cè)試用例:
delete from sc where(sc.s#='s6')實(shí)驗(yàn)結(jié)果:
e:修改元組 測(cè)試用例:
update sc set score=120 where s#='s5' 實(shí)驗(yàn)結(jié)果:
f:添加屬性 測(cè)試用例:
Alter table s add school char(20)實(shí)驗(yàn)結(jié)果:
g:刪除屬性 測(cè)試用例:
Alter table drop school
3.3索引的創(chuàng)建及刪除(1)功能介紹
a.為某關(guān)系的主屬性建立索引
b.利用索引屬性完成選擇操作,記錄完成操作花費(fèi)的時(shí)間,在建立索引前的關(guān)系上執(zhí)行同樣的選擇操作并進(jìn)行時(shí)間代價(jià)的比較。
c.利用索引屬性完成連接操作,記錄完成操作花費(fèi)的時(shí)間,在建立索引前的關(guān)系上執(zhí)行同樣的選擇操作并進(jìn)行時(shí)間代價(jià)的比較。
d.刪除索引
(2)相關(guān)理論
默認(rèn)每個(gè)塊有50個(gè)字節(jié),數(shù)據(jù)文件中的每個(gè)元組有自己的首指針(指向元組首部的文件指針),索引文件中存儲(chǔ)的是屬性域值及其塊號(hào)(塊號(hào)通過(guò)其首指針/50得到)。
(3)算法描述
a.創(chuàng)建索引
針對(duì)表的主鍵建立索引文件,找到數(shù)據(jù)文件中要建立索引的屬性域值,并記錄該元組的首指針,將其保存在索引文件中。
b.利用索引屬性完成選擇操作
在索引文件中找到“select”語(yǔ)句中“where”后的條件涉及的屬性(因?yàn)槭腔谥麈I建立的索引,所以只能通過(guò)主鍵的索引文件來(lái)查找相應(yīng)的信息),記錄索引域后的塊號(hào),將塊號(hào)*50就能得到相應(yīng)的文件指針,通過(guò)文件指針讀數(shù)據(jù)文件,就能找到相應(yīng)的元組。
c.利用索引屬性完成連接操作 d.刪除索引
找到相應(yīng)的索引文件將其永久刪除
(4)程序流程圖
a.創(chuàng)建索引文件
開(kāi)始數(shù)據(jù)字典有該屬性?是找到數(shù)據(jù)文件中要建立索引的屬性域記錄該元組的文件否指針并/50得到塊號(hào)一并寫(xiě)入索引文件結(jié)束 表3.3-1
b.利用索引屬性完成選擇操作
開(kāi)始查找索引文件中與“where”后條件相符的屬性域值找到?記錄該屬性域值得塊號(hào)否塊號(hào)*50得到文件指針查找數(shù)據(jù)文件找到該元組,輸出結(jié)束 表3.3-2
是c.刪除索引文件
開(kāi)始找到該索引文件?是否將該索引文件徹底刪除結(jié)束 表3.3-4
(5)測(cè)試用例與實(shí)驗(yàn)結(jié)果
a:創(chuàng)建索引文件 測(cè)試用例:
create index index on s 實(shí)驗(yàn)結(jié)果:
b:利用索引選擇
3.4查詢(xún)功能(1)功能介紹
a.實(shí)現(xiàn)全關(guān)系選擇操作 b.實(shí)現(xiàn)單關(guān)系投影操作
c.實(shí)現(xiàn)單關(guān)系選擇操作(允許多條件)d.實(shí)現(xiàn)單關(guān)系的選擇投影操作(允許多條件)e.實(shí)現(xiàn)兩個(gè)關(guān)系和多個(gè)關(guān)系的連接操作 f.實(shí)現(xiàn)兩個(gè)關(guān)系和多個(gè)關(guān)系的選擇和連接操作 g.實(shí)現(xiàn)兩個(gè)關(guān)系和多個(gè)關(guān)系的選擇、投影和連接操作
(2)相關(guān)理論(3)算法描述
a.全關(guān)系的選擇操作
掃描數(shù)據(jù)字典,判斷是否有該表,如果有,則掃描數(shù)據(jù)文件,將數(shù)據(jù)文件中內(nèi)容全部輸出。
b.實(shí)現(xiàn)單關(guān)系的投影操作
掃描數(shù)據(jù)字典,判斷是否有該表,若有該表,記錄要投影的屬性是第幾個(gè),掃描數(shù)據(jù)文件,將每個(gè)元組中要查詢(xún)的屬性輸出。
c.實(shí)現(xiàn)單關(guān)系的選擇操作(允許多條件)
掃描數(shù)據(jù)字典,判斷是否有該表,若有該表,掃描數(shù)據(jù)文件,利用循環(huán)將滿(mǎn)足“where”后條件的元組選出。
d.實(shí)現(xiàn)單關(guān)系的選擇投影操作(允許多條件)
掃描數(shù)據(jù)字典,判斷是否有該表,若有該表,則記錄需要投影的屬性是第幾個(gè),查找數(shù)據(jù)文件,利用循環(huán)將滿(mǎn)足“where”條件的元組找出并屬性相應(yīng)的屬性值。
e.實(shí)現(xiàn)兩個(gè)關(guān)系和多個(gè)關(guān)系的連接操作
掃描數(shù)據(jù)字典,判斷是否有這兩個(gè)表,若有,則查找相關(guān)屬性,將兩個(gè)表中的相關(guān)屬性依據(jù)條件進(jìn)行匹配,若匹配成功,則表示連接成功,輸出連接結(jié)果。
f.實(shí)現(xiàn)兩個(gè)關(guān)系和多個(gè)關(guān)系的選擇和連接操作 在以上的連接結(jié)果中挑選符合條件的元組輸出。g.實(shí)現(xiàn)兩個(gè)關(guān)系和多個(gè)關(guān)系的選擇、投影和連接操作 在以上的結(jié)果中選擇要投影的屬性,輸出。
(4)程序流程圖
a.全關(guān)系的選擇操作
開(kāi)始掃描數(shù)據(jù)字典是否有該表?掃描數(shù)據(jù)文件并全部輸出結(jié)束 表3.4-1 b.實(shí)現(xiàn)單關(guān)系的投影操作
開(kāi)始掃描數(shù)據(jù)字典是否有該表?是否有要投影的屬性否記錄要投影的屬性是第幾個(gè)掃描數(shù)據(jù)文件將該屬性值域輸出結(jié)束
表3.4-2 c.實(shí)現(xiàn)單關(guān)系的選擇操作(允許多條件)
是是否
開(kāi)始掃描數(shù)據(jù)字典是否有該表?是記錄“where”條件并掃描是否掃描數(shù)據(jù)文件有與之匹配的元組?否輸出提示沒(méi)有符合條件的元組結(jié)束 表3,4-3 d.實(shí)現(xiàn)單關(guān)系的選擇投影操作(允許多條件)
開(kāi)始掃描數(shù)據(jù)字典是否有該表?是記錄要投影的屬性是第幾個(gè)否記錄“where”條件并掃描掃描數(shù)據(jù)文件有與之匹配的元組?否是選擇要投影的屬性值域提示沒(méi)有符合條件的元組提示沒(méi)有符合條件的元組輸出結(jié)束 表3.4-4(5)測(cè)試用例與實(shí)驗(yàn)結(jié)果
測(cè)試用例:
select s#,sname,age,sex from s where s.sname='qian'ands.age>19 實(shí)驗(yàn)結(jié)果:
測(cè)試用例:
select sname,age,sex from s where s.s#='s6'ands.age=18ors.sname='li' 實(shí)驗(yàn)結(jié)果:
測(cè)試用例: link s,sc base sc 實(shí)驗(yàn)結(jié)果:
測(cè)試用例: link s,c,sc base sc 實(shí)驗(yàn)結(jié)果:
3.5查詢(xún)優(yōu)化
(1)功能介紹
在做兩個(gè)表連接時(shí),先將需要用到的元組找到,并不做笛卡爾積,這在一定程度上減少了全部選擇的時(shí)間。
(2)相關(guān)理論
在做兩個(gè)表連接時(shí),需要名字及類(lèi)型相同的屬性用一定的條件進(jìn)行匹配,如果在做笛卡爾積之前就用這些條件把要用到的元組選出來(lái),既省空間又省時(shí)間。
(3)算法描述
首先查看表是否存在,若存在查找涉及到的屬性,記錄“where”后的條件,將兩個(gè)表中符合條件的元組都取出,將這些元組做連接。
(4)程序流程圖
開(kāi)始是否存在該表?是是否有涉及到的屬性?是否記錄“where”后的條件否將符合條件的元組先選出連接結(jié)束
表3.5-1 3.6數(shù)據(jù)庫(kù)保護(hù)功能(1)功能介紹
此DBMS系統(tǒng)有兩種用戶(hù):管理員,普通用戶(hù)。
(2)相關(guān)理論
a.插入元組、修改元組時(shí),匹配每個(gè)屬性的類(lèi)型,如果類(lèi)型及長(zhǎng)度輸入有誤,則提示輸入錯(cuò)誤不寫(xiě)入數(shù)據(jù)源文件,若符合條件,則查看基于每個(gè)屬性是否有索引文件,如果有,則重寫(xiě)索引文件。
b.修改元組時(shí)也要判斷類(lèi)型及長(zhǎng)度是否匹配,也要重寫(xiě)相應(yīng)的索引文件。c.每次做相應(yīng)操作前先考慮數(shù)據(jù)字典中是否有該表,是否有要查詢(xún)的屬性。
(3)算法描述
例如在做插入元組時(shí),首先查找數(shù)據(jù)字典有沒(méi)有待插入的表,如果有,則記錄每個(gè)屬性類(lèi)型及長(zhǎng)度,將待插入數(shù)據(jù)與屬性進(jìn)行一一比對(duì),一旦有一個(gè)記錄不符合要求,也無(wú)法插入表中。
(4)程序流程圖
開(kāi)始文本以“insert”開(kāi)始查數(shù)據(jù)字典,記錄屬性名及類(lèi)型掃描待插入的每個(gè)屬性與數(shù)據(jù)字典中的屬性比較char()int或float是否匹配或越界是否匹配不匹配或越界都匹配提示屬性類(lèi)型輸入錯(cuò)誤寫(xiě)入數(shù)據(jù)文件尾是否有索引文件有無(wú)重寫(xiě)索引文件結(jié)束 表3.6-1
4、總結(jié)
通過(guò)對(duì)于DBMS系統(tǒng)的模擬,使我對(duì)于數(shù)據(jù)庫(kù)系統(tǒng)有了更深刻的理解,了解了每個(gè)表信息的存儲(chǔ)結(jié)構(gòu),以及數(shù)據(jù)字典的相關(guān)說(shuō)明,也了解了主外鍵的意義與作用,也知道了插入元組的時(shí)候?qū)傩云ヅ鋯?wèn)題,以及對(duì)表的屬性域的修改等。通過(guò)編寫(xiě)程序,讓我對(duì)表連接有了更加系統(tǒng)的認(rèn)識(shí),也知道了在連接時(shí)先選出要查詢(xún)的元組更省時(shí)間,省空間。了解了怎樣存儲(chǔ)表信息才能既省空間又能保存表信息,沒(méi)有冗余情況。通過(guò)做實(shí)驗(yàn),我將理論與實(shí)踐有了更好的結(jié)合,不但提高了對(duì)理論的理解,更讓我對(duì)編程能力有了很好的鍛煉。
5、參考文獻(xiàn)
《數(shù)據(jù)庫(kù)系統(tǒng)原理》 李建中 王珊編著 電子工業(yè)出版社 《Java技術(shù)及其應(yīng)用》 王克宏 編著 高等教育出版社
第五篇:數(shù)據(jù)庫(kù)實(shí)驗(yàn)報(bào)告
10包三 李雅 100910306
實(shí)驗(yàn)報(bào)告
一、實(shí)驗(yàn)題目:
數(shù)據(jù)庫(kù)基本操作實(shí)驗(yàn)
二、實(shí)驗(yàn)?zāi)康模?/p>
掌握數(shù)據(jù)庫(kù)的建立、表的設(shè)計(jì)基本方法,通過(guò)實(shí)際操作熟練掌握數(shù)據(jù)庫(kù)的基本操作——數(shù)據(jù)的輸入與導(dǎo)入,表的設(shè)計(jì)。
三、實(shí)驗(yàn)內(nèi)容:
建立課程管理數(shù)據(jù)庫(kù),要求:
1.輸入老師、開(kāi)設(shè)課程、選課表、學(xué)生基本數(shù)據(jù)等,并輸入一些學(xué)生不同課程的考試成績(jī)。
2.建立查詢(xún)表,分別是成績(jī)查詢(xún)、學(xué)分查詢(xún)、不及格學(xué)生查詢(xún)。
3.建立窗體,分別顯示不及格學(xué)生的姓名、課程名稱(chēng)、成績(jī)和班級(jí)ID。在成績(jī)查詢(xún)中顯示學(xué)生姓名及各科成績(jī)。在教師基本信息中顯示編號(hào)、職稱(chēng)、工資、院系、等。同時(shí)建立開(kāi)設(shè)課程表和學(xué)生基本信息的窗體查詢(xún)。提供用戶(hù)一個(gè)簡(jiǎn)單的應(yīng)用程序界面,方便用戶(hù)操作使用。
4.制作報(bào)表。包括教師的授課報(bào)表,課程名稱(chēng)及課程類(lèi)別。學(xué)生的總成績(jī)報(bào)表,包括課程名稱(chēng)、成績(jī)和學(xué)分。
注:課程及考試成績(jī)可以任意輸入。選課按照班級(jí)確定。
四、實(shí)驗(yàn)過(guò)程:
1、數(shù)據(jù)庫(kù)表設(shè)計(jì)
在表格內(nèi)填入教師基本信息、開(kāi)始課程、課程基本信息、選課表、學(xué)生基本信息。
教師基本信息:
開(kāi)設(shè)課程:
/ 7
10包三 李雅 100910306
課程基本信息:
選課表:
/ 7
10包三 李雅 100910306
學(xué)生基本信息:
2、查詢(xún)表: 成績(jī)查詢(xún):
/ 7
10包三 李雅 100910306
學(xué)分查詢(xún):
不及格學(xué)生查詢(xún):
/ 7
10包三 李雅 100910306
3、窗體設(shè)計(jì): 不及格學(xué)生信息查詢(xún):
成績(jī)查詢(xún):
教師基本信息查詢(xún):
開(kāi)設(shè)課程信息查詢(xún):
/ 7
10包三 李雅 100910306
學(xué)生基本信息查詢(xún):
4、報(bào)表: 教師的授課報(bào)表:
/ 7
10包三 李雅 100910306
學(xué)生的總成績(jī):
/ 7