第一篇:數據庫實驗報告(實驗六)
實驗
六
SQL語言數據查詢語言DQL
一、實驗內容
了解SQL語言的SELECT語句對數據的查詢,學會在Navicat for MySQL中用SELECT語句對表中的數據進行簡單查詢、連接查詢、嵌套查詢和組合查詢。
啟動Navicat for MySQL,用SELECT語句進行簡單查詢操作,具體實驗步驟如下:(實驗步驟里的內容)
1啟動Navicat for MySQL,登錄到本地數據庫服務器后,連接到test數據庫上。用Create Table建立Student表、Course表和Choose表:
2.用INSERT語句分別向Student表中插入3個元組、Course表中插入3個元組、Choose表中插入7個元組:
3.用SELECT語句,查詢計算機學院學生的學號和姓名。
4.用SELECT語句的between?and?表示查詢條件,查詢年齡在20~23歲的學生信息。
5.用SELECT語句的COUNT()聚集函數,統計Student表中學生總人數。
6.分別用SELECT語句的max()、min()、sum()、avg()四個聚集函數,計算Choose表中C1課程的最高分、最低分、總分、平均分。
7.用SELECT語句對空值(NULL)的判斷條件,查詢Course表中先修課稱編號為空值的課程編號和課程名稱。
8.用SELECT語句的連接查詢,查詢學生的學號、姓名、選修的課程名及成績。
9.用SELECT的存在量詞EXISTS,查詢與“張三”在同一個學院學習的學生信息。
10.用SELECT語句的嵌套查詢,查詢選修C1課程的成績低于“張三”的學生的學號和成績。
11.用SELECT語句的組合查詢(UNION),查詢選修了C1課程或者選修了C3課程的學生學號。
12.用SELECT語句的組合查詢(UNION)與DISTINCT短語,查詢選修了C1課程或者選修了C3課程的學生學號,并取消重復的數據。
二、遇到的問題及解決
該實驗中,由于對SQL中語句的不熟悉,多次導致了輸入錯誤,得不到實驗結果,對存在量詞EXISTS陌生,不熟悉,導致實驗步驟中的13小題無法根據題目要求完成,要對書本上的知識加以熟悉。
三、心得體會
在實驗過程中,要獨立思考、獨立完成實驗任務,不懂的要虛心向教師或同學請教,這樣自己才會學到真的東西,對自己有所提升,并且可以為專業課程有所幫助。
第二篇:數據庫實驗2實驗報告 2
數據庫第二次試驗報告
PB10011020 劉思軼
實驗內容
本實驗有兩個可選題目,旅游出行和藥品免疫庫。本程序即為旅游出行的一個實現。
實驗原題摘要如下 數據關系模式:
航班FLIGHTS(String flightNum, int price, int numSeats, int numAvail, String FromCity, StringArivCity);
賓館房間HOTELS(String location, int price, int numRooms, int numAvail); 出租車CARS(String location, int price, int numCars, int numAvail); 客戶CUSTOMERS(String custName);
預訂情況RESERVATIONS(String resvKey, String custName, int resvType)系統基本功能:
1.航班,出租車,賓館房間和客戶基礎數據的入庫,更新(表中的屬性也可以根據你的需要添加)。
2.預定航班,出租車,賓館房間。
3.查詢航班,出租車,賓館房間,客戶和預訂信息。4.查詢某個客戶的旅行線路。5.檢查預定線路的完整性。6.其他任意你愿意加上的功能。
程序功能
本系統由旅行服務提供商運營,發布在支持PHP + MySQL 的服務器上。系統默認有三個角色,游客、用戶和管理員。它們的權限如下
1、游客
查詢當前航班、旅館和出租車的預訂情況;
2、注冊用戶
游客的所用權限; 查詢當前預訂;
預訂航班、旅館和出租車; 退訂航班、旅館和出租車。打印旅行路線
檢查預定路線的完整性。檢查航班的完備性
3、管理員
注冊用戶的所用權限 添加航班、旅館和出租車信息; 更改航班、旅館和出租車信息; 注冊用戶;
更改用戶密碼和權限; 刪除注冊用戶; 查詢用戶預訂; 取消用戶預訂; 查詢用戶旅行線路。
運行平臺
本系統在Windows 7 32位 下由PHP-now虛擬的網絡運行平臺上測試.所需環境為: PHP Apache MySQL PhmyAdmin 環境搭建
打開集成環境php-now文件夾,點擊init.cmd,會自動安裝所需環境 接著在PHP后臺中載入所需要的表
CREATE TABLE FLIGHTS(flightNum varchar(30), price int(6), numSeats int(6), numAvail int(6), FromCity varchar(30), ArivCity varchar(30), PRIMARY KEY(flightNum));CREATE TABLE HOTELS(location varchar(30), price int(6), numRooms int(6), numAvail int(6), PRIMARY KEY(location));CREATE TABLE CARS(location varchar(30), price int(6), numCars int(6), numAvail int(6), PRIMARY KEY(location));CREATE TABLE CUSTOMERS(custName varchar(30), password varchar(50), type varchar(20), PRIMARY KEY(custName));CREATE TABLE RESERVATIONS(resvKey int(20)AUTO_INCREMENT, custName varchar(30), resvType varchar(20), detail varchar(20), PRIMARY KEY(resvKey));
該程序所實現的功能
1.登錄功能
登陸者身份分為游客和管理員,在數據庫中信息都存放在customer表中,區別為type項不同,管理員為admin,游客為users,決定了權限不同.(1)普通游客登錄后界面
(2)管理員登陸后界面
2.查詢功能
登入http://127.0.0.1 可以選擇查詢航班,旅館和出租車.3.游客-預訂功能
4.游客-管理預訂信息功能
點擊自己的id可進入該功能頁面,可以看到自己的旅游路線和預訂信息,并可以取消預訂.5.游客-檢查線路完整性功能
當游客預訂了從A到B的機票,則必須檢查啊在A定了車(去機場),在B訂了車和旅館(下飛機后坐車和住宿),以此實現完整性檢查.在從nanjing to beijing的旅游路線后面點擊check,會提示游客還需要在nanjing預訂汽車,在beijing預定旅館。
6.管理員-管理航班,旅館和出租車表
可以有insert delete 和update 幾種操作.delete:
直接點擊cancel就可刪除相應的信息。insert & update: 點擊edit后,程序會自動將想要編輯的行的信息填入供管理員編輯,不用再手動輸入。
7.管理員-管理用戶表
可以添加新用戶,對用戶的權限升級,查看用戶信息.用戶的密碼是md5加密保存的。
實驗小結
仍然存在的問題: 1.軟件界面過于簡單,僅僅實現了功能沒有在用戶可用性上多做考慮。
2.新用戶想要登錄該系統預訂必須要由管理員登入信息后才可操作。缺少了游客注冊的功能。
3.不能根據用戶的需求點對點得查詢相應信息,只能羅列出所有的信息。
實驗心得: 1.在搭建PHP環境中遇到了許多問題:如用戶權限不夠,域名已使用使得Apache-20安裝不成功,通過網上查閱資料解決問題。
2.了解到自己對問題的調研還是不足,如旅游系統,各種表之間到底應該怎么建立關系,哪些項是主鍵,自己建的表中的信息是否已經充足了,參照現實中旅游系統才能不斷完善.
第三篇:數據庫上機實驗8實驗報告
上機實驗八——完整性約束的實現
一、實習目的:
掌握SQL中實現數據完整性的方法,加深理解關系數據模型的三類完整性約束。
二、實習準備:
1.復習“完整性約束SQL定義”
2.完成習題四第10題中的各項操作的SQL語句。
3.了解SQL Server 中實體完整性、參照完整性和用戶自定義完整性的實現手段
三、實習內容:
1.驗證習題四第10題四個表結構的SQL語句。
表一:Sstudent CREATE TABLE Sstudent(Sno char(7)NOT NULL PRIMARY KEY, Sname VarChar(20)NOT NULL, Ssex Char(2)NOT NULL DEFAULT('男')check(Ssex IN('男','女')), Sage smallint check(Sage >14 AND Sage<65), Clno Char(5)NOT NULL REFERENCES Cclass(Clno)ON UPDATE CASCADE);
表二:Ccourse CREATE TABLE Ccourse(Cno Char(1)NOT NULL PRIMARY KEY, Cname VarChar(20)NOT NULL, Credit Smallint CHECK(Credit IN(1,2,3,4,5,6)));
表三:Cclass CREATE TABLE Cclass(Clno Char(5)NOT NULL PRIMARY KEY, Speciality VarChar(20)NOT NULL, Inyear Char(4)NOT NULL, Number Integer CHECK(Number>1 AND Number<100), Mointor Char(7)REFERENCES Student(Sno));
表四:Ggrade CREATE TABLE Ggrade(Sno Char(7)NOT NULL REFERENCES Student(Sno)ON DELETE CASCADE ON UPDATE CASCADE, Cno Char(1)NOT NULL REFERENCES Course(Cno)ON DELETE CASCADE ON UPDATE CASCADE, Gmark Numeric(4,1)CHECK(Gmark>0 AND Gmark<100), PRIMARY KEY(Sno,Cno));
2.SQL Server中提供了那些方法實現實體完整性、參照完整體和用戶自定義完整性
答:實體完整性:是通過主碼的定義(PRIMARY KEY)來實現的;
參照完整性:是利用外部碼(REFERENCES)的說明,以限制相關表中某些屬性的取值,當用戶違反規則時,提供三種:RESTRICT(限制策略),CASCADE(級聯策略),SET NULL(置空策略);
用戶自定義完整性:check約束,對元組的CHECK約束
第四篇:實驗三 數據庫安全性實驗報告
一 實驗目的1.熟悉通過SQL語句對數據進行安全性控制;
2.針對具體應用要求,完成授權和收回權限的操作;
二 實驗工具SQL Server 2005
利用SQL Server 2005 SSMS及其SQL查詢編輯器。
三 實驗內容和要求
使用SQL對數據進行安全性控制,包括:授權和權力回收。操作完成后看看已授權的用戶是否真正具有授予的數據操作的權力了;權力收回操作之后的用戶是否確實喪失了收回的數據操作的權力。根據以上要求認真填寫實驗報告,記錄所有的實驗用例。具體操作可以參照課件中的實例。
具體操作內容:
創建以下兩個關系模式,并分別插入相應的數據。
職工(職工號,姓名,年齡,職務,工資,部門號)
部門(部門號,名稱,經理名,地址,電話號碼)
(1)請用SQL的Grant和Revoke語句(加上視圖機制)完成以下授權定義或存取控制功能,并進行相應的安全性測試;
(a)用戶王明對兩個表有select權力;
(b)用戶李勇對兩個表有insert和delete權力;
(c)每個職工只對自己的記錄有select權力;
(d)用戶劉星對職工表有select權力,對工資字段具有更新權力;
(e)用戶張新具有修改這兩個表的結構的權力;
(f)用戶周平具有對兩個表所有權力(對,插,改,刪數據),并具有給其他用戶授權的權利;
(g)用戶楊蘭具有從每個部門職工中select最高工資,最低工資,平均工資的權力,他不能查看每個人的工資。
(2)把上面(a)~(g)的每一種情況,撤銷各用戶所授予的權力。
四 實驗報告
4.1 實驗環境:
Windows XP
MicrosoftSQL server Management Studio 2005
4.2 實驗內容與完成情況:
--新建數據庫
create database work
go
use work
--創建以下兩個關系模式,并分別插入相應的數據。
--Worker(職工號,姓名,年齡,職務,工資,部門號)
go
create table Worker(職工號 varchar(10),姓名 char(10),年齡 int,職務 char(15),工資 int,部門號 char(50))
--Section(部門號,名稱,經理名,地址,電話號碼)
create table Section(職工號 char(10),名稱 char(10),經理名 char(10),地址 char(50),電話 char(15));
go
--插入部門信息
insert into Section values('a001','市場部門','李永','白理工','***');
insert into Section values('a002','營銷部門','李剛','白理工','***');
--插入職工信息
insert into Worker values('a001001','王明',20,'市場營銷員',2000,'a001');
insert into Worker values('a001002','李村',29,'市場營銷員',2000,'a001');
insert into Worker values('a001003','李永',20,'經理',5000,'a001');
insert into Worker values('a002001','羅杰',18,'銷售員',2000,'a002');
insert into Worker values('a002002','李紅',24,'銷售員',2000,'a002');
insert into Worker values('a002003','李剛',32,'經理',5000,'a002');
--查詢部門表和職工表的數據
select *from Worker;
select *from Section;
--授權
use work
go
--(a)用戶王明對兩個表有select權力;
create login [王明] with password=N'1234';
create user [王明] for login [王明];
grant select on Worker to [王明];
grant select on Section to [王明];
--插入數據權限測試
insert into Worker values('a002004','羅紅',28,'銷售助理',4000,'a002');
--查詢數據權限測試
select *from Worker;
--(b)用戶李勇對兩個表有insert和delete權力;
use work
go
create login [李勇] with password=N'1234';
create user [李勇] for login [李勇];
grant insert,delete on Worker to [李勇];
grant insert,delete on Section to [李勇];
--插入數據權限測試
insert into Worker values('a002005','羅莉',52,'銷售助理',4000,'a002');
--查詢數據權限測試
select *from Worker;
--刪除權限測試
delete Worker from where 職工號='a002001';
--(c)每個職工只對自己的記錄有select權力;
use work
go
create view Myself as select * from Worker
where 姓名=user;
grant select on Myself to public;
--(d)用戶劉星對職工表有select權力,對工資字段具有更新權力;
use work
go
create login [劉星] with password=N'1234';
create user [劉星] for login [劉星];
grant select,update(工資)on Worker to [劉星];
--更新修改權限測試
update Worker set 工資=3500 where 職工號='a002001'
--查詢數據權限測試
select *from Worker;
--(e)用戶張新具有修改這兩個表的結構的權力;
use work
go
create login [張新] with password=N'1234';
create user [張新] for login [張新];
grant all PRIVILEGES on Worker to 張新;
grant all PRIVILEGES on Section to 張新;
--(f)用戶周平具有對兩個表所有權力(對,插,改,刪數據),并具有給其他用戶授權的權利;
use work
go
create login [周平] with password=N'1234';
create user [周平] for login [周平];
grant all PRIVILEGES on Worker to 周平with grant option;
grant all PRIVILEGES on Section to 周平with grant option;
--(g)用戶楊蘭具有從每個部門職工中select最高工資,最低工資,平均工資的權力,他不能查看每個人的工資。
use work
go
create login [楊蘭] with password=N'1234';
create user [楊蘭] for login [楊蘭];
grant view Wage(max(工資),min(工資),avg(工資))
as select max(工資),min(工資),avg(工資)from Worker Group by 部門號; grant select on Wage to 楊蘭;
--(2)把上面(a)~(g)的每一種情況,撤銷各用戶所授予的權力。
use work
go
--注銷用戶王明,收回權力
revoke select on WOrker from [王明];
revoke select on Section from [王明];
drop user [王明];
drop login [王明];
use work
go
--注銷用戶李勇,收回權力
revoke select on Worker from [李勇];
revoke select on Section from [李勇];
drop user [李勇];
drop login [李勇]
--撤銷用戶對自己的記錄有select權力
use work
go
revoke select on Myself from public;
drop view Myself cascade;
use work
go
--注銷用戶劉星,收回權力
revoke select,update(工資)on Worker from [劉星];
drop user [劉星];
drop login [劉星];
use work
go
--注銷用戶張新,收回權力
revoke alter on table Worker,Section from [張新];
drop user [張新];
drop login [張新];
use work
go
--注銷用戶周平,收回權力
revoke all PRIVILEGES on table Worker from [周平] cascade;
revoke all PRIVILEGES on Section from [周平] cascade;
drop user [周平];
drop login [周平];
--注銷用戶楊蘭,收回權力
revoke select on Wage from [楊蘭];
drop view Wage cascade;
drop user [楊蘭];
drop login [楊蘭];
use master
go
--刪除數據庫work
drop database work;
4.3 出現的問題:
在更改連接的時候使用SQL server身份驗證登陸,用新建的用戶名登陸失敗,顯示
該用戶與可信SQL server無關聯
4.4 解決方案(列出遇到的問題和解決辦法,列出沒有解決的問題): 啟用SQL Server身份驗證
SQL Server Management Studio--對象資源管理器--右鍵 你的服務器(.SQLExpress或者localhost)--屬性--安全性--服務器身份驗證--SQL Server和Windows身份驗證模式,最后重啟一下數據庫
第五篇:SQL數據庫實驗報告 實驗二
實驗2SQL Server數據庫的管理
1.實驗目的(1)了解SQL Server 數據庫的邏輯結構和物理結構的特點。
(2)掌握使用SQL Server管理平臺對數據庫進行管理的方法。
(3)掌握使用Transact-SQL語句對數據庫進行管理的方法。
2.實驗內容及步驟
(1)在SQL Server管理平臺中創建數據庫。
① 運行SQL Server管理平臺,在管理平臺的對象資源管理器中展開服務器。
② 右擊“數據庫”項,在快捷菜單中選擇“新建數據庫”菜單項。在新建數據庫對話框的數據庫名稱文本框中輸入學生管理數據庫名studentsdb,單擊“確定”按鈕。
(2)選擇studentsdb數據庫,在其快捷菜單中選擇“屬性”菜單項,查看“常規”、“文件”、“文件組”、“選項”、“權限”和“擴展屬性”等頁面。
(3)打開studentsdb數據庫的“屬性”對話框,在“文件”選項卡中的數據庫文件列表中修改studentsdb數據文件的“分配的空間”大小為2MB。指定“最大文件大小”為5MB。修改studentsdb數據庫的日志文件的大小在每次填滿時自動遞增5%。
(4)單擊“新建查詢”打開查詢設計器窗口,在查詢設計器窗口中使用Transact-SQL語句CREATE DATABASE創建studb數據庫。然后通過系統存儲過程sp_helpdb查看系統中的數據庫信息。
(5)在查詢設計器中使用Transact-SQL語句ALTER DATABASE修改studb數據庫的設置,指定數據文件大小為5MB,最大文件大小為20MB,自動遞增大小為1MB。
(6)在查詢設計器中為studb數據庫增加一個日志文件,命名為studb_Log2,大小為5MB,最大文件大小為10MB。
(7)使用SQL Server管理平臺將studb數據庫的名稱更改為student_db。
(8)使用Transact-SQL語句DROP DATABASE刪除student_db數據庫。
3.實驗思考
(1)數據庫中的日志文件是否屬于某個文件組?
(2)數據庫中的主數據文件一定屬于主文件組嗎?
(3)數據文件和日志文件可以在同一個文件組嗎?為什么?
(4)刪除了數據庫,其數據文件和日志文件是否已經刪除?是否任何人都可以刪除數據庫?
(5)能夠刪除系統數據庫嗎?