数据库实验书

更新时间:2024-02-29 16:27:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验1 SQL Server 2000安装及管理工具的使用

一、 实验目的

1. 了解SQL Server 2000安装对软、硬件的要求,学会安装方法。 2. 了解SQL Server的注册和配置方法。

3. 了解SQL Server 2000包含的主要组建及其功能。 4. 熟悉企业管理器和查询分析器的界面及基本使用方法。 5. 对数据库及其对象有一个基本了解。

二、 实验准备

1. 了解安装SQL Server 2000的软、硬件要求。

2. 了解SQL Server 2000支持的身份验证模式。Windows的两种服务帐户:本地系

统帐户和域用户帐户。

3. 了解SQL Server各组件的主要功能。

4. 对数据库、表和数据库对象有一个基本了解。 5. 了解在查询分析器中执行SQL语句的方法。

三、 实验内容及步骤

1. 根据软、硬件环境的要求,安装SQL Server 2000。

2. 通过“开始”→“程序”→Microsoft SQL Server→“服务管理器”,打开“SQL

Server服务管理器”窗口,选择SQL Server服务。并且通过该窗口“启动”和“停止”SQL Server服务。

3. 通过“开始”→“程序”→Microsoft SQL Server→“企业管理器”打开企业管

理器窗口。

4. 在企业管理器中,使用“注册向导”注册服务器。查看本地已注册的SQL Server。

搜索网络上的另一台计算机,并且注册该机上的SQL Server,注册时使用“Windows认证模式”或“用我的SQL Server账户信息自动登录”的连接方式。 5. 从SQL企业管理器中注销网络SQL Server。

6. 打开本地服务器的属性对话框,查看以下信息:产品名称、主机操作系统、产品

的版本、操作平台、主机内存等。

7. 利用企业管理器访问系统自带的pubs数据库。 (1) 以企业管理员的身份登录到企业管理器。

(2) 在企业管理器的树形目录中找到pubs数据库并展开,查看该数据库的所有对

象,如表、视图、存储过程、默认和规则等。

(3) 选择pubs数据库的“表”选项,在右窗口中将列出pubs数据库的所有表(包

括系统表和用户表),选择用户表titles表,右击鼠标,弹出快捷菜单,从中选择“打开表”→“返回所有行”菜单项,打开titles表,查看其内容。

8. 利用查询分析器访问pubs数据库的表。

(1) 通过“开始”→“程序”→Microsoft SQL Server→“查询分析器”方式运

行SQL Server查询分析器,或者在企业管理器中选择“工具”→“SQL查询分析器”菜单项,运行SQL Server查询分析器。

(2) 在查询分析器窗口中,选择“查询”→“更改数据库?”菜单项,或者单击

常用工具栏中的“更改数据库”下拉按钮,选择要操作的pubs数据库。

(3) 在查询分析器的编辑窗口中,输入以下代码:

SELECT type,avg(price) FROM titles

WHERE royalty=10 GROUP BY type

(4) 选择查询分析器的“查询”→“分析”菜单项,或者单击常用工具栏上“分

析查询”按钮

,查询分析器将对输入的代码进行语法分析,并由消息窗格

给出分析结果报告。

(5) 选择查询分析器的“查询”→“执行”菜单项,或者单击常用工具栏上“执

行查询”按钮

,SQL Server将编译窗口中的代码,并在结果窗格中显示查

询结果,如图1-1所示。

实验2 SQL Server 数据库的管理

一、 实验目的

1. 了解SQL Server数据库的逻辑结构和物理结构的特点。 2. 学会使用企业管理器对数据库进行管理。

3. 学会使用Transact-SQL语句对数据库进行管理。

二、 实验准备

1. 确定能够创建数据库的用户是系统管理员,或是被授权使用CREATE DATABASE语

句的用户。

2. 确定要创建的数据库名、所有者(即创建数据库的用户)、数据库大小(最初的

大小、最大的大小、是否允许增长即增长的方式)和存储数据的文件。 3. 了解常用的创建数据库方法。

三、 实验内容及步骤

1. 在企业管理器中创建studentsdb数据库。 (1) 运行SQL Server管理器,启动企业管理器,展开服务器“(LOCAL)(Windows NT)”。 (2) 右击“数据库”项,在快捷菜单中选择“新建数据库”菜单项。在新建数据

库对话框的名称文本框中输入学生管理数据库名studentsdb。

2. 选择studentsdb数据库,在其快捷菜单中选择“属性”菜单项,查看“常规”、

“数据文件”、“事务日志”、“文件组”、“选项”和“权限”页面。 3. 打开studentsdb数据库的“属性”对话框,在“数据文件”选项卡中修改studentsdb

数据文件的“分配空间”大小为2MB。指定“最大文件大小”为5MB.在“事务日志”选项卡中修改studentsdb数据库的日志文件的大小在每次填满时自动递增5%。

4. 启动查询分析器,在查询分析器中使用Transact-SQL语句CREATE DATABASE创建

studb数据库。然后通过系统存储过程sp_helpdb查看系统中的数据库信息。 5. 在查询分析器中使用Transact-SQL语句ALTER DATABASE修改studb数据库的设

置,指定数据文件大小为5MB,最大文件大小为20MB,自动递增大小文1MB。 6. 在企业管理器中为studb数据库增加一个日志文件,命名为studb_Log2,大小为

5MB,最大文件大小为10MB。

7. 使用企业管理器将studb数据库的名称更改为student_db。

8. 使用Transact-SQL语句DROP DATABASE删除student_db数据库。 9. 在企业管理器中删除studentsdb数据库。

四、 实验思考

新数据库是否包含SQL Server在主设备中生成的模型数据库内的所有对象?

实验3 SQL Server 数据表的管理

一、 实验目的

1. 学会使用企业管理器和Transact-SQL语句CREATE TABLE和ALTER TABLE创建和

修改表。

2. 学会在企业管理器中对表进行插入、修改和删除数据操作。

3. 学会使用Transact-SQL语句对表进行插入、修改和删除数据操作。 4. 了解SQL Server的常用数据类型。

二、 实验准备

1. 了解在企业管理器中实现表数据的操作,如插入、修改和删除等。

2. 掌握用Transact-SQL语句对表数据进行插入(INSERT)、修改(UPDATE)和删除

(DELETE和TRANCATE TABLE)操作。

三、 实验内容及步骤

1. 启动企业管理器,展开studentsdb数据库文件夹。

2. 在studentsdb数据库中包含有数据表student_info、curriculum、grade,这些

表的数据结构如图1-2、图1-3和图1-4所示。

图1-2 学生基本情况表student_info

图1-3 课程信息表curriculum

图1-4 学生成绩表grade

3. 在企业管理器中创建student_info、curriculum表。

4. 在企业管理器中,将student_info表的学号列设置为主键,非空。

5. 使用Transact-SQL语句CREATE TABLE在studentsdb数据库中创建grade表。 6. student_info、curriculum、grade表中的数据如图1-5、图1-6和图1-7所示。

图1-5 student_info的数据

图1-6 curriculum的数据

图1-7 grade的数据

7. 在企业管理器中为student_info、curriculum、grade表添加数据。 8. 使用Transact_SQL语句INSERT INTO...VALUES向studentsdb数据库的grade表

插入以下数据:

学号 课程编号 分数 0004 0001 80

9. 使用Transact_SQL语句ALTER TABLE修改curriculum表的“课程编号”列,使

之为非空。

10. 使用Transact_SQL语句ALTER TABLE修改grade表的“分数”列,使其数据类型

为real。

11. 使用Transact_SQL语句ALTER TABLE修改student_info表的“姓名”列,使其

列名为“学生姓名”,数据类型为archar(10),非空。

12. 分别使用企业管理器和Transact_SQL语句DELETE删除studentsdb数据库的

grade表中学号为'0004'的成绩记录。 DELETE grade WHERE 学号='0004'

13. 使用Transact_SQL语句UPDATE修改studentsdb数据库的grade表中学号为

'0003'、课程编号为'0005'、分数为90的成绩记录。 UPDATE grade SET 分数=90

WHERE 学号='0003' and 课程编号='0005'

14. 使用Transact_SQL语句ALTER...ADD为studentsdb数据库的grade表添加一个

名为“备注”的数据列,其数据类型为VARCHAR(20)。 ALTER TABLE grade ADD 备注 VARCHAR(20) NULL 15. 分别使用企业管理器和Transact_SQL语句DROP TABLE删除studentsdb数据库中

的grade表。

四、 实验思考

1. 使用Transact-SQL语句删除在studentsdb数据库的grade表添加的“备注”数据

列。

2. 在企业管理器中,studentsdb数据库的student_info表的数据输入时,如果输入相

同学号的记录将出现什么现象?怎样避免该情况的发生?

实验4 数据查询

一、 实验目的

1. 掌握使用Transact-SQL的SELECT语句进行基本查询的方法。 2. 掌握使用SELECT语句进行条件查询的方法。 3. 掌握嵌套查询的方法。 4. 掌握多表查询的方法。

5. 掌握SELECT语句的GROUP BY和ORDER BY子句的作业和使用方法。 6. 掌握联合查询的操作方法。

7. 掌握数据更新语句INSERT INTO、UPDATE、DELETE的使用方法。

二、 实验准备

1. 了解SELECT语句的基本语法格式和执行方法。 2. 了解嵌套查询的表示方法。 3. 了解UNION运算符的用法。

4. 了解SELECT语句的GROUP BY和ORDER BY子句的作用。 5. 了解IN、JOIN等子查询的格式。

6. 了解INSERT INTO、UPDATE、DELETE的格式与作用。

三、 实验内容及步骤

0. 创建studentsdb数据库及其相应表,并录入数据。 启动查询分析器,运行下面链接的代码即可。 创建数据库代码

1. 在studentsdb数据库中,使用下列SQL语句将输出什么? (1) SELECT COUNT(*) FROM grade

(2) SELECT SUBSTRING(姓名,1,2) FROM student_info (3) SELECT UPPER('kelly')

(4) SELECT Replicate('kelly',3)

(5) SELECT SQRT(分数) FROM grade WHERE 分数>=85 (6) SELECT 2,3,POWER(2,3)

(7) SELECT YEAR(GETDATE()),MONTH(GETDATE()),DAY(GETDATE()) 2. 在studentsdb数据库中使用SELECT语句进行基本查询。

(1) 在student_info表中,查询每个学生的学号、姓名、出生日期信息。 (2) 查询学号为0002的学生的姓名和家庭住址。 (3) 找出所有男同学的学号和姓名。 3. 使用SELECT语句进行条件查询

(1) 在grade表中查找分数在80~90分为内的学生的学号和分数。 (2) 在grade表中查询课程编号为0003的学生的平均分。 (3) 在grade表中查询学习各门课程的人数。 (4) 将学生按出生日期由大到小排序。

(5) 查询所有姓“张”的学生的学号和姓名。

SELECT 学号,姓名 FROM student_info WHERE 姓名 LIKE '张%'

4. 嵌套查询

(1) 在student_info表中查找与“刘卫平”性别相同的所有学生的姓名、出生日

期。

SELECT 姓名,出生日期 FROM student_info WHERE 性别=

(SELECT 性别

FROM student_info WHERE 姓名='刘卫平')

(2) 使用IN子查询查找所修课程编号为0002、0005的学生学号、姓名、性别。

SELECT 学号,姓名,性别 FROM student_info

WHERE student_info.学号 IN

(SELECT 学号 FROM grade

WHERE 课程编号 IN ('0002', '0005'))

(3) 列出学号为0001的学生的分数比0002号的学生的最低分数高的课程编号和

分数。

SELECT 课程编号,分数 FROM grade

WHERE 学号='0001' AND 分数>ANY

(SELECT 分数 FROM grade

WHERE 学号='0002')

(4) 列出学号为0001的学生的分数比0002的学生的最高成绩还要高的课程编号

和分数。

5. 多表查询

(1) 查询分数在80~90范围内的学生的学号、姓名、分数。

SELECT student_info.学号,姓名,分数 FROM student_info,grade

WHERE student_info.学号=grade.学号 AND 分数 BETWEEN 80 AND 90

(2) 查询学习“C语言程序设计”课程的学生的学号、姓名、分数。

SELECT student_info.学号,姓名,分数 FROM student_info

INNER JOIN grade ON student_info.学号=grade.学号 INNER JOIN curriculum ON 课程名称='C语言程序设计'

(3) 查询所有男同学的选课情况,要求列出学号、姓名、课程名称、分数。

(4) 查询每个学生的所选课程的最高成绩,要求列出学号、姓名、课程名称、分

数。

(5) 查询所有学生的总成绩,要求列出学号、姓名、总成绩,没有选修课程的学

生的总成绩为空。 提示:使用左外连接。

(6) 为grade表添加数据行:学号0004、课程编号为0006、成绩为76。查询所有

课程的选修情况,要求列出课程编号、课程名称、选修人数,curriculum表中没有的课程列值为空。 提示:使用右外连接。

6. 使用UNION运算符将student_info表中姓“张”的学生的学号、姓名与curriculum

表的课程编号、课程名称返回在一个表中,且列名为u_编号、u_名称,如图1-8所示。

图1-8 联合查询结果集

7. 数据更新

(1) 创建totalgrade表,具有数据列:学号、姓名、总成绩。

CREATE TABLE totalgrade ( 学号 char(4) NOT NULL, 姓名 varchar(8) NULL,

总成绩 decimal(5,2) NULL )

(2) 使用INSERT INTO语句通过student_info表更新totalgrade表的学号、姓

名列数据。

INSERT INTO totalgrade

SELECT 学号,姓名,总成绩=0 FROM student_info

(3) 使用UPDATE语句通过grade表更新totalgrade表的中成绩列数据,使

totalgrade表中每个学生的总分成绩为grade表中该学生各成绩之和。 UPDATE totalgrade SET 总成绩=

(SELECT SUM(分数) FROM grade WHERE totalgrade.学号=grade.学号) FROM grade

(4) 删除totalgrade表中没有总成绩的学生记录。

四、 实验思考

1. 查询所有没有选修课程的学生信息,返回结果包括学号、姓名、性别。 2. 在student_info表和grade表之间实现交叉连接。

3. 查询每个学生的所选课程的成绩,并列出学号生成分组汇总(总成绩)和明细行

(各课成绩)。

提示:使用SELECT语句的COMPUTE选项。

实验5 索引和视图

一、实验目的

1. 学会使用企业管理器和Transact-SQL语句CREATE INDEX创建索引。 2. 学会使用企业管理器查看索引。

3. 学会使用企业管理器和Transact-SQL语句DROP INDEX删除索引。

4. 掌握使用企业管理器、向导等创建、管理和删除全文索引,并使用全文引索查询信息的方法。

5. 掌握使用企业管理器和Transact-SQL语句CREATE-VIEW创建视图的用法。 6. 掌握系统存储过程sp_rename的用法。

7. 掌握使用Transact-SQL语句ALTER VIEW修改视图的方法。

二、实验准备

1. 了解聚集索引和非聚集索引的概念。

2. 了解使用Transact-SQL语句CREATE INDEX创建索引的语法。 3. 了解使用企业管理器创建索引的步骤。

4. 了解Transact-SQL语句DROP INDEX删除索引的用法。

5. 了解创建视图的Transact-SQL语句CREATE INDEX的语法格式及用法。 6. 了解修改视图的Transact-SQL语句ALTER VIEW的语法格式。 7. 了解视图更名的系统存储过程sp_rename的用法。

8. 了解删除视图的Transact-SQL语句DROP VIEW的用法。

三、实验内容

0. 创建studentsdb数据库及其相应表,并录入数据。 启动查询分析器,运行下面链接的代码即可。 创建数据库代码

1.分别使用企业管理器和Transact-SQL语句为studentsdb数据库的student_info表格和curriculum表创建主键索引。

2.使用企业管理器按curriculum表的课程编号列创建唯一性索引。

3.分别使用企业管理器和Transact-SQL语句为studentsdb数据库的grade表的“分数”字段创建一个非聚集索引,命名为grade_index。

CREATE INDEX grade_index ON grade(分数)

4.为studentsdb数据库的grade表的“学号”和“课程编号”字段创建一个复合唯一索引,命名为grade_id_c_ind。

CREATE UNIQUE INDEX grade_id_c_ind ON grade(学号,课程编号)

5.分别使用企业管理器和系统存储过程sp_helpindex查看grade表和student_info表上的索引信息。

sp_helpindex grade

6.使用企业管理器的“向导”工具对grade表创建一个聚集索引和唯一索引。 7.使用系统存储过程sp_rename将引索grade_index更名为grade_ind。

sp_rename ˊgrade.grade_indexˊ,ˊgrade_indˊ, ˊINDEXˊ

8. 分别使用企业管理器和Transact-SQL语句DROP INDEX删除索引grade_ind。 再次使用系统存储过程sp_helpindex查看grade表上的索引信息。 DROP INDEX grade.grade_ind

9. 分别使用企业管理器和系统存储过程sp_fulltext_database为studentsdb数据库启用全文索引。

10. 分别使用企业管理器和系统存储过程sp_fulltext_catalog为studentsdb数据库建立全文目录,命名为FT_stu。为student_info表建立全文索引数据元。

execute sp_fulltext_catalog ˊFT_stuˊ,ˊcreateˊ

exec sp_fulltext_tableˊstudent_infoˊ,ˊcreateˊ,ˊFT_stuˊ,ˊPK_student_infoˊ 在建立全文索引数据元之前保证已为student_info表建立了PK_student_infl索引。 11. 为student_info表设置全文索引列名为ˊ家庭住址ˊ。在全文目录中注册该表,激活表的全文检索能力。

execute sp_fulltext_columnˊstudent_infoˊ,ˊ家庭住址ˊ,ˊaddˊ execute sp_fulltext_tableˊstudent_infoˊ,ˊactivateˊ 12. 填充全文目录,检查全文目录填充情况。 execute sp_fulltext_catalog ˊFT_stuˊ,ˊstart_fullˊ

While (fulltextcatalogproperty(ˊFT_stuˊ,ˊpopulateStatusˊ)<>0) BEGIN

waitfor delayˊ0;0;30ˊ--如果全文目录正处于填充状态,则等待30s后再检测一次 END

13. 在student_info表中,分别使用CONTAINS和FREETEXT函数通过全文目录检索家庭住址包含25号的记录。 SELECT姓名,家庭住址 FROM student_info

WHERE CONTAINS(家庭住址,ˊ25号ˊ)

14. 使用系统存储过程从studentsdb数据库中禁用全文检索。 15. 在studentsdb数据库中,以student_info表为基础,使用企业管理器建立名为v_stu_i的视图,使视图显示学生姓名、性别、家庭住址。

16.在studentsdb数据库中,使用Transact-SQL语句 CREATE VIEW 建立一个名为v_stu_c的视图,显示学生的学号、姓名、所学课程的课程编号,并利用视图查询学号为0003的学生情况。

17.基于student_info表、curriculum表和grade表,建立一个名为v_stu_g的视图,视图中具有所有学生的学号、姓名、课程名称、分数。使用视图v_stu_g查询学号为0001的学生的所有课程和成绩,如图1-9所示。

学号 姓名 课程名称 0001 刘卫平 大学计算机基础 0001 刘卫平 C语言程序设计 0001 刘卫平 SQL Server数据库 ? 0001 刘卫平 英语 0001 刘卫平 高等数学

图1-9 学号为0001的学生的视图信息

分数 80 90 87 86 78 18.分别使用企业管理器和Transact-SQL语句修改视图v_stu_c,使之显示学号、姓名、每个学生所学课程数目。

19.使用Transact-SQL语句ALTER VIEW 修改视图v_stu_i,使其具有列名学号、姓名、性别。

ALTER VIEW v_stu_i(学号,姓名,性别)

AS SELECT 学号,姓名,性别 FROM student_info

20.使用系统存储过程sp_rename将视图v_stu_i更名为v_stu_info。 sp_rename v_stu_i,v_stu_info

21.利用视图v_stu_i为student_info表添加一行数据:学号为0015、姓名为陈婷、性别为女。

22.利用视图v_stu_i删除学号为0015的学生记录。

23.利用视图v_stu_g修改姓名为刘卫平的学生的高等数学的分数为84。 24.使用Transact-SQL语句DROP VIEW 删除视图v_stu_c和v_stu_g。

四、实验思考

1.是否可以通过视图v_stu_g修改grade表中学号列数据? 2.比较通过试图和基表操作表中数据的异同。

实验6 数据完整性

一、实验目的

1. 掌握企业管理器和Transact-SQL语句(CREATE RULE、DROP RULE)创建和删除规则的方法。

2. 掌握系统存储过程sp_bindrule、sp_unbindrule绑定和解除绑定规则的操作方法,以及sp_help、sp_helptext查询规则信息,sp_rename 更名规则的方法。

3. 掌握企业管理器和Transact-SQL 语句(CREATE DEFAULT 、DROP DEFAULT)创建和删除默认对象的方法。

4. 掌握系统存储过程sp_bindefault、sp_unbindefault 绑定和解除绑定默认对象的操作方法,以及sp_help、sp_helptext 查询规则信息,sp_rename更名规则的方法。

5. 掌握企业管理器和Transact-SQL 语句(CREATE TABLE、AKTER TABLE)定义和删除约束的方法,并了解约束的类型。

二、实验准备

1. 了解数据完整性概念。

2. 了解创建规则和删除规则的语法,了解绑定规则和解除绑定规则的语法。 3. 了解创建默认对象和删除默认对象的语法,了解绑定和删除绑定默认对象的语法。 4. 了解约束的类型,创建约束和删除约束的语法。

三、实验内容和步骤

0. 创建studentsdb数据库及其相应表,并录入数据。 启动查询分析器,运行下面链接的代码即可。 创建数据库代码

1.为sutdentsdb数据库创建一个规则,限制所输入的数据为7位0-9的数字。

(1)复制student_info表命名为stu_phone,在stu_phone表中插入一列,列名为“电话号码”。完成以下代码实现该操作。

SELECT*INTO stu_phone FROM student_info

ALTER TABLE stu_phone ADD _____________ CHAR(7)NULL Stu_phone表结构如图1-10所示。 1 2 学号 0001 0002 姓名 刘卫平 张为民 性别 男 男 出生日期 1980-10-01 00:00:00.000 1980-12-02 00:00:00.000 家庭住址 衡山市东风路78号 东阳市八一北路25号 备注 NULL NULL 电话号码 NULL NULL

图 1-10 stu_phone 表结构

(2)创建一个规则phone_rule,限制所输入的数据为7位0~9的数字。实现该规则的代码为

CREATE___________phone_rule AS

@phone LIKE `[0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] (3)使用系统存储过程sp_bindrule将phone_rule规则绑定到stu_phone表的“电话号码”列上。实现该操作的代码为

sp_bindrule__________,`stu_phone.电话号码` (4)输入以下代码,进行一次插入操作:

INSERT INTO stu_phone(学号,姓名,电话号码)VALUES(`0009`,`王国强`,`1234yyy`) 产生以下出错信息:

服务器:消息513,级别16,状态1,行1

列的插入或更新与先前的CREATE RULE语句所强制的规则冲突。改语句已终止。冲突发生于数据库`studentsdb`,表`stu_phone`,列`电话号码`

试分析:为什么会产生该出错信息?如果要实现插入操作,应修改INSERT INTO语句中的哪个值?phone_rule规则能否对其他操作(如DELETE)进行规则检查?

2.使用企业管理器实现实验内容1的每个操作。

3.创建一个规则stusex_rule,将其绑定到stu_phone表的“性别”列上,保证输入的性别值只能是“男”或“女”。

4.使用系统存储过程sp_help查询stusex_rule规则列表,使用sp_helptext查询stusex_rule规则的文本,使用sp_rename将stusex_rule规则更名为stu_s_rule。

5.删除stu_s_rule规则。 注意:stue_s_rule为stusex_rule更名后规则名,是否仍然绑定在stu_phone表的“性别”列上,应如何操作才能删除它。

6.在stuedentdb数据库中,建立日期、货币和字符等数据类型的默认对象。

(1)在查询分析其中,完成以下代码,创建默认对象df_date、df_char、df_money。 --创建日期型默认对象df_date CREATE_______df_date AS`2006-4-12` GO

----创建字符型默认对象df_char CREATE DEFAULT df_char ___________`unknown` GO

--创建货币型默认对象df_money CREATE DEFAULT _________ AS $100 GO

(2) 输入以下代码,在studentdb数据库中创建stu_fee数据表。

CREATE TABLE stu_fee (学号char(10)NOT NULL, 姓名char(8)NOT NULL, 学费 money,

交费日期 datetime, 电话号码 char(7))

表 stu_fee 的数据结构如图1-11所示。 学号 姓名 学费 交费日期 电话号码 图1-11 stu_fee.的数据结构

(3)使用系统存储过程 sp-bindefault 将默认对象 df_date、df_char、df_money 分别绑定在stu_fee表的“学费”、“交费日期”、“电话号码”列上。

_______df-money,'stu_fee.学费' GO

Sp_bindefault_______,'stu_fee.交费日期' GO

Sp_bindefault df_char,stu_fee.电话号码' GO

(4) 输入以下代码,在stu_fee表进行插入操作:

INSERT INTO stu_fee(学号,姓名) values('0001','刘卫平')

INSERT INTO stu_fee(学号,姓名,学费)values('0001',张卫民',$120) INSERT INTO stu_fee(学号,姓名,学费,交费日期) VALUES('0001','马东',$110,'2006-5-12')

分析 stu_fee表中插入记录的各列的值是什么?

(5)完成以下代码解除默认对象df_char的绑定,并删除之。 ___________________'stu_fee.电话号码' ___________________DEFAULT df_char

按同样的方式,删除默认对象df_date/df_money。

7.使用企业管理器创建默认对象df_date、df_money,并将它们分别绑定到stu_fee表的“学费”、“交费日期”、“电话号码”列上,在插入操作中观察stu_fee表的数据变化情况,完成操作后,删除这些默认对象。

8.为student_info表添加一页,命名为“院系”,创建一个默认对象stu_d_df,将其绑定到student_info表的“院系”列上,时期默认值为“信息院”,对student_info表进行插入操作,操作完成后,删除该默认对象。分别使用企业管理器和查询分析器实现。

9.在studentsdb数据库中用CREATE TABLE语句创建表stu_con,并同时创建约束。 (1)创建表的同时创建约束。 表结构如图1-12所示 列名 数据类型 长度 学号 姓名 性别 出生日期 char char char datetime 4 8 2 8

家庭住址 varchar 50 图 1-12 要创建的表的结构 约束要求如下:

① 将学号设置为主键(PRIMARY KEY),主键名为pk_sid。 ② 为姓名添加唯一约束(UNIQUE),约束名为uk_name。

③ 为性别添加默认约束(DEFAULT),默认名称为df_sex,其值为“男”。 ④ 为出生日期添加属性值约束(CHECK),约束名为ck_beday,其检查条件为:出生日期>?1988-1-1?。

(2)在stu_con表中插入如表1-1所示的数据记录。 表 1-1 在stu-con 表中插入的数据 学号 0009 0010 0011 0012

姓名 张小东 李梅 王强 王强

性别 女

出生日期 1989-4-6 1983-8-5 1988-9-10 1989-6-3

家庭住址

分析各约束在插入记录时所起的作用,查看插入记录后表中数据与所插入的数据是否一致?

(3)使用ALTER TABLE语句的DROP CONSTRAINT参数项在查询分析器中删除为stu_con表所建的约束。

10. 用企业管理器完成实验内容9的所有设置。

11. 在查询分析器中,为studentsdb数据库的grade表添加外键约束(FOREIGN KEY),要求将“学号”设置为外键,参照表为student_info,外键名为ufk_sid。

使用系统存储过程sp_help查看grade表的外键信息。

在grade表中插入表1-2所示记录,观察SQL Server会做何处理,为什么?如何解决所产生的问题?

表1-2

学号 0100

课程编号 0001

分数 78

使用查询分析器删除grade表的外键fk_sid。

四、实验思考

1. 在SQL Server 2000中,可采用哪些方法实现数据完整性? 2. 比较默认对象和默认约束的异同。

实验7 Transact-SQL程序设计

一、实验目的

1. 掌握Transact-SQL的数据类型、常量变量、表达式等概念。 2. 掌握程序中注释的基本概念和使用方法。 3. 掌握程序中的流程控制语句。

4. 掌握SQL Server 2000中常用函数的用法。

5. 掌握游标的概念和声明方法,以及使用游标进行数据的查询、修改、删除操作等。

二、实验准备

1. 了解程序中注释的语法格式。

2. 了解程序中的流程控制语句:IF-ELSE、CASE、WHILE等控制流语句。

3. 了解系统提供的常用数学函数、日期和时间函数、字符串函数和数据类型转换函数的用法。

4. 了解函数的使用方法。 5. 了解游标的使用方法。

三、实验内容和步骤

0. 创建studentsdb数据库及其相应表,并录入数据。 启动查询分析器,运行下面链接的代码即可。 创建数据库代码

1. 在查询分析器中,选择studentsdb数据库,输入以下代码。 DECLARE@stu name varchar(10) SELECT@stu name=姓名 FORM student info

WHERE 姓名 LIKE ?张%? SELECT@stu name

观察显示的结果,与student info表中数据进行比较,@stu name赋值的是SELECT结果集中的哪个数据

2. 定义int型局部变量@grademax、@grademin、@gradesum,在grade表中查找最高分、最低分和总分,分别赋给@grademax、@grademin和@gradesum,并显示。

DECLARE@grademax int,@gradesum,int

SELECT@grademax = max(分数),@grademin = min(分数),@gradesum = sum(分数) FROM grade

SELECT @ grademax ,@grademin,@gradesum

3. 使用SET命令将查询的结果数目赋值给int型局部变量@row。给下面代码中的划线处填上适当的内容,以完成上述操作。

DECLARE@row

SET =(SELECT COUNT(*)FROM grade) @rows —显示@rows的值

4. 以下代码在curriculum 表中插入新纪录: DECLARE @intCId int,@intErrorCode int

INSERT INTO curriculum(课程编号,课程名称,学分) VALUES(?0006?,?VB程序设计?,2)

SELECT@intCId = @ @identity,@intErrorCode = @@error SELECT@intCId, @intErrorCode

将该代码段连续执行两次,观察两次显示的信息及curriculum表中数据的变化,为什么 前后两次执行时显示的信息会不同?

5. 在studentsdb数据库的student info表中,以“性别”为分组条件,分别统计男生和女生人数。

6. 在grade表中,使用适当函数找出“高等数学”课程的最高分、最低分和平均分。 7. 定义一个datetime型局部变量@student,以存储当前日期。计算student info表 中的学生的年龄,并显示学生的姓名、年龄。在以下代码的划线部分填入适当内容,以实现上述功能。

DECLARE datetime

SET@student = —给@student赋值为当前日期 SELECT 姓名, (@student)-year(出生日期)AS年龄 FROM student info

8. 运行以下代码,写出运行结果。 DECLARE@ a int ,@ b int SET @a =168 SET @b = 73

SELECT @a & @b,@a| @b ,@a^@b

9. 在局部变量@stu id中存储了学号值。编写代码查询学号为0001的学生的各科平 均成绩,如果平均分>=60则显示“你的成绩及格了,恭喜你!!”,否则显示“你的成绩不及格”。

IF ((SELECT AVG(分数) FROM grade where 学号 = ?0001?)<60) PRINT ?你的成绩不及格? ELSE

PRINT ?你的成绩及格了,恭喜你!!? 10. 运行以下代码段,写出运行的结果。 DECLARE @counter int SET @ counter = 1 WHILE @ counter <10 BEGIN

SELECT ?@counter的值现在为:?+CONVERT(CHAR(2),@counter) SET @ counter = @ counter +1 END

11. 查询grade表。如果分数大于等于90,显示A;如果分数大于等于80小于90,显 示B;如果分数大于等于70小于80,显示C;如果分数大于等于60小于70,显示D;其他显示E。在以下代码的划线部分填入适当内容完成上述功能。 SELECT学号,分数,等级 = CASE

分数>=90 THEN ?A?

WHEN 分数>=80 AND 分数<90 ?B? WHEN 分数>=70 AND 分数<80 THEN ?C? WHEN 分数>=60 AND 分数<70 THEN ELSE ?E? END

FROM grade

12. 计算grade表的分数列的平均值。如果小于80,则分数增加其值的5%;如果分数 的最高值超过95,则终止该操作。在以下代码划线处填入适当的内容以完成上述功能。 WHILE (SELECT (分数)FROM grade)<80 BEGIN

UPDATE grade

SET 分数 = 分数*1.05

If (SELECT MAX(分数)FROM grade)> BREAK ELSE END

13. 编写代码计算并显示@ n = 1+2+3+...+20。

14. 编写代码计算并显示1~100之间的所有完全平方数。例如,81 = 92,则称81为完 全平方数。

15. 计算1~100以内的所有的素数。

16. 在studentsdb数据库中,使用游标查询数据。

(1) 打开查询分析器,声明一个stu cursor游标,要求返回student info表中性别 为“男”的学生记录,且该游标允许前后滚动和修改。

(2) 打开stu cursor游标。 (3) 获取并显示所有数据。 (4) 关闭该游标。 17. 使用游标修改数据。 (1) 打开stu cursor游标。

(2) 将姓马的男同学的出生日期的年份加1。 (3) 关闭stu cursor。

18. 声明游标变量@stu c,使之关联stu cursor游标,利用stu c查询年龄在6~9 月份出生的学生信息。

19. 使用系统存储过程sp cursor list显示在当前作用域内的游标及其属性。

四、实验思考

1. 使用游标对数据库的表进行删除和修改等操作。 2. 流程控制语句与其他编程语言提供的语句有何差别? 3. 区分局部变量与全局变量的不同,思考全局变量的用处。

6、 使用企业管理器或系统存储过程sp_grantbaccess为登录账户st_11建立数据库用户账

户,指定用户名为st_user。 7、 使用企业管理器或系统存储过程sp_addsrvrolemember将登陆账户st_11添加为固定服

务器角色sysadmin,使st_11所拥有的所有权限。

8、 使用企业管理器或系统存储过程sp_addrole为studentsdb数据库创建自定义数据库角

色student,并使student具有INSERT、DELETE、UPDATE对象权限和CREATE TABLE 语句权限。 9、 使用企业管理器或系统存储过程sp_addrolemember将st_user添加为数据库角色student

成员,使它具有student的所有权限。

10、 使用企业管理器或系统存储过程sp_helprotect查看表student_info所具有的权限。 11、 分别在studentsdb数据库的grade表和student_info表中进行插入/删除记录的操作,

查看操作结果是否具有相应的权限 12、 使用企业管理器或系统存储过程sp_revikedbaccess从当前studentsdb数据库中删除

用户账户st_user。

13、 使用系统存储过程sp_defualtdb修改SQL Server登录账户st_11的默认数据库为

master。

14、 使用企业管理器或系统存储过程sp_droplogin删除SQL Server登录账户st_11。

四、 实验思考

1、 使用系统存储过程查看固定服务器角色和固定数据库角色。说明固定服务器角色和

固定数据库角色有各什么数据库管理权限?

2、 Master数据库中的guest用户能否被删除,为什么?

实验10 数据库的备份与恢复

一、实验目的

1. 掌握备份与还原的基本概念。 2. 掌握备份和还原的几种方式。

3. 掌握使用企业管理器和Transact-SQL语句进行数据库的备份和还原的操作方法。

二、实验准备

1. 了解备份和还原的基本概念。

2. 了解使用企业管理器和Transact-SQL语句进行数据库的备份的操作方法。 3. 了解使用企业管理器和Transact-SQL语句进行数据库的还原的操作方法

三、 实验内容和步骤

0. 创建studentsdb数据库及其相应表,并录入数据。 启动查询分析器,运行下面链接的代码即可。 创建数据库代码

1. 在企业管理器SQL Server文件夹下,右击“管理”→“备份”文件夹,在其中新

建一个备份设备,命名为st_bk。

2. 将studentsdb数据库完全备份到st_bk设备中,命名为备份,备份完成后验证备份, 3. 删除studentsdb数据库中的grade表

4. 利用数据库备份st_bk对studentsdb数据库进行恢复,比较恢复前后数据库的不同。 5. 兴建备份设备命名为st_bk,将studentsdb数据库日志被分到中,并验证备份。 注意:日志备份不能在简单恢复模型下进行,可以在企业管理器中打开要备份的数据库的“属性”对话框,选择“选项”选项卡的“故障还原”项的“模型”下拉框的“完全”或“大容量日志记录”恢复模型,然后再进行备份。 6. 利用日志备份st_bk对数据库studentsdb进行恢复。

7. 使用Transact-SQL语句BACKUP DATABASE和RESTORE DATABASE对

studentsdb数据库进行备份和还原。

8. 使用Transact-SQL语句BACKUP DATABASE和RESTORE DATABASE对

studentsdb数据库进行日志备份和还原。

四、 实验思考

1. 那些数据库文件应该定期备份?

2. 比较不同恢复模型下数据库备份和还原操作的差异。

实验11 数据库的导入/导出与复制

一、 实验目的

1、 掌握用企业管理器在SQL Server之间导入/导出的方法。

2、 掌握用企业管理器在SQL Server和Excel之间导入/导出数据的方法。 3、 掌握用企业管理器在SQL Server和文本文件之间导入/导出数据的方法。 4、 掌握用企业管理器配置发布、分发、订阅服务器的方法及步骤。 5、 掌握创建发布方法及步骤。 6、 掌握订阅发布的方法及步骤。

二、 实验准备

0. 创建studentsdb数据库及其相应表,并录入数据。 启动查询分析器,运行下面链接的代码即可。 创建数据库代码

1、 了解使用企业管理器在SQL Server之间、SQL Server与其他数据文件之间导入/导出数据的方法及步骤。

2、 了解复制的工作原理及机制。

3、 了解使用企业管理器设置发布、分发、订阅服务器的方法及步骤。

三、 实验内容和步骤

1、 使用企业管理器的DTS将studentsdb数据库导入到新的s1数据库,是s1数据库包含student_info表和grade表。

2、 将studentsdb数据库的grade表的每个学生的总成绩汇总成一个数据表,导入到数据库s1,且命名为total,包含列名为学号、总成绩。

3、 在Excel 2000中建立一个工作表grd,保存为工作簿文件stu.xls,其中包含以下数据项:

学号 课程编号 分数 0005 0001 95 0005 0002 84 0005 0003 75 0006 0001 68 0006 0003 92 0006 0005 79

将数据文件stu.xls的数据导入到数据库s1的grade表末尾,查看grade表是否增加了这6条记录。

4、使用Windows的“记事本”建立一个文本文件grdl.txt,其中包含一下数据项: 学号 课程编号 分数 0007 0001 89 0007 0004 78 0008 0002 67 0008 0004 85 文本格式为“ANSI”。

将文件grdl.txt导入到s1数据库的grade表的末尾,完成后查看grade表是否增加了这4条数据记录。

注意:导入时,源文件的格式为ANSI,分隔符为{,},第一行文字不需要时,选择跳过1行。

5.将studentsdb数据库的student_info表的数据导出为Excel 2000文件stu_il.xls,并在Excel中打开该文件,查看与student_info变得数据是否一致。

6.将studentsdb数据库的student_info表的数据列学好、姓名、性别导出为文本文件stu_i2.txt,以分号“;”分隔,并在记事本中打开该文件,查看与student_info表的数据是否一致。

7.使用企业管理器SQL Server为配置发布服务器和分配服务器。选择“工具”->“配置发布、订阅服务器和分发服务器”菜单项,采取自动启动SQL Server代理,代理服务器的账户为SQLAgent。

提示:在SQL Server配置代理服务器是,若采用Windows验证模式登陆SQL Server,则应先在Windous中建立用户命名为SQLAgent,并使其“隶属于”administrator,并且设置密码。

SQL server代理服务器的“服务启动账户”使用“本账户”,账户名输入为“\\SQLAgent”,密码为该账户在Windows中定义时的密码。

8.创建快照复制发布内容。从Pubs数据库创建快照发布,允许配对更新订阅,订阅服务器的类型SQL Server 2000服务器,将pubs数据库的authers表作为发布项目,命名为pubs,选择authors表的au_id、au_lname、au_fname、city、contract、msrpl_tran_version列数据为pubs发布的数据,采取署名订阅方式,按照调度运行快照代理程序。

查看企业管理器的控制树的“复制”→“发布内容”文件夹,是否有名为pubs的发布内容。

9.创建对发布服务器的pubs发布的强制订阅。订阅数据库为studentsdb,采用排队更新订阅,连续地运行分发代理程序。

查看企业管理器的控制树的“复制”→“订阅”文件夹,应有pubs的订阅项,订阅数据库为studentsdb。

10.启动快照代理程序,查看订阅的内容。在企业管理器控制树的“复制监视器”→“代理程序”文件夹中吗,右击“快照代理程序”,选择“启动代理程序”菜单项。展开studentsdb数据库的表文件夹,可以看到订阅的内容,查看是否和发布的数据一致。

11.新建一个数据库,命名为是s1。为数据库s1创建请求订阅。启动请求订阅,查看s1数据库的表文件中是否包含了authors表,其中列数据与pubs发布的数据是否一致。

12.在企业管理器中删除请求订阅。

13.在企业管理器中禁用发布。如果再次进行数据发布时,需要如何操作?

四、实验思考

1、将studentsdb数据库中student_info表,到处为Access 2000的数据文件,并在Access中查看内容。

2、比较强制订阅和请求订阅的差别。

本文来源:https://www.bwwdw.com/article/u9ja.html

Top