数据库上机报告.docx

上传人:b****8 文档编号:10038103 上传时间:2023-02-08 格式:DOCX 页数:9 大小:18.17KB
下载 相关 举报
数据库上机报告.docx_第1页
第1页 / 共9页
数据库上机报告.docx_第2页
第2页 / 共9页
数据库上机报告.docx_第3页
第3页 / 共9页
数据库上机报告.docx_第4页
第4页 / 共9页
数据库上机报告.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

数据库上机报告.docx

《数据库上机报告.docx》由会员分享,可在线阅读,更多相关《数据库上机报告.docx(9页珍藏版)》请在冰豆网上搜索。

数据库上机报告.docx

数据库上机报告

数据库实验报告

实验二交互式SQL语言

1实验报告

《数据库系统概论》实验报告

题目:

交互式SQL

姓名

刘忠梅

日期

2012-6-19

实验环境:

操作系统:

Windows7;数据库管理系统:

MSSQLServer2008

实验内容与完成情况:

1.数据定义:

表的创建、修改及删除

(1)学生表:

Student(Sno,Sname,Sex,Sage,Sdept)。

Student由学号(Sno)、姓名(Sname)、性别(Sex)、年龄(Sage)、所在系(Sdept)五个属性组成,其中Sno为主键。

createtableStudent

(Snochar(9)primarykeynotnull,

Snamechar(20)uniquenotnull,

Ssexchar

(2)notnull,

Sagesmallintnotnull,

Sdeptchar(20)notnull)

InsertintoStudent(Sno,Sname,Ssex,Sage,Sdept)

values('200215121','李勇','男',20,'CS')

insertintoStudent(Sno,Sname,Ssex,Sage,Sdept)

values('200215122','刘晨','女',19,'CS')

insertintoStudent(Sno,Sname,Ssex,Sage,Sdept)

values('200215123','王敏','女',18,'MA')

insertintoStudent(Sno,Sname,Ssex,Sage,Sdept)

values('200215125','张立','男',19,'IS')

(2)课程表:

Course(Cno,Cname,Cpno,Ccredit)

Course课程号(Cno)、课程名(Cname)、先行课的课程号(Cpno)、学分(Ccredit)四个属性组成,其中Cno为主键。

其中Cpno参考了本表的Cno字段的值,Cno为主键

createtablecourse

(cnochar(40)primarykeynotnull,

cnamechar(4)notnull,

ccreditsmallintnotnull

foreignkey(Cpon)referencescourse(Cno))

insertintoCoursevalues('1','数据库','5',4)

insertintoCoursevalues('2','数学','',2)

insertintoCoursevalues('3','信息系统','1',4)

insertintoCoursevalues('4','操作系统','6',3)

insertintoCoursevalues('5','数据结构','7',4)

3基本表的修改:

a)向Student表增加“入学时间”列,期数据类型为日期型

b)将年龄的数据类型由字符型改为整型

c)增加课程名称必须取唯一值的约束条件

altertablestudebtadds_entrancedatetime

altertablestudentaltercolumnsageint

altertablecourseaddunique(cname)

2.数据操作:

1.查询全体学生的学号和姓名

selectsno,sname

fromstudent

2.查询全体学生的详细记录

select*

fromstudent

3.查询全体学生的姓名、出生年份和所在的院系,要求用小写字母表示所有系名。

selectsname,'yearofbirth:

',2011-sage,lower(

sdept)

fromstudent

4.查询选修了课程的学生学号,去掉结果中的重复行。

selectdistinctsno

fromsc

5.查询所有年龄在20~23岁之间的学生姓名、系别和年龄。

selectsname,sdept,sage

fromstudent

wheresagenotbetween20and23

1将一新学生记录(学号:

95050;姓名:

陈冬;性别:

男;年龄:

18;所在系:

计算机科学系)插入学生表中。

insert

intostudent(sno,sname,ssex,sage,sdept)

values('95050','陈冬','男',18,'Is')

2插入一条选课记录(‘95020’,’1’)。

insert

intosc(sno,cno)

values('95020','1')

3对每一个系,求学生的平均年龄,并把结果存入数据库。

createtabledept_age

(sdeptchar(15)

Avg_agesmallint)

4.将学生95001的年龄改为22岁。

updatestudent

setsage=22

wheresno='95001'

5将所有学生的年龄增加一岁

updatestudent

setsage=sage+1

--6将计算机科学系全体学生的成绩置零。

updatesc

setgrade=0

视图

1.建立信息系学生的视图

createviewIS_student

as

selectsno,sname,sage

fromstudent

wheresdept='IS'

2.建立信息系学生的视图,并要求进行修改和插入操作时仍须保证该视图只有信息系的学生。

createviewIS_student

as

selectsno,sname,sage

fromstudent

wheresdept='IS'

withcheckoption

3.建立信息系选修了’1’号课程的学生视图

createviewIS_s1(sno,sname,grade)

as

selectstudent.sno,sname,grade

fromstudent,sc

wheresdept='IS'and

sc.sno=student.snoand

sc.sno='1'

出现问题:

在使用查询分析器时,没有相应改变路径使得操作无法正确执行!

一开始刚刚使用SQL2000时,因为对其查询语言不太熟悉,所以会出现那一些语法错误和使用错误,

实验三数据控制(安全性部分)

《数据库系统概论》实验报告

题目:

数据控制(安全部分)

姓名

 刘忠梅

日期

 2012-6-20

实验内容完成情况:

(注明源程序的名字)

1.授权,建立多个用户,给他们赋予不同的权限,然后查看是否真正拥有被授予的权限。

建立用户U1、U2、U3、U4、U5、U6、U7,选择全部为CONNECT角色。

在SYSTEM与七个用户之间进行授权。

再授权之后验证用户是否有了相应的权限。

GRANTSELECT

ONTABLESTDUENT

TOU1;

2.回收权限。

将权限部分收回,检查回收后,该用户是否真正失去了对数据的相应权限。

可将权限授予用户U5时,允许该用户将权限在授予给其他用户之后再将权限授予U6,将用户U5的权限收回时必须级联收回。

否则系统将拒绝执行该命令。

REVOKEUPDATE(SNO)

ONTABLESTDUFROMU4;

出现的问题:

删除不了用户组G1

解决方案(不能解决的将问题列出):

只有在当前数据库上拥有DBA权限或拥有想用权限的用户才能够删除用户。

 

实验四数据控制(完整性部分)

《数据库系统概论》实验报告

题目:

数据控制

姓名

 刘忠梅

日期

 2012-6-19

关系模型的实体完整性在CREATETABE中庸PRIMARYKEY定义。

定义主码方法分为定义为列级约束条件和定义为表级约束条件两种。

CREATETRIGGERTRIBEFOREUPDATEORINSERTONTAB

FOREACHROW

ASBEGIN

IFnew.col>100ANDnew.col<1000THEN

new.col:

=50;

ENDIF;

IFnew.col>1000THEN

RAISEEXCEPTION'Newvaluescannotbemorethan1000';

ENDIF;

END;替换为:

CREATETRIGGERTRI

ONTAB

FORUPDATE,INSERT

AS

DECLARE@colINT

IF(SELECTcolFROMinserted)>1000

BEGIN

PRINT'Newvaluescannotbemorethan1000'

BEGIN

UPDATETABSETcol=50

WHERE(colBETWEEN100AND1000)

END

 

ELSE

BEGIN

UPDATETABSETcol=50

WHERE(colBETWEEN100AND1000)

END

ROLLBACKTRANSACTION

END

ELSE

BEGIN

UPDATETABSETcol=50

WHERE(colBETWEEN100AND1000)

END

出现的问题:

对表中的数据进行更新,将20更新为1500

系统报出NEWVALUESCANNOTMORETHAN1000的错误

解决方案(不能解决的将问题列出):

对表进行查询后发现,表中的数据并没有发生改变。

说明在更新数据时,只大于1000,则触发器TRI自动执行,系统报错,更新无效。

实验九查询优化

《数据库系统概论》实验报告

题目:

查询优化

姓名

 刘忠梅

日期

 2012-6-20

实验内容完成情况:

(注明源程序的名字)

单表查询:

(1)查询Student表中20岁以上学生的信息

SELECT*FROMSTUDENTWHERESage>20

表查询

(1)查询选修了2号课程的学生姓名

(2)查询没有选修1号课程的学生姓名

CREATETABLECourse

(CNOCHAR(7)PRIMARYKEY,

CNAMEVARCHAR(50),

CREDITINT

GO

CREATETABLEStudent

(SNOCHAR(8)PRIMARYKEY,

SNAMECHAR(8),

SSEXCHAR

(2),

SAGEINT,

SDEPTVARCHAR(50)

GO

出现的问题:

多表查询

【例5】嵌套查询(表元组数少)

[例5-1]查询选修了2号课程的学生姓名。

SELECTSname

FROMStudent

WHERESnoIN

(SELECTSno

FROMSC

WHERECno=‘2’);

嵌套查询(表元组数多

查询选修了2号课程的学生姓名。

SELECTname

FROMSTU

WHEREnumIN

(SELECTs_num

FROMS_C

WHEREc_num=‘2’);

查询计划:

QUERYPLAN

 

解决方案(不能解决的将问题列出):

在STU表上使用了索引,因为STU表的元组数足够大,系统在分析后选择了代价

较小的索引查找方法。

这个例子产生的查询计划是一个嵌套循环,并且是将选择完后的S_C表作为外表对STU

表进行循环扫描。

这样做的原因是对S_C进行过滤之后,产生的中间结果元组数不比STU表

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1