《数据库原理》实验 班级: 学号: 姓名:
三、实验课后训练
1. 掌握SQL SERVER中流控制语句及其它常用编程语句;
1) 使用查询分析器,编写代码,输出乘法口诀表。
2. 自行练习实验指导书P24【实验1.2 数据查询】1.2.5自我实践部分; 3. 自行练习实验指导书P30【实验1.3 数据更新】1.3.5自我实践部分; 4. 自行练习实验指导书P36【实验1.4 视图】1.4.5自我实践部分;
5. 自行练习实验指导书P49【实验1.6 空值和空集的处理】1.6.5自我实践部分; 四、实验报告
1. SQL SERVER中变量声明的命令是什么?输出命令是什么?
Declare @variable_name //局部变量名称 Datatype //数据类型
2. SQL SERVER中实现分支和循环的语句分别是什么?
分支:
case when 条件1 then 结果1 when 条件2 then 结果2 [else 其他结果] end 循环:
while (条件--只能是表达式) 语句或语句块 [break]--强制退出
3. 在SQL SERVER里使用ORDER BY排序时,NULL值如何处理?使用GROUP BY分组
时,NULL值又如何处理的?
在使用ORDER BY 进行排序时,有ASC(升序)和DESC(降序)两种方式。无论采用哪种方式,NULL值总被当作最小值处理。即在按升序排列时,取空值的元组将最先显示,按降序排时,取空值的元组将会最后显示。
使用GROUP BY 进行排序,取空值的项不是被忽略,而是将NULL看成一个取值,在处理的时候把所有取空值的项都看成一样,因而形成一个分组。
4. 实验总结(实验过程中出现的问题、解决方法、结果如何或其它)
有好多次运行都是有检查完成但是执行错误,经检查才知道是上面的数据库默认是master,而不是要执行的数据库。由于粗心导致的字母拼写错误,导致执行结果出错。不会使用嵌套语句,经过分析书上的程序段,略微懂了一点。向表中插入记录,应该用insert into 表名 values(列属性).创建视图用create view (视图名) as from 表名 。经过试验验证,明白with check option 可以自动筛选不符合条件的记录。
11
《数据库原理》实验 班级: 学号: 姓名: 实验三——数据库完整性与安全性 一、实验目的
1. 理解实体完整性、参照完整性、用户自定义完整性的概念,学习三类完整性的实现,了
解违反完整性的结果;
2. 掌握MS SQL SERVER中的有关用户登录认证及管理方法,熟练使用自主存取控制进行
权限管理;
二、实验预习内容
在认真阅读教材及实验指导书【2.1 实体完整性】、【2.2 参照完整性】、【2.3 用户自定义完整性】、【2.4 触发器】、【2.5 综合案例】和【3.1 用户标识与鉴别】、【3.2 自主存取控制】、【3.3 视图机制在自主存取控制上的应用】、【3.4 Public角色在安全性中的应用】、【3.8 综合案例】的基础上,上机前请预习以下内容,并在空白处填写相应的步骤或命令。 1. 使用SCHOOL数据库
1) 创建一张新表CLASS,包括Class_id(varchar(4)),Name(varchar(10)),Department
(varchar(20))三个属性列,其中Class_id为主码; create table class
(Class_id varchar(4) primary key, Name varchar(10),
Department varchar(20) )
2) 执行两次相同的插入操作(’0001’,’01csc’,’cs’),结果如何; insert
into CLASS
values('0001','01CSC','CS')
第一次插入:第二次插入:
2. 使用SQL命令创建一张学生互助表,要求:包括学生编号、学生姓名、学生帮助对象的
编号,每个学生有且仅有一个帮助对象,帮助的对象必须是已存在的学生。 create table 学生互助表 (sid varchar(10) primary key, sname varchar(30),
s_id varchar(10) unique,
foreign key (s_id) references 学生互助表(sid) );
12
《数据库原理》实验 班级: 学号: 姓名:
3. 使用STC数据库,修改设置,完成以下2种不同的要求,请写出对应的语句或简述操作
过程:
1) 当更新、删除STU表中记录时,若SC表中有此学生的记录,则拒绝; Alter table sc
Add constraint c1 foreign key(sno) references stu(sno) On update no action On delete no action
2) 当更新、删除STU表中记录时,若SC表中有此学生的记录,则自动更新或删除; Alter table sc
Add constraint c2 foreign key(sno) references stu(sno) On update cascade On delete cascade
4. 使用SQL命令完成以下任务:
1) 创建Worker表(表结构见指导书P73) create table worker (number char(5),
name char(8) constraint U1 unique, sex char (1),
sage int constraint U2 check (sage<=28), deapartment char (20),
constraint PK_worker primary key(number) )
2) 定义约束U1、U2,其中U1规定Name字段取值唯一,U2规定sage字段上限是28; 3) 插入一条合法记录; insert
into worker
values('123','小明','m',20,'cs')
4) 插入一条违反U2约束的记录,简述观察到的结果如何?并分析原因; insert
into worker
values('123','小明','m',29,'cs')
原因:sage的值必须<=28。 5) 去除U1约束;
13
《数据库原理》实验 班级: 学号: 姓名: alter table worker drop constraint U1;
6) 修改约束U2,令sage的值大于等于0; alter table worker drop constraint U2; alter table worker
add constraint U2 check (sage>=0); 7) 创建规则rule_sex,规定更新或插入的值只能是M或F,并绑定到Worker的sex字段; Go
Create Rule rule_sex as @value in('F','M') Go
exec sp_bindrule rule_sex,'Worker.[sex]';
8) 插入2条记录,一条满足规则rule_sex,一条违反规则,观察结果。 Insert into Worker
values ('00005','小李','m',15,'科技部')
Insert into Worker
values ('00005','小李','a',15,'科技部')
5. 使用查询分析器创建触发器并测试,请写出相应的语句:
1) 为Worker表创建触发器T1,当插入或更新表中数据时,保证所操作记录的sage大于
0;
create trigger t1 on worker
for insert,update as
if(select sage from inserted)<1 rollback transaction
2) 为Worker表创建触发器T2,禁止删除编号为00001的记录; create trigger t2 on worker for delete as
if(select number from deleted)= '00001' rollback transaction
3) 为Worker表创建触发器T3,要求更新一个记录时,表中记录的sage要比老记录的
sage的值大。
14