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