第一篇:数据库实验报告,
《数据库原理与技术》实验报告
实验一、数据定义及更新语句练习一、实验内容
建立如下 mySPJ 数据库,包括S,P,J,与 SPJ 四个基本表(《数据库系统概论》第二章习题 5 中得四个表),要求实现关系得三类完整性. S(SNO,SNAME,STATUS,CITY); P(PNO,PNAME,COLOR,WEIGHT); J(JNO,JNAME,CITY);SPJ(SNO,PNO,JNO,QTY); 二、完成情况
附上按照实验内容编写得程序代码。
(小四号字,宋体)三、实验结果1、插入一条记录
2、
①将 p 表中得所有红色零件得重量增加 5.②将 spj 表中所有天津供应商得 QTY 属性值减少 10。用子查询。
3、利用Delete 语句删除 p 表中得所有红色零件得记录。
附上各个步骤所用得实验用例与结果显示(小四号字,宋体)
四、问题与解决
(小四号字 , 宋体)1
.实验中遇到得问题及解决过程
.实验中产生得错误及原因分析
首先写出执行语句不成功得时候系统报告得错误信息。然后分析错误原因 , 并给出解决办法。
实验二 简单查询与连接查询 一、实验内容
(一)完成下面得简单查询:
①查询所有“天津”得供应商明细;②查询所有“红色"得 14 公斤以上得零件。
③查询工程名称中含有“厂”字得工程明细。
(二)完成下面得连接查询: ①等值连接:求 s 表与 j 表得相同城市得等值连接。
②自然连接:查询所有得供应明细,要求显示供应商、零件与工程得名称,并按照供应、工程、零件排序。
③笛卡尔积:求 s 与p表得笛卡尔积.④左连接:求 j 表与 spj 表得左连接。
⑤右连接:求spj 表与j表得右连接。
二、完成情况
(一)完成下面得简单查询:
①查询所有“天津”得供应商明细;
②查询所有“红色“得 14 公斤以上得零件。
③查询工程名称中含有“厂”字得工程明细。
(二)完成下面得连接查询:
①等值连接:求 s 表与 j 表得相同城市得等值连接.②自然连接:查询所有得供应明细,要求显示供应商、零件与工程得名称,并按照供应、工程、零件排序。
③笛卡尔积:求 s 与 p 表得笛卡尔积。
④左连接:求 j 表与 spj 表得左连接。
⑤右连接:求 spj表与 j 表得右连接。
附上按照实验内容编写得程序代码。
(小四号字 , 宋体)三、实验结果
附上各个步骤所用得实验用例与结果显示(小四号字,宋体)
四、问题与解决
(小四号字 , 宋体)1
。实验中遇到得问题及解决过程
2。实验中产生得错误及原因分析
首先写出执行语句不成功得时候系统报告得错误信息。然后分析错误原因 , 并给出解决办法。
实验三 分组查询与嵌套查询 一、实验内容
(一)分组查询: 1、求各种颜色零件得平均重量。
2、求北京供应商与天津供应商得总个数。
3、求各供应商供应得零件总数。
4、求各供应商供应给各工程得零件总数。
5、求使用了 100个以上 P1 零件得工程名称。
6、求各工程使用得各城市供应得零件总数.
(二)嵌套查询:
1、in 连接谓词查询: ① 查询没有使用天津供应商供应得红色零件得工程名称。
② 查询供应了 1000 个以上零件得供应商名称。(having)2、比较运算符:求重量大于所有零件平均重量得零件名称。
3、Exists 连接谓词: ① 查询供应 J1 得所有得零件都就是红色得供应商名称. ② 至少用了供应商S1 所供应得全部零件得工程号 JNO. 二、完成情况
(一)分组查询:
1、求各种颜色零件得平均重量.
2、求北京供应商与天津供应商得总个数。
3、求各供应商供应得零件总数。
4、求各供应商供应给各工程得零件总数。
5、求使用了100 个以上 P1 零件得工程名称。
6、求各工程使用得各城市供应得零件总数。
(二)嵌套查询:
1、in 连接谓词查询: ① 查询没有使用天津供应商供应得红色零件得工程名称。
② 查询供应了 1000 个以上零件得供应商名称。(having)
SELECT SNAME FROM S WHERE SNO IN(SELECT SNO FROM SPJ GROUP BY SNO
HAVING SUM(QTY)〉=1000)
2、比较运算符:求重量大于所有零件平均重量得零件名称.
3、Exists连接谓词: ① 查询供应 J1 得所有得零件都就是红色得供应商名称。
② 至少用了供应商 S1 所供应得全部零件得工程号 JNO.附上按照实验内容编写得程序代码。
(小四号字 , 宋体)三、实验结果
附上各个步骤所用得实验用例与结果显示(小四号字,宋体)四、问题与解决
1、在选择数据类型时,没有选择正确得数据类型,导致含有 SUM 得语句不能执行。
(小四号字 , 宋体)1
。实验中遇到得问题及解决过程
2.实验中产生得错误及原因分析
首先写出执行语句不成功得时候系统报告得错误信息。然后分析错误原因 , 并给出解决办法。
实验成绩
评价项目 评分等级 独立完成完整得实验内容,结果完全正确,报告内容完整,排版整洁美观,能真实体现实际操作过程及遇到得问题。
A 完成实验,实验内容较为完整,结果正确,报告内容较为完整,排版较为整洁美观,能体现实际操作过程及遇到得问题。
B B 基本完成实验,结果正确,报告内容欠缺,排版较为整洁美观,能体现实际操作过程及遇到得问题。
C C 不能独立完成完整得实验内容,结果不真实,报告内容欠缺,排版欠整洁美观,不能体现实际操作过程及遇到得问题。
D
第二篇:数据库实验报告
实验一 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