| 系别 | 计算机与信息工程系 | 班级 | 学号 | 姓名 | |||||||
| 课程名称 | 数据库系统应用 | 实验日期 | |||||||||
| 实验名称 | 实验二 表操作和数据完整性定义 | 成绩 | |||||||||
| 实验目的: 1.掌握表结构设计中各种数据类型的应用; 2.熟练掌握用SSMS和create table语句创建表与定义完整性约束; 3.巩固insert、update、delete语句的使用; 4.掌握数据库导入、导出操作和数据库关系图的创建; 5.熟练掌握索引与视图的创建和应用。 | |||||||||||
| 实验条件: 连在局域网中的微机1台、SQL Server 2008 | |||||||||||
| 实验内容与步骤: 请按顺序完成下面各题: 1.创建图书管理数据库XXX(用自己的名字的缩写作为数据库名),按照下面的要求,在其中创建三个表:“图书”、“读者”、“借阅”。 (1)各个表应含有如下各个字段,要求为各个字段合理选择数据类型、长度等。 图书:书号、ISBN、书名、作者、出版社、出版年、状态、书库 读者:借书证号、类别、已借书数、最多借书数、编号、姓名、系别、密码 借阅:借书证号、书号、借出日期、还书日期 (2)用SSMS创建“图书”表,要求定义主键,为“状态”定义默认值为“未借”,定义一个CHECK约束:图书的状态只能是“借出”、“未借”两种状态之一。 (3)用SSMS创建“读者”表,要求定义主键,并定义一个CHECK约束:借书证号必须是6位数字。 (4)用CREATE TABLE语句创建“借阅”表,要求定义主键和外键。该表的主键是“书号”,外键有两个,一个是“书号”,参照“图书”表的主键,另一个是“借书证号”,参照“读者”表的主键。并定义一个CHECK约束:借书证号必须是6位数字。 2.用SSMS向“图书”和“读者”表中分别添加2条记录。 3.用insert语句向“借阅”表中添加2条记录。 INSERT INTO [dbo].[借阅] ([借书证号] ,[书号] ,[借出日期] ,[还书日期]) VALUES (111111 ,1 ,'2012/11/1' ,'2012/12/1') GO 4.执行下面的update语句,说明该语句的作用是: ____某个读者借的书数 Update 读者 set 已借书数=( select count(*) from 借阅 where 借书证号=读者.借书证号 ) 5.新建数据库new,将数据库XXX中的三个表导出到new中。 6.创建books数据库的数据库关系图。 7.在数据库XXX中 (1)执行语句:ALTER TABLE 借阅 ADD id int identity(1,1); 回答问题:id列被称为什么列? 答:序号列,代表当前是第几列。 (2)执行语句:Select * from借阅 记录id 列中现有哪些值: 答:1,2 (3)写出delete语句,删除“借阅”表中的第一条记录; delete from 借阅 where id=1; (4)写出truncate table语句,删除“借阅”表中全部记录。 TRUNCATE TABLE 借阅; 8. 附加teaching数据库,在teaching数据库中完成索引操作 (1)查看student表上已有哪些索引,记录各个索引的索引名以及其依据的是哪一列。 IX_student_1非聚簇唯一索引 依据sname列, PK__student__07020F21聚簇索引 依据studentno列 (2)在student表上新建一个按姓名的非聚集索引,然后在查询分析器中执行下面的语句,查看这些查询的执行计划(并抓图),说明其分别运用了哪些索引。 select studentno,sname from student where sname like '%王' 非聚簇索引 Tablesname select studentno,sname from student where studentno = '0805101 聚簇索引PK__student__07020F21 9.在teaching数据库中完成视图操作 (1)执行如下创建视图的语句: Create view credit_of_student as select student.studentno,sname, course.credit from student ,score ,course where student.studentno= score.studentno and score.courseno= course.courseno 回答问题:该视图有几个基表?分别是? 答:两个;student表和course表 (2)执行如下语句,记录是否成功执行,说明其原因: Insert into credit_of_student (studentno,credit) values('08050288',5); 不能: 原因:视图或函数'credit_of_student' 不可更新,因为修改会影响多个基表。 update credit_of_student set credit=5 where studentno='08050203'; 可以 | |||||||||||
| 实验总结(结论或问题分析): 这次比较难,因为没有提前预习导致在做的过程中进度比较慢,虽然按时完成了实验内容但也认识到提前预习的重要性,最后还是完成了任务,掌握用SSMS和create table语句创建表与定义完整性约束;巩固insert、update、delete语句的使用;掌握数据库导入、导出操作和数据库关系图的创建;熟练掌握索引与视图的创建和应用。 | |||||||||||