搜索
您的当前位置:首页正文

数据库原理及应用实验书

来源:二三娱乐
数据库原理及应用实验书 -- SQL Server 2000

实验一 用E-R图设计数据库 1. 实验目的

1) 熟悉E-R模型的基本概念和图形的表示方法。 2) 掌握将现实世界的事物转化成E-R图的基本技巧。 3) 熟悉关系数据模型的基本概念。

4) 掌握将E-R图转化成关系表的基本技巧。 2. 实验内容

1) 根据需求确定实体,属性和联系。 2) 将实体,属性和联系转化为E-R图。 3) 将E-R图转化为表。

3. 实验步骤

1) 设计能够表示出班级与学生关系的数据库。 ①确定班级实体和学生实体的属性。

②确定班级和学生之间的联系,给联系命名并指出联系的类型。 ③确定联系本身的属性。

④画出班级与学生关系的E-R图。

⑤将E-R图转化为关系模式,写出各关系模式并标明各自的主码或外码。 2) 设计能够表示出顾客与商品关系的数据库。 ①确定顾客实体和商品实体的属性。

②确定顾客和商品之间的联系,给联系命名并指出联系的类型。 ③确定联系本身的属性。

④画出顾客与商品关系的E-R图。

⑤将E-R图转化为关系模式,写出表的关系模式并标明各自的主码或外码。 3) 设计能够表示学校与校长关系的数据库。 ①确定学校实体和校长实体的属性。

②确定学校和校长之间的联系,给联系命名并指出联系的类型。 ③确定联系本身的属性。

④画出学校与校长关系的E-R图。

⑤将E-R图转化为关系模式,写出表的关系模式并标明各自的主码或外码。 4) 设计能够表示出房地产交易中客户,业务员和合同三者之间关系的数据库。 ①确定客户实体,业务员实体和合同实体的属性。

②确定客户,业务员和合同三者之间的联系,给联系命名并指出联系的类型。 ③确定联系本身的属性。

④画出客户,业务员和合同三者关系E-R图。

⑤将E-R图转化为关系模式,写出表的关系模式并标明各自的主码或外码。 5) 学生之间相互交流各自设计的数据库。

实验二 确定表中的关键字

1. 实验目的

1) 正确理解候选关键字,主关键字,组合关键字,外关键字的基本概念。 2) 能够正确判断给定的表中各种类型的关键字。

3) 在设计数据库时能正确指定各种类型的关键字,知道如何实施数据完整性。 2. 实验内容

1) 复习候选关键字,主关键字,外关键字,组合关键字以及数据完整性的基本概念。

2) 在给出的部门表和员工表中能正确标识出各种类型的关键字。 3. 实验步骤

1) 写出候选关键字,主关键字,组合关键字,外关键字,实体完整性,域完整性,参照完整性的定义。

已知部门表和员工表分别见表2-1和表2-2

表2-1部门表

部门代码 0001 0002 0003 部门名 负责人 地点 生产部 李华江 浙江杭州 销售部 张丽 浙江宁波 市场部 王欣 浙江温州 表2-2员工表

员工代码 200001 200002 200003 200004 姓名 家庭住址 王华 杭州 李想 富阳 张丽 杭州 李华江 萧山 联系电话 86960986 85438769 67893542 82849873 邮政编码 310006 310010 310017 310101 部门代码 0001 0003 0002 0001 2) 确定部门表和员工表中的候选关键字,并陈述理由。 3) 选择部门表和员工表的关键字。

4) 在部门表和员工表的结构中标注主关键字。

5) 在员工表中确定可能的组合关键字,并陈述理由。 6) 确定在部门表和员工表中共有的属性。 7) 指出哪个表中的属性是外关键字。 8) 确定哪个表是主表,哪个表是从表。

9) 部门表和员工表是如何通过关键字实施数据完整性的。

实验三 关系规范化

1. 实验目的

1) 了解函数依赖的基本概念。

2) 能正确判断某一关系是属于第几范式。 3) 掌握规范化范式的方法。 2. 实验内容

1) 复习函数依赖,数据规范化,范式的基本概念以及各级范式的判别标准。 2) 判断给定的表满足哪级范式的条件。

3) 将给定的表转换成满足特定等级范式条件的表。 3. 实验步骤

1) 写出函数依赖,数据规范化,范式的定义以及各级范式的判别标准。

2) 有表3-1所示的项目表1,判断其是否满足第一范式的条件,并说明理由。

表3-1 项目表1

项目代码 职员代码 P27 P51 E101 P20 P27 E305 P22 P51 E508 P27

3) 有表3-2所示的项目表2,判断其是否满足第二范式的条件,并说明理由。

表3-2 项目表2

项目代号 职员代码 P27 E101 P27 E305 P51 E508 部门 系统集成部 财务部 行政办公室 累计工作时间 90 10 NULL 部门 系统集成部 累计工时间 90 101 60 109 98 NULL 72 销售部 行政办公室 P51 P20 P27 E101 E101 E508 系统集成部 系统集成部 行政办公室 101 60 72 4) 有表3-3所示的职员表,判断其是否满足第三范式的条件,并说明理由。

表3-3 职员表

职员代码 E101 E305 E402 E508 E607 E608 部门 系统集成部 财务部 销售部 行政办公室 财务部 财务部 部门负责人代码 E901 E909 E909 E908 E909 E909 5) 有表3-4所示的项目表3,判断其是否满足第三范式的条件,并说明理由。

表3-4 项目表3

项目代码 P2 P5 P6 P3 P5 P5 职员代码 E1 E2 E3 E4 E4 E1 职员姓名 李华玉 陈家伟 张勤 谢成权 谢成权 李华玉 累计工作时间 48 100 15 2505 75 40 6) 将项目表1转换成满足第一范式条件的表。 7) 将项目表2转化成满足第二范式条件的表。 8) 将职员表转换成满足第三范式条件的表。 9) 将项目表3转换成满足BCNF条件的表。 10) 非规范化数据带来的不利影响是什么?

实验四 创建SQL Server 2000数据库和表

1. 实验的目的

1) 熟悉企业管理器环境。

2) 掌握创建数据库和表的操作。

2. 实验内容

1) 熟悉SQL Server 2000 企业管理器环境。 2) 创建XSCJ数据库。

3) 在XSCJ数据库中创建学生情况表XSQK,课程表KC,学生成绩表XS_KC。 4) 在XSQK、KC、XS_KC表中输入数据。

3. 实验步骤

1) 启动SQL Server企业管理器,打开“SQL Server Enterprise Mananger”窗口,并在左边的目录树结构中选择“数据库”文件夹。 2) 选择“操作”菜单中的“新建数据库”命令,打开 “数据库属性” 对话框,并在 “名称”框内输入数据库名称XSCJ。

3) 单击“确定”按钮,完成XSCJ数据库的创建。

4) 打开刚才创建的 “XSCJ” 文件夹,并在“SQL Server Enterprise Mananger”窗口的右边窗口中选择“表”对象。

5) 选择“操作”菜单中的“新建表”命令,打开SQL Server的表编辑器窗口。 6) 根据表4-1所示的表结构增加新列。

表4-1 学生情况表XSQK的结构

列名 学号 姓名 性别 出生日期 专业名 所在系 联系电话 数据类型 长度 Char 6 Char 8 Bit 1 smalldatetime 4 Char 10 Char 10 char 11 是否允许为空值 N N N N N N Y 默认值 男1,女0 说明 主键 7) 点击快捷工具栏上的快捷按钮,在弹出的“选择名称”对话框中输入表名XSQK,然后单击“确定”按钮,关闭表编辑器窗口,完成新表的创建。

8) 打开“表”对象,在“SQL Server Enterprise Manager”窗口的右边窗口中选择刚才创建的“XSQK”表。

9) 选择“操作”菜单中的“打开表”子菜单下的“返回所有行”命令,打开表的数据记录窗口。

10) 输入的学生情况数据记录见表4-2。 姓名 性别 出生日期 专业 所在系 联020101 020102 020103 020104 020105 020201 020202 020203 020204 杨颖 方露露 俞奇军 胡国强 薛冰 秦盈飞 董含静 陈伟 陈新江 0 0 1 1 1 0 0 1 1 1980-7-20 1981-1-15 1980-2-20 1980-11-7 1980-7-29 1981-3-10 1980-9-25 1980-8-7 1980-7-20 计算机应用 计算机应用 信息管理 信息管理 水利工程 电子商务 电子商务 电子商务 房建 计算机 计算机 计算机 计算机 水利系 经济系 经济系 经济系 水利系 88297147 88297147 88297151 88297151 88297152 88297161 88297062 88297171 88297171 表4-2 学生情况记录

11) 同理建课程表KC,表的结构见表4-3所示,表的内容见表4-4所示。

表4-3 课程表KC的结构

列名 课程号 课程名 教师 开课学期 学时 学分 数据类型 Char Char Char Tinyint TinyintC Tinyint 长度 是否允许为空值 3 N 20 N 10 1 1 N 表4-4 课程表记录

课程号 101 102 103 104 105 106 107 108 课程名 计算机原理 计算方法 操作系统 数据库原理及应用 网络基础 高等数学 英语 VB程序设计 教师 陈红 王颐 徐格 应对刚 吴江江 孙中文 陈刚 赵红韦 开课学期 学时 学分 2 45 3 3 45 3 2 60 4 3 75 5 4 45 3 1 90 6 1 90 6 3 70 5 默认值 60 说明 主键 只能1-6 12) 同理建成绩表XS_KC,表的结构见表4-5所示,表的内容见表4-6所示。

表4-5 成绩表XS_KC的结构

列名 数据类型 长度 是否允许为空值 默认值 说明 学号 Char 课程号 Char 成绩 Tinyint 6 3 1 N N 外键 外键 0-100之间 表4-6 成绩表XS_KC的记录 学号 020101 020101 020101 020102 020102 020104 020202 020202 020203 020204 实验五 查询数据库 1.实验目的

1) 熟悉SQL Server 2000查询分析器环境。

2) 掌握基本的SELECT查询及其相关子句的使用。

3) 掌握复杂的SELECT查询,如多表查询、子查询、连接和联合查询。 2.实验内容

1) 启动SQL Server 2000 查询分析器环境。 2) 涉及多表的简单查询。 3) 涉及多表的复杂查询。 3. 实验步骤

1) 启动SQL Server查询分析器,打开“SQL查询分析器”窗口。

2) 在“SQL查询分析器”窗口中选择要操作的数据库,如“XSCJ”数据库。 3) 在KC表中查询学分低于3的课程信息,并按课程号升序排列。 在查询命令窗口中输入以下SQL查询命令并执行: SELECT * FROM KC WHERE KC.学分<3 ORDER BY 课程号

课程号 101 102 107 101 102 107 103 108 103 103 成绩 85 87 88 58 63 76 55 80 57 71 4) 在XS_KC表中按学号分组汇总学生的平均分,并按平均分的降序排列。 SELECT 学号,平均分=AVG(成绩) FROM XS_KC GROUP BY 学号

ORDER BY 平均分 DESC

5) 在XS_KC表中查询选修了3门以上课程的学生学号。 SELECT 学号 FROM XS_KC GROUP BY 学号 HAVING COUNT(*)>3

6) 按学号对不及格的成绩记录进行明细汇总。 SELECT 学号,课程号,成绩 FROM XS_KC WHERE 成绩<60 ORDER BY 学号

COMPUTE COUNT(成绩) BY 学号

7) 分别用子查询和连接查询,求107号课程不及格的学生信息。 用子查询:

SELECT 学号,姓名,联系电话 FROM XSQK WHERE 学号 IN ( SELECT 学号 FROM XS_KC

WHERE 课程号='107'AND 成绩<60) 用连接查询:

SELECT 学号,姓名,联系电话 FROM XSQK JOIN XS_KC ON XSQK.学号=XS_KC.学号 WHERE课程号='107'AND 成绩<60

8) 用连接查询在XSQK表中查询住在同一寝室的学生,即其联系电话相同 SELECT A.学号,A.姓名,A.联系电话 FROM XSQK A JOIN XSQK B ON A.联系电话=B.联系电话 WHERE A.学号!=B.学号 请自已完成以下的查询:

9) 查询XSQK表中所有的系名。 10) 查询有多少同学选修了课程。 11) 查询有多少同学没有选课。

12) 查询与杨颖同一个系的同学姓名。

13) 查询选修了课程的学生的姓名、课程名与成绩。 14) 统计每门课程的选课人数和最高分。

15) 统计每个学生的选课门数和考试总成绩,并按选课门数的降序排列。 实验六 创建和使用视图 1.实验目的

1) 掌握视图的创建、修改和删除。 2) 掌握使用视图来访问数据。 2.实验内容

1) 创建一个简单的视图,查询101号课程不及格的学生信息。 2) 修改简单视图,查询107号课程成绩介于70-90的学生信息。 3) 使用视图访问数据。 4) 删除所创建的视图。 3.实验步骤

1) 启动SQL Server企业管理器,打开“SQL Server Enterprise Manager”窗口。

2) 选择要创建视图的数据库文件夹,如“XSCJ”文件夹,并在右边的对象窗口中选择其中的“视图”对象。

3) 选择“操作”菜单中的“新建视图”命令,打开SQL Server的视图设计窗口。 4) 在“数据源关系图窗口”中单击鼠标右键,打开“添加表”窗口,添加XSQK表和XS_KC表。

5) 选择XSQK表的学号和姓名列,选择XS_KC表的课程号和成绩列,作为视图的显示列。

6) 设置学号列的排序类型为升序。

7) 设置查询条件:先在课程号行的“准则”列设置条件为“=‘101'”,然后在成绩行的“准则”列设置条件为“<60”。

8) 点击快捷工具栏上的快捷按钮,在弹出的“另存为”对话框中输入视图名,如“v_101不及格”,然后单击“确定”按钮,关闭视图设计窗口,完成视图的创建。

9) 在“v_101不及格”视图上单击鼠标右键,在弹出的快捷菜单中选择“设计视图”命令,修改视图定义。

10) 添加数据源KC表,以显示107号课程的课程名称。打开“添加表”窗口,选择“KC” 表,系统自动为KC表和XS_KC表建立基于课程号的内连接。 11) 选择KC表中的课程名列。

12) 添加查询条件:修改课程号行中“准则”列的条件为“=‘107'”;修改成绩行中“准则”列的条件为“>=70”,并复制该行,去掉“输出”列中的复选,并修改“准则”列的条件为“<=90”。

13) 点击快捷工具栏上的快捷按钮,关闭视图设计窗口,保存对视图的修改。 请自已创建以下视图:

14) 创建一个简单视图,查询“计算机系”学生的信息。

15) 创建一个简单视图,统计每门课程的选课人数和最高分。

16) 创建一个复杂视图,查询与“俞奇军”住在同一寝室的学生信息,即其联系电话相同。

17) 创建一个复杂视图,查询选修了课程的同学的姓名,课程名及成绩。 实验七 创建和使用索引 1.实验目的

1) 熟悉SQL Server 2000 索引管理器。 2) 掌握索引的创建和使用。 3) 掌握对索引的优化操作。 2.实验要求

1) 使用索引管理器为XS-KC表创建索引IX-XS-KC。 2) 使用强制索引查询数据。 3) 用索引优化向导优化索引。 3.实验内容

1) 用索引管理器创建XS_KC表的索引IX_XS_KC。

①选择要创建索引的数据库文件夹,如“XSCJ”文件夹,并在右边的对象窗口中选择并打开其中的“表”对象。

②选择所要创建索引的表,如“XS_KC”表,并从“操作”菜单中选择“所有任务”子菜单下的“管理索引”命令,打开SQL Server 的索引管理器窗口。 ③单击其中的“新建”按钮,创建新的索引,并为其设置相应的属性。

为XS_KC 表创建一个基于“课程号”列和“成绩”列的索引IX_XS_KC,其中课程号列按升序排列,成绩列按降序排列。

首先,单击“新建”按钮,此时系统打开“新建索引”口,在其中的“列名”列表框中选择“课程号”项。再选择“成绩”项,并选中其后的“排列次序(DESC)”项,使成绩列按降序排列。

接着,选择“填充因子”项,其值保留系统默认的80,并选中“填充索引”选项,使索引中间页具有与叶级页相同的填充程度。 最后,将索引名设置为IX_XS_KC。

④单击“确定”按钮,完成新索引的创建。回到索引管理器窗口。 2) 强制使用刚才创建的索引查询数据。

①启动SQL Server查询分析器,打开“SQL 查询分析器”窗口,并在其右上脚的下拉框中选择要操作的“XSCJ”数据库。

②强制使用“IX_XS_KC索引查询所有课程的及格成绩记录。 在查询命令窗口中输入以下SQL查询命令并执行: SELECT 学号 ,课程表, 成绩

FROM XS_KC

WITH (INDEX (IX_XS_KC) ) WHERE 成绩>=60

观察一下显示出来的数据是否有序

3) 使用索引优化向导优化索引。

索引优化向导可以根据给定的工作负荷,通过使用查询优化器分析该工作负荷的查询。此时为数据库推荐最佳索引组合,而为了记录工作负荷,必须使用SQL事件探查创建一个跟踪记录工作负荷。

①启动SQL Server事件探查器,打开“SQL事件探查”窗口。

②选择“文件“菜单中”新建“子菜单下的”跟踪“命令”打开“跟踪属性”对话框,新建一个跟踪。

③设置跟踪名为“INDEX_TRACE”,把跟踪保存为负荷文件“INDEX_TRACE”。然后单击运行按纽开始跟踪。 ④切换到SQL查询分析器窗口,在其中的查询命令中输入以下SELECT查询语句: SELECT A.学号,A.姓名,D.课程名,C.成绩,A.联系电话 FROM XSQK A JOIN XSQK B ON A.联系电话=B.联系电话

JOIN XS_KC C ON A.学号=C.学号 JOIN KC D ON D.课程号=C.课程号 WHERE A.姓名='俞奇军' and B.姓名!='俞奇军' ⑤切换回SQL事件探查起窗口,此时在窗口中列出了刚刚执行的查询语句的跟踪信息。单击快捷工具栏的快捷键按钮暂停跟踪。 其中,注意列的含义如下:

1CPU列:表示查询所占用的CPU时间,单位为毫秒。 2Duration列:表示查询执行的时间 ,单位为毫秒。

3Reads列:表示查询所引起服务器执行的物理磁盘读取次数。 4Writes列:表示查询所引起服务器执行的物理磁盘写入次数。

⑥选择“工具”菜单中的“索引优化向导”命令,打开“索引优化向导”对话框。开始优化索引。

⑦切换到SQL事件探查窗口,然后点击快捷工具栏上的快捷按钮继续跟踪 ⑧切换到SQL查询分析器窗口,再次执行刚才的SELECT查询语句。 ⑨切换回SQL事件探查起窗口,此时在窗口中又列出了优化索引执行同样的查询语句的跟踪信息。

我们可以看到,优化索引后,读盘次数减少了,执行时间变短了。比较图中两次查询的执行情况,很显然,经过索引优化后,查询性能有了很大的提高。如果全换成大型表,优化效果将更加明显。

⑩单击快捷工具栏上的快捷按钮停止跟踪,并关闭“SQL事件探查窗口” 实验八 创建并使用约束和默认值对象 1. 实验目的

1) 掌握约束的定义和删除操作。 2) 掌握默认值对象的定义和删除。

2.实验内容

1) 使用命令删除XSQK表中性别的约束,然后再创建。

2) 使用界面方式创建默认值对象,并绑定到列,然后再删除。 3.实验步骤

1)删除并重建XSQK表中性别的约束。

①打开“SQL 查询分析器”窗口,选择要操作的数据库,如“XSCJ”数据库。 ②在命令窗口中输入以下SQL命令并执行,删除XSQK表中性别列的约束。 ALTER TABLE XSQK

DROP CONSTRAINT CK_XSQK_性别

③在命令窗口中输入以下SQL命令并执行,查询创建刚才删除的性别列约束,使性别只能取值为1(表示男)或者0(表示女)。 ALTER TABLE XSQK

ADD CONSTRAINT CK_ XSQK_性别 CHECK (性别=1 OR性别=0) 2)定义新的默认值对象。

①启动SQL Server企业管理器,打开“SQL Server Enterprise Manager”窗口。 ②选择要创建默认值对象的数据库文件夹,如“XSCJ”文件夹,并在右边的对象窗口中选择其中的“默认”对象。

③选择“操作”菜单中的“新建默认”命令,打开“默认属性”对话框,并输入名称“DFO_出生日期”和值 1980-1-1

注意:'1980-1-1'前后有单引号(')括起来,表示其为日期类型。 ④单击“确定”按钮,完成默认值对象的定义。 3)将默认值对象绑定到XSQK表的出生日期列。

①打开“默认”对象,并选中刚才定义的默认值对象DFO_出生日期。 ②选择“操作”菜单中的“属性”命令,打开“默认属性”对话框。 ③单击“绑定列”按钮,打开“将默认值绑定到列”的对话框。 ④单击“确定”按钮,完成到列的绑定。 4)使用值对象为新插入行的出生日期列设置值。

①在对象窗口中选择并打开其中的“表”对象,选中XSQK表。 ②选择“操作”菜单中“打开表”子菜单下的“返回所有行”命令,打开表的数据记录窗口。

③在表中插入一行新记录,其中出生日期列不填,其值由刚才绑定的默认值对象设定。

如果在设置默认值对象属性时,其值前后没有加单引号('),那么在插入出生日期列的默认值时,该值就不会是“1980-1-1”了。

④关闭数据记录窗口。

5)取消绑定并删除默认值对象。

①选择并打开“默认”对象,选中“DFO_出生日期”默认对象。 ②选择“操作”菜单中的“属性”命令,打开“默认属性”对话框。 ③单击“绑定列”按钮,打开“将默认值绑定到列”对话框。

④单击“确定”按钮,取消到列的绑定,关闭“默认属性”对话框。 ⑤选择“操作”菜单中的“删除”命令,打开“除去对象”对话框。 ⑥单击“全部除去”按钮,确定删除。 实验九 实现数据完整性 1.实验目的

1) 掌握域完整性的实现方法。 2) 掌握实体完整性的实现方法。 3) 掌握参照完整性的方法。 2.实验内容

1) 使用界面方式创建规则对象,并绑定到列,实现域完整性。 2) 为表添加一个标识列,实现实体完整性。 3) 为两表建立关联,实现参照完整性。 3.实验步骤 1) 实现域完整性

①启动SQL Server企业管理器,打开“SQL Server Enterprise Manager”窗口。 ②选择要创建规则对象的数据库文件夹,并在右边的对象窗口中选择其中的“规则”对象。选择“操作”菜单中的“新建规则”命令,打开“规则属性”对话框。 ③设置形如“(区号)电话号码”的联系电话格式检查规则,单击“确定”按钮,完成规则对象的定义。

④打开“规则”对象,并选中刚才定义的规则对象RO_联系电话格式。选择“操作”菜单中的“属性”命令,打开“规则属性”对话框。

⑤单击“绑定列”按钮,打开“将规则绑定到列”对话框,完成到列的绑定,关闭“规则属性”对话框。

⑥在对象窗口中选择并打开其中的“表”对象,选中XSQK表并打开。 ⑦在表中分别插入两行新记录,其中一行的联系电话格式为指定的格式,另一行的联系电话格式为非法格式。

当插入第一行时,系统成功地插入了新数据行,但无信息返回;而在插入第二行时系统提示错误信息,拒绝接受非法格式的联系电话,从而保证了域完整性。 ⑧单击“确定”按钮,取消插入,并关闭表的数据记录窗口。

2)实现实体完整性

①在对象窗口中选择并打开其中的“表”对象,选中KC表。 ②选择“操作”菜单中的“设计表”命令,打开表编辑器窗口。 ③添加一个标识列,种子值为1,递增量也为1。

④点击快捷工具拦上的快捷按钮,完成标识列的添加,然后关闭编辑窗口。 ⑤选中KC表并打开表的数据记录窗口。

可以看到,系统自动为每行的标识列填充了值,并从1开始,依次递增,这样,表中的每一数据行都可以由标识列唯一标识,实现了实体完整性。 ⑥关闭表的数据记录窗口。 3)实现参照完整性

①在对象窗口中选择打开其中的“表”对象,选中XS_KC表。 ②先择“操作”菜单中的“设计表”命令,打开表编辑器窗口。

③点击快捷工具拦上的快捷按钮,打开“属性”对话框的“关系”选项卡 ④为XSQK表和XS_KC表建立基于学号列的关系。

⑤选中XSQK表,并选择“操作”菜单中“打开表”子菜单下的“返回所有行”命令,打开表的数据记录窗口。

⑥将表中的值为“020101”的学号都修改为“020111”。

由于XSQK表中不存在值为“020111”的学号,所以系统提示错误信息,拒绝接受不存在的学号,从而保证了参照完整性。

⑦单击“确定”按钮,取消修改,并关闭表的数据记录窗口。 实验十 实现存储过程 1.实验目的

1) 掌握用户存储过程的创建操作。 2) 掌握用户存储过程执行操作。 3) 掌握用户存储过程的删除操作。 2.实验内容

1) 创建带输入参数的存储过程和嵌套调用的存储过程。 2) 执行所创建的存储过程。

3) 删除所有新创建的存储过程。 3.实验步骤

1) 创建带输入参数的存储过程。

①启动SQL Server查询分析器,打开“SQL查询分析器”窗口。选择要操作的数据库,如“XSCJ”数据库。

②在查询命令窗口中输入创建存储过程的CREATE PROCEDURE语句。

这里,我们创建一个带输入参数的存储过程proc_XSQK1,其中的输入参数用于接收课程号,默认值为“101”,然后在XS_KC表中查询该课成绩不及格的学生学号,接着在XSQK表中查找这些学生的基本信息,包括学号、姓名、性别和联系电话信息,最后输出。

③点击快捷工具栏上的快捷铵钮,对输入的CREATE PROCEDURE 语句进行语法分析。如果有语法错误,则进行修改,直到没有语法错误为止。 ④点击快捷工具拦上的快捷按钮,执行CREATE PROCEDURE语句。 2) 创建带嵌套调用的存储过程。

①在查询命令窗口中输入创建存储过程的CREATE PROCEDURE语句。

这里,我们创建一个带嵌套调用的存储过程proc_XSQK2。该存储过程也有一个输入参数,它用于接收授课教师姓名,默认值为“王颐”,然后嵌套调用存储过程proc_课程号,输出其所授课程的课程号,接着用此课程号来完成上一部分实验中所创建的存储过程proc_XSQK1的功能。相应的CREATE PROCEDURE语句如下: DECLARE @课程号char(3)

--嵌套调用存储过程proc_课程号 EXECUTE proc_课程号

@授课老师,@课程号 OUTPUT

--查询指定课程成绩不及格的学生的基本信息

SELECT XSQK.学号,XSQK.姓名,XSQK.性别,XSQK.联系电话 FROM XSQK ,XS_KC

WHERE XS_KC.课程号=@课程号 AND XS_KC.成绩<60

AND XSQK.学号=XS_KC.学号 PROC_课程号的存储过程如下: CREATE PROCEDURE PROC_课程号 @教师 CHAR(10)=‘王颐', @课程号码 CHAR(3) OUTPUT AS

SELECT @课程号码=课程号 FROM KC WHERE KC.教师=@教师

②点击快捷工具栏上的快捷按钮,对输入的CREATE PROCEDURE 语句进行语法分析。如果有语法错误,则进行修改,直到没有语法错误为止。 ③点击快捷工具栏上的快捷按钮,执行CREATE PROCEDURE语句。 3)执行所创建的二个存储过程

①在查询命令窗口中输入以下EXECUTE语句,执行存储过程proc_XSQK1。 EXECUTE proc_XSQK1 '101'

②点击快捷工具拦上的快捷按钮,执行存储过程。

③在查询命令窗口中输入以下EXECUTE语句,执行存储过程proc_XSQK2。 EXECUTE proc_XSQK2 DEFAULT

④点击快捷工具拦上的快捷按钮,执行存储过程。

4) 删除新建的存储过程

①在查询命令的窗口中输入DROP PROCEDURE语句和所有新创建的存储过程名。 DROP PROCEDURE

Proc_XSQK1,proc_XSQK2

②点击快捷工具上的快捷按钮,删除存储过程。 实验十一 实现触发器 1. 实验目的

1) 掌握触发器的创建、修改和删除操作。 2) 掌握触发器的触发执行。 3) 掌握触发器与约束的不同。 2. 实验要求

1) 创建触发器。

2) 触发器执行触发器。

3) 验证约束与触发器的不同作用期。 4) 删除新创建的触发器。 3. 实验内容 1) 创建触发器

①启动SQL Server 查询分析器,打开“SQL查询分析器”窗口,选择要操作的数据库,如“XSCJ”数据库。

②在查询命令窗口中输入以下CREATE TRIGGER语句,创建触发器。 为XS_KC表创建一个基于UPDATE操作和DELETE操作的复合型触发器,当修改了该表中的成绩信息或者删除了成绩记录时,触发器激活生效,显示相关的操作信息。

--创建触发器

CREATE TRIGGER tri_UPDATE_DELETE_XS_KC ON XS_KC

FOR UPDATE,DELETE AS

--检测成绩列表是否被更新 IF UPDATE(成绩) BEGIN

--显示学号、课程号、原成绩和新成绩信息

SELECT INSERTED.课程号,DELETED.成绩AS原成绩, INSERTED.成绩AS原成绩 FROM DELETED ,INSERTED

WHERE DELETED.学号=INSERTED.学号

END

--检测是更新还是删除操作 ELSE IF COLUMNS_UPDATED( )=0 BEGIN

--显示被删除的学号、课程号和成绩信号

SELECT 被删除的学号=DELETED.学号,DELETED.课程号, DELETED.成绩AS原成绩 FROM DELETED END ELSE

--返回提示信息

PRINT ‘ 更新了非成绩列!'

③点击快捷工具栏上的快捷按钮,完成触发器的创建。 2) 触发触发器

①在查询命令窗口中输入以下UPDATE XS_KC语句,修改成绩列,激发触发器。 UPDATE XS_KC SET成绩=成绩+5 WHERE 课程号='101'

②在查询命令窗口中输入以下UPDATE XS_KC语句修改非成绩列,激发触发器。 UPDATE XS_KC

SET 课程号='113' WHERE 课程号='103'

③在查询命令窗口中输入以下DELETE XS_KC 语句,删除成绩记录,激发触发器。 DELETE XS_KC

WHERE 课程号='102'

3) 比较约束与触发器的不同作用期

①在查询命令窗口中输入并执行以下ALTER TABLE 语句,为XS_KC表添加一个约束,使得成绩只能大于等于0且小于等于100。 ALTER TABLE XS_KC

ADD CONSTRAINT CK_成绩

CHECK(成绩>=0 AND成绩<=100)

②在查询命令窗口中输入并执行以下UPDATE XS_KC语句,查看执行结果。 UPDATE XS_KC SET成绩=120

WHERE 课程号='108'

③在查询命令窗口中输入执行以下UPDATE XS_KC 语句,查看执行结果。 UPDATE XS_KC SET成绩=90

WHERE 课程号='108' 从这部分实验中,我们可以看到,约束优先于触发器起作用,它在更新前就生效,

以对要更新的值进行规则检查。当检查到与现有规则冲突时,系统给出错误消息,并取消更新操作。如果检查没有问题,更新被执行,当执行完毕后,再激活触发器。

4) 删除新创建的触发器

①在查询命令窗口中输入DROP TRIGGER 语句,删除新创建的触发器。 DROP TRIGGER tri_UPDATE_DELETE_XS_KC

②点击快捷工具栏上的快捷按钮,删除触发器。

*实验十二 实现事务和批 1. 实验目的

1) 了解事务的ACID属性。 2) 掌握事务和批的工作原理。 3) 了解事务处理与批处理。 2. 实验内容

1) 事务处理与批处理的关系。

2) 如何把一个事务处理封闭在单个的批处理中。 3) 用条件判断结构来实现。 3. 实验步骤

1) 把事务处理分散写进多个批处理通常不是一个好的设计思想。锁定问题会变得非常复杂,会带来可怕的性能干扰。

2) 通常情况下,应该把一个事务处理封闭在单个的批处理中。 下面还有一个更好的方法来编写这段程序:

BEGIN TRANSACTINON

INSERT PUBLISHERS(PUB_ID,PUB_NAME,CITY,STATE) VALUES(“1111”,“JOE AND MARY'S BOOKS”,“NOTRTHERN PLAINS”,“IA”) IF @@ERROR=0 BEGIN

PRINT ‘PUBLISHER INSERT WAS SUCCESSFUL CONTINUING。' UPDATE TITLES

SET PUB_ID=‘1111' WHERE PUB_ID=‘1234' DELETE AUTHORS WHERE STATE=‘CA' COMMIT TRANSACTION END

ELSE BEGIN

PRINT ‘PUBLISHER INSERT FAILEDROLLING BACK TRANSACTION' ROLLBACK TRANSACTION END

这个例子中最重要的一点在于事务处理属于一个简单的批处理了。 *实验十三 检测死锁 1.实验目的

1) 了解死锁的类型和其兼容性。 2) 了解死锁发生的情况。 3) 了解可锁定的资源。

4) 了解死锁的一般处理过程。 2.实验内容

1) 锁与并行查询执行相关的资源。 2) 如何查看进程信息。 3) 如何查看锁/对象信息。 4) 如何处理死锁。 3.实验步骤

1) 构造死锁,让锁现象发生。

先构造一个可能造成锁表的代码如下:

BEGIN TRANSACTION

INSERT publishers (pub_id,pub_name,city,state) VALUES(“1111”,“Joe and Mary's Books”,“Notrthern Plains”,“IA”) IF @@ERROR=0 BEGIN

PRINT ‘Publisher insert failedrolling back transaction' ROLLBACK TRANSACTION END

下面的代码对同一个表执行简单的查询操作,具体代码如下: select * from titles;

2)处理死锁的一般过程或步骤。 Sp_who:提供关于当前Microsoft SQL Server用户和进程信息。如:列出全部当前进程。

在SQL查询分析器的命令窗口中输入 sp_who

sp_lock:报告有关锁的信息

在SQL查询分析器的命令窗口中输入

sp_lock @spid1=从sp_who中查出的进程标识号

在企业管理器中打开“管理”文件夹下的当前活动,查看进程信息。 实验十四 实现安全管理 1.实验目的

1) 了解SQL Server 2000 的身份验证方法。 2) 掌握合法登录帐户的设置。 3) 掌握数据库用户的设置。 4) 掌握数据库角色的设置。 5) 掌握用户的权限管理方法。 2.实验内容

1) Windows和SQL Server2000身份验证的比较。 2) 设置登录帐户。 3) 设置数据库用户。 4) 设置数据库角色。 5) 设置数据库用户权限。 3.实验步骤

1) 使用企业管理器选择和设置身份验证模式

① 打开企业管理器,在“树”窗口中展开一个服务器组,然后选择希望设置身份验证模式的服务器。

② 在该服务器上单击鼠标右键,在弹出的菜单中选择命令“属性”,打开“属性”对话框。

③ 在属性对话框中选择“安全性”选项卡,在“身份验证”区域中选择下列身份验证模式之一。

· SQL Server和Windows:指定用户可以使用SQL Server身份验证和Windows身份验证连接到SQL Server。

· 仅Windows:指定用户只能使用Windows身份验证连接SQL Server。 ④ 单击“确定”按钮,即可完成身份验证模式的选择和设置。 2) 使用企业管理器创建登录账户

① 打开企业管理器,展开希望创建新的登录的服务器。 ② 展开文件夹“安全性”,在登录节点上单击鼠标右键。

③ 从弹出的菜单中选择“新建登录”,打开“新建登录”窗口。 ④ 在“新建登录”窗口的“常规”选项卡中进行如下配置: · 在“名称”文本框中输入一个SQL Server登录的账号名。

· 选择一种登录模式。

· 在“默认设置”区选择连接时默认的数据库XSCJ和语言。

⑤ 在“新建登录”窗口的“数据库访问”选项卡,选择允许登录账户访问的数据库和分配给登录账户的数据库角色。

⑥ 单击“确定”按钮,完成登录模式的创建。 3) 使用企业管理器新建数据库用户

① 打开企业管理器,在树形目录中展开指定的数据库节点。

② 选中该数据库节点的下一级节点“用户”,单击鼠标右键,在弹出的菜单中选择“新建数据库用户”。

4) 使用企业管理器创建数据库角色

① 打开企业管理器,在树形目录中展开指定的数据库节点。

② 选中该数据库节点的下一级节点“角色”,单击鼠标右键,在弹出的菜单中选择“新建数据库角色”。

③ 在弹出的“数据库角色属性-新建角色”对话框中,进行如下操作: · 输入名称:输入新建数据库角色的名称 · 选择角色类型:选择标准角色

· 添加用户:单击“添加”按钮向角色中添加用户 ④ 单击“确定”按钮,完成数据库角色的创建。 ⑤ 设置该数据库角色的权限。 5) 使用企业管理器管理对象权限

① 打开企业管理器,展开指定的数据库节点。

② 选中需要查看或修改权限的数据库对象,展开该库对象,在其中某一张表上单击鼠标右键,选择菜单命令“属性”,打开“表属性”对话框。

③ 在“表属性”对话框中单击“权限”按钮,打开权限选项卡,选择相应的访问权限。

? :授予权限,表示允许某个用户或角色对一个对象执行某种操作。

′ :禁止权限,表示在不撤销用户访问权限的情况下,禁止某个用户或角色对一个对象执行某种操作。

空:剥夺权限,表示不允许某个用户或角色对一个对象执行某种操作。

④ 还可以单击一个特定的用户或角色,然后单击“列”按钮,打开“列权限”对话框,将权限控制到字段的级别。

⑤ 单击“确定”按钮,完成对象权限的设置。 实验十五 实现数据转换 1.实验目的

1) 了解DTS的功能。

2) 掌握DTS导入、导出服务。

3) 了解DTS设计器的功能。 2.实验内容

1) 利用DTS的功能导出数据。 2) 利用DTS的功能导入数据。

3) 利用DTS设计器导入、导出数据。 3.实验步骤

1) 利用DTS向导导出数据

① 打开企业管理器,选择“工具”菜单下的“向导”命令,在弹出的窗口中,展开“数据转换服务”,然后选择DTS导出向导。

② 在“DTS导入/导出向导”的窗口中,选择要复制的数据源,分四部分: · 定义数据源的类型,选择“Microsoft OLE DB Provider for SQL Server” · 指定数据源所在的服务器

· 指定登录到服务器的用户的身份验证方式

· 选择要导出的数据所在的数据库,选择“xscj”数据库

③ 在选择目的窗口中,选择目的数据源的类型和存放位置。数据源的类型选择“Microsoft Excel 97_2000”,文件名取“xscjcopy”,设置完后按“下一步”。 ④ 选择要传输的数据的来源,选择时有三种方式: · 从源数据库复制表和视图 · 用一条查询指定要传输的数据

· 在SQL Server数据库之间复制对象和数据 不妨选择“用一条查询指定要传输的数据”,出现查询语句对话框,利用查询生成器生成:

SELECT 姓名,课程名,成绩 FROM XSQK JOIN XS_KC ON XSQK.学号=XS_KC.学号 JOIN SC ON SC.课程号= XS_KC.课程号 单击“下一步”

⑤ 保存、调度和复制包 数据的传输方式有三种:

· 立即运行:表示立即执行数据的导入/导出操作。 · 调度DTS包以便以后执行:可以指定数据传输操作执行的时刻和执行的频度。 · 用复制方式发布目的数据:表示将目的表用于复制。

保存DTS包:表示将定义好的数据传输过程以包的形式保存起来。 将上一步中定义好的包以“包1”的形式保存下来,并调度包,设置包执行时间。 2) 同理利用DTS向导向数据库导入数据,将1)题中导出的的数据作为数据源向数据库XSCJ中导入,并取名为XCXC表。 3) 利用DTS设计器导入、导出数据

① 打开企业管理器,在树形目录中展开数据转换服务节点,单击鼠标右键,选择“新建包”,打开DTS设计器,建立如1)中建立的“包1”

② 在连接工具栏上选择源数据源“Microsoft OLE DB Provider for SQL” 和目的数据源“Microsoft Excel 97_2000”。

③ 在任务工具栏上选择“数据转换任务”,使任务图标的一端连接源数据源,别一端指向目的数据源。

④ 选中任务图标,点击右键,打开“属性”对话框,输入源数据源,目的数据源,转换方式等。

⑤ 单击“确定”按钮,完成包的建立。

⑥ 在DTS设计器中单击“执行”按钮,执行包。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top