• 沒有找到結果。

数据库技术与应用实践教程(第二版) - 万水书苑-出版资源网

N/A
N/A
Protected

Academic year: 2021

Share "数据库技术与应用实践教程(第二版) - 万水书苑-出版资源网"

Copied!
54
0
0

加載中.... (立即查看全文)

全文

(1)

第一篇 实验指导

实验 1  SQL Server 2000 的安装

一、实验目的  1.熟悉 SQL Server 2000 的安装方法与步骤。  2.熟悉 SQL 服务器的注册和配置方法。  3.掌握企业管理器和查询分析器的简单应用。 二、实验准备  1.了解 SQL Server 2000 常用的版本和适用的操作系统平台。  2.了解 SQL Server 2000 安装的软硬件要求。  3.了解 SQL Server 2000 支持的身份验证模式。  4.了解 SQL Server 2000 的安装过程。 三、实验内容及步骤  1.安装 SQL Server 2000。 将 SQL Server 2000 光盘放入光驱,在屏幕提示下完成安装。  2.注册刚才安装的 SQL Server 服务器。 (1)选择“开始”→“程序”→Microsoft SQL Server→“企业管理器”命令,打开“企 业管理器”窗口。在“企业管理器”窗口中右击“SQL Server 组”选项并选择“新建 SQL Server  注册”命令,或者单击工具栏中的“添加新服务器”按钮,或选择工具栏中的“运行向导”→ “注册服务器向导”或“操作”→“新建 SQL Server 注册”命令进行注册。 (2)选择或输入要注册的服务器名称。 

3.分别用  administrator  和  sa  两个用户登录自己的服务器,并为  sa  用户更改密码为  666666。 (1)将服务器的身份模式改为“混合模式” 。方法为:在企业管理器中选择命名服务器, 右击并选择“属性”选项,选择“安全性”标签并选择“混合模式” 。该步骤主要用于设置身 份由 SQL Server 和 Windows 一起管理。 (2)打开命名服务器,选择“安全性”→“登录”命令,并为 sa 设置密码。该步骤主要 用于新建和修改登录账号。 (3)右击命名的服务器,选择“编辑 SQL Server 注册属性”命令,将登录方式改为“使 用 SQL  Server 身份登录” ,输入账号为 sa,密码为 666666。该步骤用于打开登录界面并更改 账号。

(2)

4.打开事件探查器,显示跟踪计划。 选择“开始”→“程序”→Microsoft  SQL  Server→“事件探查器”命令,打开“SQL 事 件探查器” 窗口, 单击工具栏上的 “新跟踪” → “连接服务器” 设置相关项, 开始跟踪 SQL Server  的使用情况。  5.打开查询分析器,输入程序并执行。 (1)选择“开始”→“程序”→Microsoft SQL Server→“查询分析器”命令,进入“SQL  查询分析器”界面,选择“连接服务器”选项后进入 SQL 语句输入界面。 (2)在用户盘上创建一个以自己姓名的拼音为文件名的文件夹,然后单击“工具”→“选 项”命令,并将“查询文件目录”和“结果文件目录”全部设置为新创建的文件夹。 (3)在查询窗口中输入以下程序:  declare @x char(40)  select @x='SQL 数据库教程'  select @x, datalength(@x)  go  (4)单击“文件”→“保存”命令将该脚本文件存盘,然后按  F5  键或单击工具栏中的 “执行查询”按钮运行,注意观察输出结果。 (5)再试着单击“文件”→“打开”命令打开该脚本文件,再次执行。 四、实验思考  1.在 Windows 2000 Professional 操作系统上,可以安装 SQL Server 2000 的哪些版本?  2.在 Windows 2000 Server 操作系统上,可以安装 SQL Server 2000 的哪些版本?  3.在 SQL Server 2000 中,身份验证的模式有几种,分别是什么?

实验 2    SQL Server 2000 管理工具的使用

一、实验目的  1.掌握 3 个实用工具程序(服务管理器、企业管理器和查询分析器)的基本操作。  2.熟悉系统提供的示例数据库。  3.熟悉使用联机丛书来查阅帮助信息。 二、实验准备  1.了解 SQL Server 2000 的管理工具程序及其功能。 (1)服务管理器:启动、停止、暂停  SQL Server  服务。在对  SQL Server  中的数据库和 表进行任何操作之前需要首先启动  SQL Server  服务。 (2)企业管理器:有助于用户对  SQL Server  数据库进行管理和操作。 (3)查询分析器:帮助用户调试  SQL  程序、测试查询及管理数据库。 (4)联机丛书:是在使用  SQL Server  时可以随时参考的帮助说明。  2.了解 SQL Server 2000 自带的示例数据库。

(3)

三、实验内容及步骤  1.使用服务管理器:对已安装的本地 SQL Server 服务器完成启动、暂停和停止操作。 (1)执行“开始”→“程序”→Microsoft SQL Server→“服务管理器”命令,或双击桌 面任务栏上的“服务管理器”图标按钮,弹出“SQL Server 服务管理器”窗口,如图 2.1 所示。 图 2.1  “SQL Server 服务管理器”窗口 (2)在“服务器”下拉列表框中选择要启动的数据库服务器(取决于所安装的实例), 在“服务”下拉列表框中选择 SQL Server 选项,单击“开始/继续”按钮启动 SQL Server。 注意:选择“当启动 OS 时自动启动服务”复选项,可在每次 Windows 启动时自动启动  SQL Server。 (3)单击“暂停”按钮,观察信号灯变化。单击“停止”按钮,观察信号灯变化。再次 单击“开始/继续”按钮。 (4)关闭“SQL Server 服务管理器”窗口,但 SQL Server 服务仍在运行,任务栏上的 图标表示服务已启动。  2.启动 SQL Server 的企业管理器,查看已安装的数据库实例中系统数据库的情况。 (1)选择“开始”→“程序”→Microsoft SQL Server→“企业管理器”命令,打开“企 业管理器”窗口,如图 2.2 所示。 图 2.2  “企业管理器”窗口

(4)

(2)单击窗口中树状目录窗格中的  Microsoft  SQL  Server  节点,并打开在其下级  SQL  Server 组下自己安装的数据库实例“数据库”节点,浏览系统自动创建的数据库情况并单击某 一数据库(如 Pubs 或 Northwind 示例数据库)节点,浏览其中包含的数据库对象。 注意:如果相应实例的数据库服务器未启动,则右击该数据库服务器并从弹出的快捷菜 单中选择“连接”选项也可启动 SQL Server 服务。  3.通过企业管理器进入“SQL 查询分析器”窗口,进行简单的数据查询操作。 (1)在“企业管理器”窗口中,选择 pubs 数据库,执行“工具”→“SQL 查询分析器” 命令,打开“SQL 查询分析器”窗口,如图 2.3 所示。 图 2.3  “SQL 查询分析器”窗口 (2)通过窗口的工具栏确认当前数据库为 pubs 数据库,在查询分析器的文本窗口中输入 查询语句:  SELECT * FROM  pub_info  (3)执行“查询”→“执行”命令或单击工具栏上的相应按钮执行查询,注意观察输出 结果。然后关闭“SQL 查询分析器”窗口。 注意:执行查询语句之前,可以先执行“查询”→“分析”菜单命令分析 SQL 代码的语 法正确性。 也可以执行“开始”→“程序”→Microsoft SQL Server→“查询分析器”命令打开查询分 析器,但首先应在如图 2.4 所示的“连接到 SQL Server”对话框中选择连接的服务器并输入合 法的用户名和密码,即可进入 SQL 查询分析器。 图 2.4  “连接到 SQL Server”对话框

(5)

4.使用联机丛书:通过 SQL Server  联机丛书了解 SQL Server 的相关帮助信息。 (1)选择“开始”→“程序”→Microsoft SQL Server→“联机丛书”命令打开“SQL Server  联机丛书”窗口,如图 2.5 所示。 图 2.5  “SQL Server 联机丛书”窗口 (2)在“目录”选项卡中选择感兴趣的标题,展开浏览。如选择“安装 SQL Server”→ “基本安装选项”→“实例名称”命令查看实例命名规则。 (3)在“索引”选项卡中输入关键字“服务器” ,选择“服务器-SQL Server,sa 密码” 选项查看系统关于 sa 用户身份的说明介绍。 (4)在“搜索”选项卡中输入要查找的短语“pubs  示例数据库” ,打开主题“pubs 示例 数据库”后查看 pubs 数据库的有关信息。 注意:在企业管理器或查询分析器中,执行“帮助”命令或者单击工具栏中的“帮助” 按钮也可以打开联机帮助说明书。 四、实验思考  1.查询分析器的作用是什么?有几种启动查询分析器的方法?  2.使用什么方法可以改变查询分析器的当前数据库?  3.用企业管理器和查询分析器查看 Northwind 数据库中 Orders 和 Customers 表的内容。

实验 3 数据库的创建、修改和删除

一、实验目的  1.了解 SQL Server 数据库的构成和数据库对象。  2.了解数据库的物理存储。

(6)

3.掌握在企业管理器中创建、修改和删除数据库的操作方法。 

4.学会使用 Transact­SQL 语言的 CREATE  DATABASE、ALTER  DATABASE 和 DROP  DATABASE  命令创建、修改和删除数据库。 二、实验准备  1.明确创建、修改和删除数据库的权限范围。  2.创建的数据库要确定数据库名、所有者、数据库容量和存放数据文件的位置。  3.了解修改数据库名、所有者、存放数据文件的位置、数据库容量的基本要求和方法。  4.了解创建、修改和删除数据库的常用方法。 三、实验内容及步骤  1.在企业管理器中创建、修改和删除数据库。 (1)不指定文件创建数据库。要求是:创建的数据库名为  MYTEST。创建完成后,在 企业管理器中右击此数据库并选择“属性”命令,查看此数据库的属性,并在下列横线上按要 求填入相关数据。 ① 主数据文件的逻辑文件名: 。 ② 物理文件名: 。 ③ 存放的位置: 。 ④ 初始大小: 。 ⑤ 最大文件大小: 。 ⑥ 事务日志文件的逻辑文件名: 。 ⑦ 物理文件名: 。 ⑧ 存放的位置: 。 ⑨ 文件增长情况: 。 注意:由于不指定文件,所以创建的数据库  MYTEST  的主数据文件大小为系统数据库  MODEL  的主数据文件大小。事务日志文件的大小为  MODEL  数据库事务日志文件的大小。 而文件的最大大小可以增长到填满所有可用的磁盘空间为止。 (2)创建指定数据文件和事务日志文件的数据库。要求是:创建学生信息  Student  数据 库 。 主 数 据 文 件 的 逻 辑 文 件 名 为  STU_DAT , 存 放 的 位 置 和 物 理 文 件 名 为  D:\Mydb\  STUDAT.MDF,初始大小为 3MB,最大大小为 25MB,自动增长量为 5MB;事务日志文件的 逻辑文件名为  STU_LOG,存放的位置和物理文件名为  D:\Mydb\STULOG.LDF,初始大小为  3MB,最大大小为 20MB,自动增长量为 5MB。 注意:在创建 Student 数据库前必须先确定 D:盘上是否已建立 Mydb 文件夹,若没有,则 创建该文件夹。 (3)对(2)中创建好的 Student 数据库进行如下修改:修改主数据文件的最大大小为无 限大,自动增长量为 10%;修改事务日志文件的最大大小为 30MB。 (4)删除数据库 MYTEST。  2.在查询分析器中创建、修改和删除数据库。 (1)使用 CREATE  DATABASE 命令创建简单的数据库。要求先阅读下述语句,然后上 机完成操作。

(7)

/*创建简单数据库的语句*/  CREATE DATABASE Products  ON  ( NAME = prods_dat,  FILENAME = 'C:\program files\microsoft SQL Server\mssql\data\prods.mdf',  SIZE = 4,  MAXSIZE = 10,  FILEGROWTH = 1 )  完成上机操作后,在下列横线上填入相关数据。 ① 创建的数据库名: 。 ② 主数据文件的逻辑文件名: 。 ③ 主数据文件的最大大小: 。 ④ 事务日志文件的逻辑文件名: 。 注意:在执行创建  Products  数据库的命令前,必须先确定  C:盘上是否有路径:\program  files\microsoft SQL Server\mssql\data,若没有,则改变或建立该路径。 (2)使用 CREATE DATABASE 命令指定多个数据文件和事务日志文件创建数据库。 要求先阅读下列语句,在下列语句的注释“/* */”中的横线处填入相应的注释。  /*指定多个数据文件和事务日志文件创建数据库*/  CREATE DATABASE Archive  ON  /*  创建_________文件_________*/  PRIMARY  ( NAME=Arch1,  FILENAME= 'D:\Mydb\Archdat1.mdf',  SIZE=2MB,  MAXSIZE =30,  FILEGROWTH =2),  /*  创建次数据文件 Arch2 */  ( NAME=Arch2,  FILENAME = 'D:\Mydb\Archdat2.ndf',  SIZE=2MB,  MAXSIZE=30,  FILEGROWTH=2),  /* ____________________________*/  ( NAME=Arch3,  FILENAME='D:\Mydb\Archdat3.ndf',  SIZE=2MB,  MAXSIZE=30,  FILEGROWTH=2)  LOG ON  /* ____________________________*/  ( NAME=Archlog1,  FILENAME='D:\Mydb\Archlog1.ldf',  SIZE=1MB,  MAXSIZE=20,  FILEGROWTH=2),

(8)

/*____________________________*/  ( NAME=Archlog2,  FILENAME='D:\Mydb\Archlog2.ldf',  SIZE=1MB,  MAXSIZE=20,  FILEGROWTH=2)  完成上机操作后,在下列横线上填入相关数据。 ① 语句中使用了 个  MB  数据文件,使用了 个  MB  事务 日志文件。 ② 对照以上语句执行的输出结果在下列横线处填上正确的内容。  CREATE DATABASE  进程正在磁盘  ' Arch1 '  上分配 2MB 的空间。  CREATE DATABASE  进程正在磁盘  '  '  上分配 2MB 的空间。  CREATE DATABASE  进程正在磁盘  '  '  上分配 2MB 的空间。  CREATE DATABASE  进程正在磁盘  '  '  上分配 1MB 的空间。  CREATE DATABASE  进程正在磁盘  '  '  上分配 1MB 的空间。 (3)使用 CREATE DATABASE 命令和文件组创建人事信息管理  Rsxxgl_db  数据库。要 求阅读下列语句并在下列语句的注释“/* */”中的横线处填入相应的注释。  /*使用文件组创建人事信息管理  Rsxxgl_db  数据库的语句*/  CREATE DATABASE Rsxxgl_db  ON  /*____________________________*/  PRIMARY  ( NAME=Rsx1_dat,  FILENAME='D:\Mydb\Rsx1dat.mdf',  SIZE=2,  MAXSIZE=20,  FILEGROWTH=5% ),  ( NAME=Rsx2_dat,  FILENAME='D:\Mydb\Rsx2dat.ndf',  SIZE=2,  MAXSIZE=20,  FILEGROWTH=5% ),  /*____________________________*/  FILEGROUP RsxxglGroup1  ( NAME=RGrp1Fi1_dat,  FILENAME='D:\Mydb\RG1Fi1dt.ndf',  SIZE=2,  MAXSIZE=20,  FILEGROWTH=5),  ( NAME=RGrp1Fi2_dat,  FILENAME='D:\Mydb\RG1Fi2dt.ndf',  SIZE=2,  MAXSIZE=20,  FILEGROWTH=5),  /* ____________________________ */  FILEGROUP RsxxglGroup2

(9)

( NAME=RGrp2Fi1_dat,  FILENAME='D:\Mydb\RG2Fi1dt.ndf',  SIZE=2,  MAXSIZE=20,  FILEGROWTH=5),  ( NAME=RGrp2Fi2_dat,  FILENAME='D:\Mydb\RG2Fi2dt.ndf',  SIZE=2,  MAXSIZE=20,  FILEGROWTH=5)  /* ____________________________*/  LOG ON  ( NAME='Rsxxgl_log',  FILENAME='D:\Mydb\Rsxxgllog.ldf',  SIZE=1MB,  MAXSIZE=25MB,  FILEGROWTH=3MB )  完成上机操作后,在下列横线上填入相关数据。 ① 语句中包含 个文件组,其中主文件组包含文件 和 。这些文 件的 FILEGROWTH  增量为 。 ② 对照以上语句执行的输出结果在下列横线处填上正确的内容。  CREATE DATABASE  进程正在磁盘  'Rsx1_dat'  上分配 2MB  的空间。  CREATE DATABASE  进程正在磁盘  'Rsx2_dat'  上分配 2MB  的空间。  CREATE DATABASE  进程正在磁盘  '  '  上分配 2MB 的空间。  CREATE DATABASE  进程正在磁盘  '  '  上分配 2MB 的空间。  CREATE DATABASE  进程正在磁盘  '  '  上分配 2MB 的空间。  CREATE DATABASE  进程正在磁盘  '  '  上分配 2MB 的空间。  CREATE DATABASE  进程正在磁盘  '  '  上分配 1MB 的空间。 (4)使用 ALTER DATABASE 命令修改数据库 Archive。  1)下述语句的功能是将数据库  Archive  的主数据 文件的逻辑文件名  Arch1  修改为  Arch1_main。要求在下列横线处填入正确的内容,完成操作。  ALTER DATABASE Archive  MODIFY FILE _________________________________  提示:修改数据文件的逻辑文件名子句的语法格式为:  MODIFY FILE (NAME = logical_file_name, NEWNAME = new_logical_name...)  2)下列语句的功能是将数据库 Archive 的主数据文件中的最大大小修改为 35,文件自动 增长量修改为 5。要求在下列横线处填入正确的内容,完成操作。  ALTER DATABASE Archive  MODIFY FILE  ( NAME=  ,  MAXSIZE =35,  ___________________ )  注意:当修改数据库的容量时,容量的大小必须比文件当前容量的大小要大。若要修改 数据库文件的属性,每次只能更改这些属性中的一种。  3)下列语句的功能是将数据库 Archive 中的物理文件名为 Arch3 的文件删除。要求在下

(10)

列横线处填入正确的内容,完成操作。  ALTER DATABASE Archive  (5)使用 DROP DATABASE 命令一次删除 Archive 和 Rsxxgl_db  两个数据库。要求在下 列横线处填入正确的语句。  ____________________________  注意:删除数据库与删除数据库文件的区别。 (6)请在下列横线处填入合适的内容,使得下列语句可以将  Sales  数据库名改为  NewSales。 ALTER _________ Sales ________ NAME=NewSales  提示:重命名数据库的语法格式为  ALTER DATABASE database MODIFY NAME = new_dbname  (7)将数据库 Products  中的数据文件 Prods_dat 的文件大小增加到 20MB。  ALTER DATABASE Products  __________________  FILE  ( NAME = Prods_dat,  SIZE = 20MB ) 四、实验思考  1.在企业管理器中是否能对数据库更名?是否能对创建好的数据文件或事务日志文件 更名? 2.SQL  Server 服务器正在运行,当一用户将已经创建好的数据库 Test1 在企业管理器中 删除时,系统提示不能进行删除操作,这是什么原因?正确的操作是什么?  3.在实验内容 2(4)的 3)中,若数据库 Archive 的物理文件 Arch3 有信息,则是否能 删除?

实验 4 数据库的分离、附加、备份及还原

一、实验目的  1.掌握数据库分离和附加的基本概念。  2.掌握数据库分离和附加的基本操作方法。  3.掌握数据备份和还原的基本概念。  4.掌握数据库备份和还原的几种方式。  5.掌握 SQL Server 备份和还原的基本操作方法。 二、实验准备  1.了解数据库分离和附加的基本概念,明确分离数据库的目的。  2.了解数据库附加的基本操作方法。  3.了解数据库备份和还原的基本概念,明确备份的目的。  4.确定备份类型,选好备份设备,制定备份策略。  5.学习使用企业管理器对数据库进行备份。

(11)

6.选好还原模型,制定还原方案。 

7.学习使用企业管理器对数据库进行还原。 三、实验内容及步骤 

1.复制在实验 3 中创建的学生信息数据库 Student 文件。

提示:停止运行  SQL  Server  服务器,找到数据库  Student  存放的位置  D:\Mydb  并选定  STUDAT.MDF 和 STULOG.LDF 两个文件进行复制,然后粘贴至目的位置。 

2.将在实验 3 中创建的学生信息数据库 Student 移动至 E:\Mytest 下。 根据题意分析,可选择数据库分离和附加的方法实现。

提示:将  STUDAT.MDF 和  STULOG.LDF 两个文件复制并粘贴至  E:\Mytest 下(参考 实验内容 1 的操作提示) , 然后启动 SQL Server 服务器, 在企业管理器中删除数据库 Student。 右击“数据库”文件夹并选择“所有任务”→“附加数据库”命令,在弹出的“附加数据 库”对话框中指定要附加数据库的 MDF 文件,如图 4.1 所示。单击“确定”按钮执行附加 操作。 图 4.1  “附加数据库”对话框  3.用企业管理器创建备份设备 STUBACK1(物理位置为 D:\Mydb) 。  4.将学生信息数据库 Student 备份至 STUBACK1 设备中。  5.为学生信息数据库  Student  设置一个备份计划,要求在每周星期五的晚上  8  点进行数 据库备份。 提示:进行备份时,在弹出的“SQL Server 备份”对话框中按图 4.2 所示进行设置。选中 “调度”复选项并单击 按钮,弹出“编辑调度”对话框,如图 4.3 所示。在此对话框中选中 “反复出现”单选项并单击“更改”按钮,弹出“编辑反复出现的作业调度”对话框,在此对 话框中设置备份的发生频率、每日频率、持续时间等参数,如图 4.4 所示。  6.查看备份设备 STUBACK1 的相关信息。  7.删除备份设备 STUBACK1。 

8.将 SQL Server  的 Northwind 示例数据库复制到 D:\Mydb 下,然后将 Northwind 数据库 附加为 Mytest_db1 数据库并进行备份,最后进行还原。

(12)

图 4.2  在“SQL Server 备份”对话框中设置“调度”

图 4.3  “编辑调度”对话框

(13)

要求用户根据自己确定的备份内容选择相关参数,并将参数项填入下列横线处。 (1)备份类型: 。 (2)备份设备和备份位置: 。 (3)备份策略: 。 (4)设置一个备份计划: 。 (5)还原模型: 。 (6)还原顺序: 。 提示:此题的操作可参照教材中的例 2.12 进行。  9.查看实验内容 8 中创建的备份设备内容。 四、实验思考  1.当用户对已经创建好的数据库进行分离后,发现在企业管理器中该数据库的名称已经 不存在了,此时是否可以认为该数据库不存在了呢?为什么?  2.当 SQL Server 服务器正在运行时,用户需要将自己创建好的数据库拷贝带走,应该如 何操作?  3.假设已经进行了“数据库—完全”备份,其后每两小时对所属的事务日志文件进行一 次备份。在进行数据还原操作时,是否每次都需要按“先数据库完全还原,再事务日志还原” 的顺序进行?

实验 5 数据表的创建和管理

一、实验目的  1.了解 SQL Server  数据表的构成。  2.掌握在企业管理器中创建、修改和删除数据表的操作方法。  3.学会使用 Transact­SQL 语言创建、修改和删除数据表。  4.掌握在企业管理器中创建、修改和删除记录的操作方法。  5.学会使用 Transact­SQL 语言添加、修改和删除记录。 二、实验准备  1.了解创建、修改和删除数据表的常用方法。  2.根据实际需要定义好要创建的数据表中列的数据类型。了解哪些列允许空值,是否要 使用以及何时使用约束、默认设置或规则。  3.了解添加、修改和删除记录的常用方法。 三、实验内容及步骤  1.在企业管理器中创建数据表。 (1)向学生数据库 Student_db 中添加学生信息 St_Info 表,表结构和表记录如图 5.1 和图  5.2 所示。

(14)

图 5.1  学生信息 St_Info 表的表结构 图 5.2  学生信息 St_Info 表的表记录 (2)向学生数据库 student_db 中添加课程信息 C_Info 表,表结构和表记录如图 5.3 和图  5.4 所示。 图 5.3  课程信息 C_Info 表的表结构 图 5.4  课程信息 C_Info 表的表记录

(15)

(3)向学生数据库 student_db 中添加学院信息 D_Info 表,表结构和表记录如图 5.5 和图  5.6 所示。 图 5.5  学院信息 D_Info 表的表结构 图 5.6  学院信息 D_Info 表的表记录 完成以上操作后,根据创建的数据表在下列横线处填入相关数据。 ① 学生信息 St_Info 表的主键名是: 。 ② 学生信息 St_Info 表中不允许为空的字段有: 。 ③ 学生信息 St_Info 表中的 Born_Date 字段是 类型,其宽度由 设定。 ④ 课程信息 C_Info 表中的 C_Credit 字段是 smallint 类型,其宽度为 字节。  2.在查询分析器中使用 CREATE TABLE 命令创建数据表。

(1)阅读下列语句,语句中的  S_NO  表示学生学号,NAME  表示学生名称,AGE  表示 学生年龄,然后在查询窗口中输入:  CREATE TABLE Student  ( S_NO CHAR(7)  PRIMARY KEY(S_NO),  NAME CHAR(10),  AGE SMALLINT CHECK(AGE BETWEEN 15 AND 20))  执行上述语句后,在下列横线处填入相关数据。 ① 创建的数据表的表名是: 。 ② 数据表的主键名是: 。

(16)

③  AGE 列的数据类型是: 。 ④ 语句 CHECK(AGE BETWEEN 15 AND 20)表示 。 (2)阅读下列语句,语句中的 St_ID 表示学生号,C_NO 表示课程号,Score 表示所修课 程的成绩,然后在查询窗口中输入:  CREATE TABLE S_C_Info  ( St_ID CHAR(10) NOT NULL,  C_NO CHAR(10) NOT NULL,  Score INT NULL,  PRIMARY KEY(St_ID, C_NO),  FOREIGN KEY(St_ID) REFERENCES St_Info(St_ID),  FOREIGN KEY(C_NO) REFERENCES C_Info(C_NO) )  完成上机操作后,在下列横线处填入相关数据。 ① 数据表 S_C_Info 的主键名是: 。 ②  Score 列的数据类型是: 。 ③ 语句 FOREIGN KEY(St_ID) REFERENCES St_Info(St_ID)表示 。  3.在企业管理器中将实验内容  2(2)中创建的  S_C_Info  数据表的记录输入,记录内容 如图 5.7 所示。 图 5.7  选课信息 S_C_Info 表的表记录  4.在企业管理器中修改和删除记录。 (1)将学生信息 St_Info 表中学号为 2001050108 的记录删除。 (2)将课程信息 C_Info 表中“民法学”的学分修改为 7 学分。  5.将下列语句在查询分析器中完成上机操作后,在下列横线处填入相关数据。 (1)  INSERT INTO St_Info  VALUES ( '2001050109', '杨柳', '女', '1988­12­12', '法学 0503', null, null, null)  这个语句的功能是: 。 (2)  UPDATE St_Info  SET CL_Name='计算机科学 0601'

(17)

WHERE St_ID='0603060109'  这个语句的功能是: 。  6.在企业管理器和查询分析器中分别实现如下操作: (1)在 S_C_Info 表中添加一个新列:修课类别,列名为 xklb,类型为 char(4)。 (2)将 C_Info 表中的 C_Credit 列的类型修改为 tinyint。 (3)将 S_C_Info 表中新添加的列 xklb 的类型改为 char(6)。 四、实验思考  1.在企业管理器中能否对数据表更名?  2.在企业管理器中能否对数据表进行复制?复制的内容和方法是什么?  3.在数据库中,取 NULL 值与取零值的含义相同吗?如果不同,它们的区别是什么?  4.在企业管理器中使多列作主键时应如何操作?

实验 6 数据完整性设置

一、实验目的  1.掌握用企业管理器创建关系图的方法。  2.掌握用企业管理器和 CREATE TABLE 语句创建主键约束、唯一性约束和 NOT NULL 约 束的方法。 

3.掌握用企业管理器和 CREATE TABLE 语句创建 CHECK 约束和 DEFAULT 约束的方法。  4.掌握用企业管理器删除约束的方法。 二、实验准备  1.了解关系图的概念。  2.了解数据完整性概念。  3.了解约束的类型和创建约束、删除约束的语法。 三、实验内容及步骤  1.使用企业管理器在数据库 student_db 中创建 StCSCD 关系图。关系图由实验 5 中创建 的学生信息 St_Info 表、课程信息 C_Info 表、选课信息 S_C_Info 表组成,如图 6.1 所示。

(18)

提示:创建 StCSCD 关系图之前必须先创建好 St_Info 表和 C_Info 表的主键。  2.按以下步骤,使用企业管理器在 student_db 数据库表中创建一个 CHECK 约束,限制 输入的数据为 7 位 0~9 的数字。 (1)复制 St_Info 表并命名为 St_phone,St_phone 表的表结构如图 6.2 所示。 图 6.2  St_phone 表的表结构 提示:① 打开关系图 StCSCD 并右击,从快捷菜单中选择“新建表”命令或在数据库关 系图的工具栏上单击“新建表”按钮 ,创建表 St_phone。 ② 在关系图中选择要复制的表  St_Info  中所需的列并单击工具栏上的“复制”按钮,该 操作将复制 St_Info 表中的选定内容并将列及其当前属性集一起放到剪贴板上。 ③ 将光标定位在 St_phone 表中要插入列的位置,单击工具栏上的“粘贴”按钮,该列及 其属性即插入到新位置。 注意:当复制 Telephone 字段时其长度为 10,粘贴后将长度修改为 7。 (2)创建一个 CHECK 约束 CK_st_phone,限制所输入的数据为 7 位 0~9 的数字。 提示:① 创建 CHECK 约束 chk_phone 的表达式为:  telephone like '[0­9][0­9][0­9][0­9][0­9][0­9][0­9]'  ② 在 St_phone 表中输入记录,电话号码分别为 86701120 和 8670112a,检验 CHECK 约 束的有效性。 

3.在  St_phone 表的“性别”列中创建一个  CHECK 约束  CK_sex_phone,以保证输入的 性别值只能是“男”或“女” 。 提示:在列“属性”对话框的“CHECK 约束”选项卡中新建 CHECK 约束后,生成的约 束名为 CK_st_phone_1,输入约束表达式后再将约束名 CK_st_phone_1 修改为 CK_sex_phone。  4.删除 CK_sex_phone 约束。  5.在 student_db 数据库中建立日期、货币和字符等数据类型的 DEFAULT 约束。 (1)在 student_db 数据库中创建 stu_fee 数据表,表结构如图 6.3 所示。 图 6.3  stu_fee 数据表的表结构 (2)在 stu_fee 的表结构中选择“交费日期”列,在“列”选项卡的默认值输入框中文本  1992­1­1。 (3)参照以上操作,在 stu_fee 的表结构中为“学费”列和“电话号码”列创建 DEFAULT  约束,其值分别为$100 和 unknown。 (4)在企业管理器中对 stu_fee 数据表输入 3 条记录,输入操作时观察 stu_fee 表的数据 变化情况,操作完成后删除 DEFAULT 约束。  6.用企业管理器在 student_db 数据库中创建表 st_c,数据结构如图 6.4 所示。

(19)

图 6.4  st_c 表的数据结构 要求: (1)将 St_ID 设置为主键,主键名为:_____________________。 (2)为 St_Name 创建唯一性约束(UNIQUE),约束名为 uk_stname。 (3)设置 Born_Date 允许空。 (4)为表 st_c 插入以下记录:  0011  王芳  1990­2­10  0012  王芳  1989­8­5  观察出现的情况并确定产生的原因。  7.在 student_db 数据库中用 CREATE TABLE 语句创建表 stu_con 及其约束。 (1)在创建表的同时创建约束。表 stu_con 的数据结构如图 6.5 所示。 图 6.5  stu_con 表的数据结构 约束要求如下: ①将学号设置为主键(PRIMARY KEY),主键名为 pk_sid。 ②为姓名添加唯一约束(UNIQUE),约束名为 uk_name。 ③为性别添加默认约束(DEFAULT),默认名为 df_sex,值为“男” 。 ④为出生日期添加属性值约束(CHECK),约束名为  ck_bday,检查条件为“出生日期  >'1988­1­1'” 。 (2)在 stu_con 表中插入以下数据记录: 学号 姓名 性别 出生日期 家庭住址  0009  张小东  1989­4­6  0010  李梅 女  1983­8­5  0011  王强  1988­9­10  0012  王强  1989­6­3  分析各约束在插入记录时所起的作用,查看插入记录后表中的数据与所插入的数据是否 一致?

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

(20)

四、实验思考  1.实体完整性和域完整性分别是对数据库的哪些方面进行保护?  2.在数据库中,主键是唯一的吗?如果新输入的记录主键和原来的主键重复会出现什么 后果? 3.实现参照完整性有什么意义?假设存在学生信息表 Student(s_no,s_name,age,d_no)和院 系信息表 dept(d_no,d_name,address,tel),为什么要确保 Student 表中的 d_no 列的取值参照 dept  表的 d_no 列?

实验 7 基本查询

一、实验目的  1.掌握数据查询的概念和查询语句的执行方法。  2.掌握简单查询和条件查询的查询方法。  3.掌握查询结果的处理方法。  4.掌握嵌套查询的查询方法。  5.掌握等值内连接的查询方法 二、实验准备  1.复习数据查询的概念和查询语句的一般格式。  2.复习查询条件的表示方法。  3.了解查询结果的各种实现方法。 三、实验内容及步骤  1.根据题目要求,在下列横线处填入适当内容,实现相关操作或回答相关问题。 (1)在数据库 student_db 的数据表 C_Info 中查询所有课程信息,查询结果集如图 7.1 所 示。  SELECT  *  __________  C_Info  图 7.1  实验内容 1(1)的查询结果集 (2)查询全体学生的姓名、出生年份和所在班级的信息,其查询结果集如图 7.2 所示。

(21)

SELECT St_name AS  姓名,  (Born_Date)    AS  出生年份,    Cl_Name    AS  班级  FROM St_info  (3)查询 1988 年以后出生的学生的姓名及其年龄,其查询结果如图 7.3 所示。  SELECT St_name AS  姓名,    Year(getdate())­Year(Born_date) AS  年龄  FROM St_info  WHERE    ________________________  图 7.2  实验内容 1(2)的查询结果集 图 7.3  实验内容 1(3)的查询结果集 (4)查询考试成绩在 85 分以上的学生的学号。 

SELECT DISTINCT St_ID FROM S_C_info WHERE Score>85 

语句中的 DISTINCT 表示: 。  SELECT St_ID FROM S_C_info WHERE Score>85  以上两条语句的区别是: 。 (5)对 S_C_info 表列出成绩在 70~80 之间的学生名单。  SELECT * FROM S_C_info WHERE Score BETWEEN 70 AND 80  这条语句的等价语句是: 。 (6)查询所有姓王的学生的姓名、学号和性别。  SELECT St_name, St_ID, St_sex  FROM St_Info  WHERE St_name LIKE  (7)查询选修了课程号为 9710011 的课程的学生的学号和成绩,并按分数降序排列。  SELECT St_ID, Score  FROM S_C_info  WHERE C_NO=  ________________________________________  (8)使用合并查询列出 C_Info 表中“艺术设计史”或“民法学”的课程代码、课程类型 和学分。  SELECT C_NO, C_Type, C_credit FROM C_Info WHERE C_name='艺术设计史'  _________________________  SELECT C_no, C_Type, C_credit FROM C_Info WHERE C_name='民法学'  (9)查询全体学生的情况,查询结果按学号升序排列,结果存入新表 NEW 中并浏览该 表。  SELECT * INTO new

(22)

FROM St_Info  _____________________  SELECT * FROM new  (10)对 St_Info 表,分别统计各班级的学生人数,其查询结果集如图 7.4 所示。  SELECT  _____________________________________  FROM St_Info  GROUP BY Cl_Name  (11) 对 S_C_Info 表中选修了课程编号为 29000011 的体育课的学生的平均成绩生成汇总 行和明细行,其查询结果集如图 7.5 所示。  SELECT St_ID, Score  FROM S_C_Info  WHERE C_No = '29000011'  COMPUTE  __________________  图 7.4  实验内容 1(10)的查询结果集 图 7.5  实验内容 1(11)的查询结果集  2.根据下列内容写出 SELECT 语句,上机操作完成基本查询。 (1)在数据库 student_db 的数据表 St_Info 中查询全体学生的所有信息。 (2)在数据库 student_db 的数据表 St_Info 中查询每个学生的学号、姓名、出生日期信息。 (3)查询学号为 2001050108 的学生的姓名和家庭住址。 (4)找出所有男同学的学号和姓名。 (5)查询 St_Info 表中班级名为“材料科学 0601 班”的学生的学号、姓名、班级名。 (6)查询 C_Info 表中学分数为 3 和 4 的课程信息。 (7)统计 S_C_Info 表中每门课程的平均成绩,要求显示课程编号和平均成绩。 (8)查询所有姓张的学生的学号、姓名、性别和出生日期。  3.上机完成下列语句的操作,观察输出结果。 (1)SELECT COUNT(*) FROM S_C_Info  (2)SELECT SUBSTRING(St_Name,1,1) FROM St_Info  (3)SELECT Year(Getdate()), Month(Getdate()), Day(Getdate()) 四、实验思考  1.使用下列语句查询年龄最大的学生的姓名和年龄时系统报错,为什么?  SELECT St_Name, MAX(year(getdate())­Year(Born_Date))  FROM St_Info

(23)

2.使用下列语句查询修课成绩最高的学生学号时系统报错,为什么?  SELECT St_ID  FROM S_C_Info  WHERE Score=MAX(Score)

实验 8 嵌套查询

一、实验目的  1.理解数据库嵌套查询的概念与作用。  2.掌握数据查询中 IN、ANY、SOME 和 ALL 等操作符的使用方法。 二、实验准备  1.复习嵌套查询的概念与作用。  2.了解 IN、ANY、SOME 和 ALL 等操作符的功能与使用方法。 三、实验内容及步骤  1.阅读语句,上机完成查询操作。 (1)在表 St_info 中查找与杨平娟在同一个班级学习的学生的信息。  SELECT * FROM St_info  WHERE Cl_name=  (SELECT Cl_name FROM St_info  WHERE St_name='杨平娟')  (2)使用 IN 子查询查找选修了课程名为“体育”的学生的学号和成绩。  SELECT St_ID, Score  FROM S_C_info  WHERE C_No IN  (SELECT C_No FROM C_info  WHERE C_name='体育')  (3)查询选修了课程编号为 9710011 和 9710041 的课程的学生的学号和姓名。  SELECT St_ID, St_name  FROM St_info  WHERE St_ID IN  (SELECT St_ID FROM S_C_info  WHERE C_NO IN ('9710011', '9710041'))  2.在下列横线处填入适当内容,完善语句并实现相应功能。 (1)查询成绩高于 90 分的学生的学号和姓名,查 询结果集如图 8.1 所示。  SELECT St_ID, St_Name  FROM St_Info  WHERE St_ID  ________  (SELECT St_ID FROM  ________  WHERE Score>=90)  图 8.1  实验内容 2(1)的查询结果集

(24)

(2)查询选修了学分数为 3 的课程的学生的学号、 课程编号、成绩信息,查询结果集如图 8.2 所示。  SELECT St_ID, C_No, Score  FROM S_C_Info  WHERE __________ IN  ( SELECT C_No FROM C_Info  WHERE  _____________________ )  (3)查询其他班级中比“材料科学  0601  班”的学生年龄都大的学生姓名和年龄,查询 结果集如图 8.3 所示。  SELECT    St_name, Year(Getdate())­Year(Born_date) AS '年龄'  FROM St_info  WHERE _________________  (SELECT Year(Getdate())­Year(Born_date)  FROM St_info  WHERE Cl_name='材料科学 0601 班')  (4) 列出选修 9710041 (即 “C 语言程序设计基础” ) 的学生的成绩比选修 29000011(即“体育” )的学生的最低成绩高的学生的学号和成绩,查询 结果集如图 8.4 所示。  SELECT St_id, score  FROM S_C_info  WHERE  ____________________  (SELECT Score  FROM S_C_info  WHERE C_NO='29000011')  (5)查询没有选修 9710041 号课程的学生姓名和所在班级,查询结果集如图 8.5 所示。  SELECT St_Name,  Cl_Name  FROM St_Info  WHERE  ____________________  (SELECT St_ID FROM S_C_info  WHERE C_NO='9710041')  (6)查询所有姓王的学生所修课程的成绩,查询结果集如图 8.6 所示。  SELECT C_No, Score  FROM S_C_Info  WHERE __________ IN  ( SELECT St_ID FROM St_Info  WHERE St_Name LIKE __________ )  图 8.5  实验内容 2(5)的查询结果集 图 8.6  实验内容 2(6)的查询结果集 图 8.3  实验内容 2(3)的查询结果集 图 8.4  实验内容 2(4)的查询结果集 图 8.2  实验内容 2(2)的查询结果集

(25)

四、实验思考  1.查询选修了全部课程的学生的姓名。  2.查询与“口腔(七)0601 班”所有学生的年龄均不同的学生学号、姓名和年龄。  3.求选修了学号为 2001050105 的学生所选修的全部课程的学生学号和姓名。  4.查询每个学生的课程成绩最高的成绩信息。  5.列出学号为 2001050108 的学生的分数比学号为 2001050105 的学生的最低分数高的课 程编号和分数。

实验 9 多表联接查询和综合查询

一、实验目的  1.理解数据库多表查询的概念与作用。  2.掌握多表联接查询的方法。  3.掌握各种形式的查询方法。 二、实验准备  1.复习多表联接查询的概念与作用。  2.了解多表联接查询的种类、区别与实现方法。 三、实验内容及步骤  1.写出语句,上机完成查询操作。 (1)使用多表联接查询分数在  80~90  范围内的学生的学号、姓名和分数,查询结果集 如图 9.1 所示。 (2)使用多表联接查询选修“C 语言程序设计基础”课程的学生的学号、姓名和分数, 查询结果集如图 9.2 所示。 图 9.1  实验内容 1(1)的查询结果集 图 9.2  实验内容 1(2)的查询结果集 (3)查询所有课程的不及格成绩单,要求给出学生的学号、姓名、课程名称和成绩,查 询结果集如图 9.3 所示。 图 9.3  实验内容 1(3)的查询结果集

(26)

2.在下列横线处填入适当内容,完善语句并实现相应功能。 (1)查询法学专业的学生学号、姓名、课程名称和成绩,并按学号升序排序,查询结果 集如图 9.4 所示。  SELECT st.St_ID, St_Name, C_Name, Score  FROM St_Info st JOIN S_C_Info sc ON  ____________________  JOIN C_Info c ON sc.C_NO=c.C_No  WHERE  Cl_Nname LIKE ___________________  ORDER BY st.St_ID  图 9.4  实验内容 2(1)的查询结果集 (2)查询每门课程的课程名称和最高分,查询结果集如图 9.5 所示。  SELECT C_Name AS  课程名称, __________ AS  最高分  FROM S_C_Info sc JOIN C_Info c ON  __________________  GROUP BY C_Name  (3)将 C_Info 表左外联接 S_C_Info 表。  SELECT a.C_NO,a.C_Name, b.St_ID,b.Score  FROM C_Info _________________________  S_C_Info b ON a.C_NO= b.C_NO  (4)将 C_Info 表右外联接 S_C_Info 表。  SELECT a.C_NO, a.C_Name,b.St_ID, b.Score  FROM C_Info  S_C_Info b ON a.C_NO = b.C_NO  (5)将 C_Info 表全外联接 S_C_Info 表。  SELECT C_Info.C_NO, C_Name,S_C_Info.C_NO, S_C_Info.Score  FROM C_Info ________________________________________  S_C_Info ON C_Info.C_NO = S_C_Info.C_NO  3.查询所有必修课程的课程号、课程名称、学分及选修学生的姓名和分数。  4.查询每个学生所选课程的最高成绩,要求列出学号、姓名、课程编号和分数。  5.查询所有学生的总成绩,要求列出学号、姓名、总成绩,没有选修课程的学生的总成 绩为空。  6.查询所有男同学的选课情况,要求列出学号、姓名、课程名称和分数。 四、实验思考 如何查询“大学计算机基础”课程考试成绩前三名的学生的姓名和成绩? 图 9.5  实验内容 2(2)的查询结果集

(27)

实验 10 创建数据库的索引和视图

一、实验目的 

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

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

4.掌握使用企业管理器和 Transact­SQL 语句 CREATE VIEW 创建视图的语法。  5.掌握使用 Transact­SQL 语句 ALTER VIEW 修改视图的语法。

二、实验准备 

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

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

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

5.了解创建视图的 Transact­SQL 语句 CREATE VIEW 的语法格式及用法。  6.了解修改视图的 Transact­SQL 语句 ALTER VIEW 的语法格式及用法。  7.了解删除视图的 Transact­SQL 语句 DROP VIEW 的语法格式及用法。 三、实验内容及步骤  1.在查询分析器中使用 Transact­SQL 语句 CREATE INDEX 创建索引。 (1)为 student_db 数据库中 S_C_Info 表的成绩 Score 字段创建一个非聚集索引,命名为  Score_index。  CREATE INDEX Score_index ON S_C_Info(Score)  (2)为 student_db 数据库中 S_C_Info 表的学号 St_ID 和课程编号 C_No 字段创建一个复 合唯一索引,命名为 SC_id_c_ind。  CREATE UNIQUE INDEX SC_id_c_ind ON S_C_Info (St_ID, C_No)  2.在查询分析器中查看所建的索引 Score_index 和 SC_id_c_ind,如图 10.1 所示。 图 10.1  在查询分析器中查看索引

(28)

3.使用企业管理器的“向导”工具为 S_C_Info 表创建一个聚集索引和唯一索引。  4.使用 Transact­SQL 语句 DROP INDEX 删除索引 SC_id_c_ind,再次使用查询分析器查 看 S_C_Info 表上的索引信息。  DROP INDEX S_C_Info.SC_id_c_ind  5.使用企业管理器创建视图。 (1)在 student_db 数据库中以 St_Info 表为基础建立名为 v_stu_i 的视图,使视图显示学 生的姓名、性别、家庭住址,如图 10.2 所示。 图 10.2  v_stu_i 视图的结果集

(2)基于表 St_Info 和表 C_Info 建立一个名为 v_stu_c 的视图,显示学生的学号、姓名、 所学课程。 (3)基于表 St_Info、表 C_Info 和表 S_C_Info 建立一个名为 v_stu_g 的视图,视图中有 所有学生的学号、姓名、课程名称、成绩,如图 10.3 所示。  6.使用视图 v_stu_g 查询学号为 2001050408 的学生的所有课程和成绩,查询结果集如图  10.4 所示。 图 10.3  v_stu_g  视图的结果集 图 10.4  学号为 2001050408 的学生的查询结果集

(29)

7.使用 Transact­SQL 语句为学生信息表 St_info 创建视图 V_Count,统计材料科学 0601  班的男生人数和女生人数,如图 10.5 所示,请补全下列语句。  CREATE VIEW V_Count  AS  SELECT__________, COUNT(*)    AS  人数  FROM    St_info  WHERE    Cl_name='材料科学 0601 班'  __________St_sex  8.请补全下列语句,实现对表 S_C_Info 文件创建视图 v_stu_g 以查询学号为 2001050107  的学生的所有课程和成绩,如图 10.6 所示。  CREATE VIEW v_stu_g  AS  SELECT * FROM S_C_Info  WHERE St_ID = __________ 

9.使用 Transact­SQL 语句 DROP VIEW 删除已存在的视图 v_stu_c 和 v_stu_g。 

10.使用 Transact­SQL 语句 ALTER VIEW 修改视图 v_stu_i,使其具有列名学号、姓名、 性别,请在横线处填入合适的内容。  ALTER VIEW _______________  AS SELECT St_ID,St_Name,St_Sex FROM St_Info 四、实验思考  1.是否可以通过视图修改表 S_C_Info 中的数据?  2.通过对视图的操作比较通过视图和基表操作数据的异同。

实验 11 存储过程的创建和使用

一、实验目的  1.了解存储过程的作用。  2.掌握使用企业管理器和 Transact­SQL 语句创建存储过程的方法和步骤。  3.掌握使用企业管理器和 Transact­SQL 语句执行存储过程的方法。  4.掌握使用系统存储过程对用户自定义存储过程进行管理的方法。 二、实验准备  1.了解存储过程的基本概念和分类。  2.掌握通过企业管理器、向导和 Transact­SQL 语句创建存储过程的基本方法。  3.掌握执行、查看、修改(内容和名称)、删除存储过程的基本方法。  4.掌握在存储过程中使用参数的基本方法。 三、实验内容及步骤 存储过程是一系列预先编辑好的、能实现特定数据操作功能的  Transact­SQL  代码集,它 与特定的数据库相关联并存储在 SQL  Server 服务器上。用户可以像使用自定义函数那样重复 图 10.5  视图 V_Count 的信息 图 10.6  视图 v_stu_g 的信息

(30)

调用这些存储过程,实现其定义的操作。以下实验内容均以教材中所说明的学生数据库  student_db 为例进行操作。  1.在企业管理器中创建一个名为 selectScore 的存储过程,输入如下代码查询所有考试课 程成绩优秀(≥90 分)的学生的学号、姓名、课程名称和成绩并按成绩降序排列。  CREATE PROCEDURE selectScore AS  SELECT a.St_ID, a.St_Name, b.C_Name, c.Score  FROM St_Info a, C_Info b, S_C_Info c 

WHERE a.St_ID = c.St_ID AND  b.C_No    = c.C_No AND c.Score >= 90  ORDER BY c.Score DESC  在企业管理器的“存储过程属性”窗口中单击“确定”按钮,查看 student_db 数据库中是 否已经创建了存储过程 selectScore。 启动查询分析器,登录数据库服务器后选择学生数据库 student_db,然后在命令窗口中使 用 EXECUTE 命令执行存储过程 selectScore 并观察其输出结果。  2.在查询分析器中创建一个名为 studentScore 的带输入参数的存储过程,输入如下代码, 实现查询指定学号的学生所选修课程的成绩。  CREATE PROCEDURE studentScore @stuID varchar(20) AS  SELECT a.St_Name, b.C_No, b.C_Name, c.Score  FROM St_Info a, C_Info b, S_C_Info c  WHERE a.St_ID = c.St_ID AND  b.C_No = c.C_No AND a.St_ID = @stuID  单击查询分析器的“执行查询”按钮完成存储过程的创建。如果创建成功,在输入窗口 中清除之前输入的创建存储过程命令,再输入如下包含系统存储过程的命令序列:  sp_help studentScore  GO  sp_helptext studentScore  观察系统存储过程 sp_help 和 sp_helptext 输出的不同结果,理解系统存储过程的作用。 使 用  EXECUTE  命 令 执 行 存 储 过 程  studentScore , 并 分 别 以 参 数 值  2001050105 、  0603060109、2602060100 作为其输入参数,观察存储过程的输出结果。 如果存储过程 studentScore 执行时没有提供参数则按默认值查询 (假设默认值为空字符串, 表示查询所有学号的学生),如何修改该存储过程的定义?  3. 在查询分析器中利用 Transact­SQL 语句创建对表 C_Info 进行插入、 修改和删除操作的 三个存储过程:insertCInfo、updateCInfo、deleteCInfo,实现如下功能: (1)insertCInfo:将所有字段作为存储过程的输入参数,插入一条新记录。 (2)updateCInfo:将所有字段作为存储过程的输入参数,按课程编号 C_No 修改课程内容。 (3)deleteCInfo:将课程编号 C_No 作为存储过程的输入参数,删除该课程记录。  4.使用 student_db 数据库中的 St_Info 表、C_Info 表、D_Info 表完成如下要求:

(1)创建一个存储过程  getPractise,查询指定院系(名称)中参与“实践”课程学习的 所有学生的学号、姓名、所学课程编号和课程名称。 提示:D_Info 表中存储了院系代码和名称,St_Info 表中的学号字段 St_ID 的前两位与之 对应;提取 St_ID 的前两位字符可以使用 Transact­SQL 语言中的 LEFT 函数(具体用法通过查 询分析器进行查阅或参看有关触发器的实验内容)。 (2)分别执行存储过程 getPractise 查询法学院和材料科学与工程学院的学生参与实践课 程学习的所有学生的学号、姓名、所学课程编号和课程名称。

(31)

(3)利用系统存储过程 sp_rename 将 getPractise 更名为 getPctStu。 (4)修改存储过程 getPctStu,返回指定院系中参与实践课程学习的学生人次数,并利用 不同的输入参数验证存储过程执行的结果。 更进一步地,如果希望让存储过程 getPctStu 返回学生的人数,那么应该如何修改存储过 程呢?需要注意的是, “人数”与“人次数”是两个概念,对于某一个学生而言,如果参与了 多门实践课程则“人次数”是其课程门数,而“人数”仍然等于 1。 (5)修改存储过程 getPctStu,实现如果输入的院系不存在则提示相应的信息且返回过程 的状态码值等于­1;否则返回过程的状态码值等于 0。 (6)使用系统存储过程 sp_helptext 查看存储过程的定义文本。 (7)复制  getPctStu  的定义产生一个加密的 新的 存储过程  getPctStuTemp, 并使用  sp_helptext 查看该存储过程的定义观察显示结果。 (8)使用 Transact­SQL 语句 DROP PROCEDURE 删除存储过程 getPctStuTemp。 四、实验思考  1.使用存储过程有什么好处?  2.如何给存储过程赋予使用授权?  3.如果需要修改一个存储过程的定义又不希望将其删除,应使用何种方式操作?

实验 12 触发器的创建和使用

一、实验目的  1.掌握使用企业管理器和 Transact­SQL 语句创建触发器的方法和步骤。  2.掌握触发触发器的方法。  3.掌握使用系统存储过程对触发器进行管理的方法。 二、实验准备  1.了解触发器的基本概念和种类。  2.了解通过使用企业管理器和 Transact­SQL 语句创建触发器的基本方法。  3.了解查看、修改、删除触发器的 Transact­SQL 语句的使用方法。 三、实验内容及步骤 触发器是一种实施复杂数据完整性约束的特殊存储过程,在对表或视图执行  UPDATE、  INSERT、DELETE 语句时自动触发执行,以防止对数据进行不正确、未授权或不一致的修改。 一个触发器只适用于一个表,每个表最多只能有三个触发器,分别是  INSERT、UPDATE  和  DELETE  触发器。触发器仅在实施数据完整性和处理业务规则时使用。以下实验内容均以教 材中所说明的学生数据库 student_db 为例进行操作。  1.打开企业管理器,由服务器开始逐步展开到触发器所属表的 student_db 数据库,打开 “表”文件夹,在“表”窗口中右击  C_Info,在弹出的快捷菜单中选择“所有任务”→“管 理触发器”命令,弹出触发器“属性”对话框。

(32)

在文本框中输入如下语句用以创建触发器 tr_AutoSetType,然后单击“检查语法”按钮进 行语法检查,无误后单击“确定”按钮。  CREATE TRIGGER tr_AutoSetType ON C_Info  FOR INSERT AS  UPDATE C_Info SET C_Type='必修'  展开 C_Info 表查看其触发器项中是否有 tr_AutoSetType 触发器并理解其作用。 启动查询分析器,登录数据库服务器后选择学生数据库 student_db,在查询分析器命令编 辑窗口中输入如下命令序列:  INSERT INTO C_Info (C_No,C_Name,C_Credit) VALUES('82021','数据库原理',2)  GO  SELECT * FROM C_Info  单击查询分析器的“执行查询”按钮观察 SELECT 命令的输出结果,发现该新增课程记 录中的 C_Type 字段被自动赋予了“必修”值,这是触发器 tr_AutoSetType 被触发后自动完 成的。 2.在查询分析器中使用  Transact­SQL 语句创建一个 DELETE  触发器  tr_CheckDeptNo, 实现的功能是: 在 D_Info 表中删除记录时检测 St_Info 表中是否存在学号前两位数值与 D_Info  中的 D_ID 相同的记录,如果存在,则给出提示信息“不能删除该条记录,因为该院系还有学 生! ” ;如果不存在,则删除该条记录。 启动查询分析器,登录数据库服务器后选择学生数据库 student_db,在查询分析器命令编 辑窗口中输入如下命令序列:  CREATE TRIGGER tr_CheckDeptNo ON D_Info  FOR DELETE AS  BEGIN DECLARE @stid VARCHAR(10)  SELECT @stid=D_ID FROM DELETED  IF EXISTS (SELECT * FROM St_Info WHERE LEFT(St_ID,2)=@stid)  BEGIN  PRINT    '不能删除该条记录,因为该院系还有学生!'  ROLLBACK TRANSACTION  END  END  首先理解该触发器代码的设计原理,然后单击查询分析器的“执行查询”按钮完成触发 器的创建。如果创建成功,在输入窗口中清除之前输入的创建命令,再输入如下命令序列检测 触发器的作用:  DELETE FROM D_Info WHERE D_ID='20'  GO  DELETE FROM D_Info WHERE D_ID='88'  单击查询分析器的“执行查询”按钮观察命令执行的输出结果,结合 tr_CheckDeptNo 触 发器的代码进一步了解上述两个 DELETE 命令受该触发器的影响情况。  3.基于 St_Info 表创建一个 INSERT 和 UPDATE 触发器 tr_CheckStID,如果输入的学生 学号 St_ID 的前两位未出现在 D_Info 表的 D_ID 中则不允许插入或更新记录,并显示相应提 示“无此院系,不能输入这样的学号” 。然后设计向 St_Info 表中插入记录或更新学号的命令序 列检查触发器的作用,观察插入数据或更新数据时的运行情况。

(33)

4.基于 S_C_Info 表创建一个 INSERT 触发器 tr_CheckStIDandCNo,如果 St_Info 表中没 有 St_ID 所对应的学号或者 C_Info 表中没有 C_No 所对应的课程编号,则不允许插入记录, 并显示相应提示“不能插入无学号或无课程编号的成绩记录” 。然后设计向 S_C_Info 表中插入 记录的命令序列,检查触发器的作用。  5.为 St_Info 表建立一个删除触发器 tr_AutoDelete,实现的功能是当删除 St_Info 表中的 某个学生后,利用该触发器自动删除 S_C_Info 中所有该学生的成绩记录,并利用查询分析器 进行实例操作:删除 St_Info 表中的某个学生记录,然后检查 S_C_Info 中的学生成绩记录是否 正常删除(注意实验前如果 St_Info 表的 St_ID 有到 S_C_Info 的外键存在,则先使用企业管理 器将其删除)。  6.使用系统存储过程 sp_helptrigger 查看指定触发器的有关属性。  7.使用系统存储过程 sp_rename 对指定触发器进行更名。  8.使用 Transact­SQL 语句 DROP TRIGGER 删除指定的触发器。 四、实验思考  1.使用触发器有什么好处?触发器有坏处吗?  2.触发器主要用于实施什么类型的数据完整性?  3.触发器能代替外键约束吗?

实验 13 数据转换服务

一、实验目的  1.了解数据导入和导出的作用。  2.掌握使用 DTS 导入/导出向导在 SQL Server 实例之间导入和导出数据的操作方法。  3.掌握使用 DTS 导入/导出向导在异构数据源之间导入和导出数据的操作方法。  4.掌握使用 DTS 设计器创建包的操作方法。 二、实验准备  1.了解数据转换的概念。  2.了解使用 DTS 导入/导出向导在 SQL  Server 和其他数据源之间导入和导出数据的方法 和步骤。  3.了解使用 DTS 设计器创建 DTS 包的方法和步骤。 三、实验内容和步骤  1. 在企业管理器中创建一个新的 St_db 数据库, 然后使用 DTS 导入/导出向导将 student_db  数据库中的所有表导入到 St_db 数据库中。  2.将 student_db 数据库的 St_Info 表中的所有数据导出到文本文件中,文本文件存储位置 为 F:\xsjbxx.txt。数据之间用“, ”隔开,字符型数据用单引号引起来。  3.使用 Access 创建一个 student.mdb 数据库,并在其中创建一个名为 xsjbxx 的数据表, 表中录入如图 13.1 所示的 4 条记录。 然后将 student.mdb 数据库的 xsjbxx 表中的所有数据追加

(34)

到 student_db 数据库的 St_Info 表的末尾,并查看 St_Info 表是否增加了 student.mdb 数据库中 的 xsjbxx 表的 4 条记录。 图 13.1  xsjbxx 表数据的录入情况 提示:在“选择源表和视图”对话框的“目的”列中,系统自动给出了默认的目的表名 称 “ [student_db].[dbo].[ 班 级 情 况 ] ” 。 此 时 将 系 统 给 出 的 默 认 表 名 称 改 为 “ [student_db].  [dbo].[St_Info]” ,如图 13.2 所示。单击此对话框的“转换”列中的 按钮,弹出“列映射和转 换”对话框,在“列映射”选项卡中选中“在目的表中追加行”单选项,如图 13.3 所示。 图 13.2  “选择源表和视图”对话框 图 13.3  “列映射和转换”对话框

(35)

4.将 student_db 数据库的 St_Info 表中的 St_ID、St_Name、St_Sex、Cl_Name 4 个数据列 的数据导出到 stu.xls 中,数据保存的工作表名为“学生基本信息” 。 提示:在“指定表复制或查询”对话框中选中“用一条查询指定要传输的数据”单选项, 如图 13.4 所示。在此对话框中单击“下一步”按钮,弹出“键入 SQL 语句”对话框,在其中 手动输入 SQL 查询语句或单击“查询生成器”按钮采用图形方式构建查询语句,对应的查询 语句如图 13.5 所示。 图 13.4  “指定表复制或查询”对话框 图 13.5  “键入 SQL 语句”对话框  5.使用 DTS 设计器创建一个本地包,将 student_db 数据库中的 St_Info 表、C_Info 表、  S_C_Info 表导出到 Access 的 stu.mdb 数据库中。 提示:利用 DTS 设计器之前,应该确保在计算机磁盘中已经存在一个可以用于存放数据 的 stu.mdb 数据库。在本例中首先利用 Access 创建一个空的 stu.mdb 数据库,然后再使用 DTS  设计器创建本地包。 四、实验思考  1. 不涉及 SQL Server 数据库, 利用 DTS 导入/导出向导将 Access 数据库直接导出到 Excel

(36)

文档,应该如何操作?  2.使用 DTS 导入/导出向导创建一个 DTS 包,使它从 student_db 的 St_Info 表中提取性别 为“男”的所有数据并导出到一个 Excel 文件中,应该如何操作?

实验 14 数据库的安全管理

一、实验目的  1.了解 SQL Server  数据库安全管理的基本内容、相关概念及意义。  2.掌握在企业管理器中进行安全管理的基本操作方法。  3.学会综合运用多种安全管理方法来完成网络环境下的数据库安全设置。 二、实验准备  1.明确要进行的安全管理的组合方式及优点。  2.规划要创建的登录账户、数据库用户的名称及密码等属性。  3.规划实验涉及对象的权限和角色等的设置情况。  4.了解安全管理各项操作的一些不同方法和步骤。  5.了解局域网的一些基础知识。 三、实验内容及步骤  1.在 Windows 系统中新建一个用户,练习并掌握将其加入或删除某用户组的操作,掌握 删除 Windows 用户和修改用户密码的操作方法。  2.在 SQL Server 2000 企业管理器中新建一个登录账户,用户名及密码自定。练习并掌握 删除登录账户、修改其相关属性的操作方法。  3.新建一个数据库用户并与上面创建的登录账户关联。所要操作的数据库和用户名等参 数自定。练习并掌握删除数据库用户、取消与登录账户关联、修改相关属性的操作方法。  4.对以上用户设置一定的权限(要求进行权限组合设置,即必须具有对象权限、语句权 限和隐含权限中的两种或三种) ,并且要以权限管理和角色管理两种方式分别完成以上设置。 练习并掌握权限修改、权限取消等基本操作方法。  5.以本机为服务器、邻机为客户机,创建查询来验证用以上步骤新建的登录及设置的权 限是否正确,以判断上述实验内容是否正常完成。如出现异常,请分析并重复以上实验步骤, 查找原因,直至结果正确。  6.以邻机为服务器、本机为客户机,重复上一步骤的实验内容,最终完成局域网环境下 的安全管理实验。 四、实验思考  1.当同一用户同时属于不同的角色时,该用户所具有的权限是如何确定的?  2.如果这些角色的权限之间有冲突,系统是如何确定该用户的最终权限的?

(37)

实验 15  Visual Basic 简单程序的应用

一、实验目的  1.掌握 Visual Basic 的基本数据类型以及变量和常量的使用。  2.学会使用选择和循环等语句编写应用程序。  3.学会使用一些常用的标准函数。  4.学会使用数组解决与数组相关的问题。 二、实验准备  1.熟悉 Visual Basic  集成开发环境。  2.了解变量和常量的定义与引用方法。  3.了解数组的声明和数组元素的引用。  4.了解 Print 方法在窗体上输出变量和常量的用法。  5.了解程序设计的三种基本结构,学会使用 If、Select Case、For、Do 等语句控制程序结构。 三、实验内容及步骤  1.分析以下程序的结果并检验。  Private Sub Form_Click()  Dim i1 As Integer, a2 As Double, s3 As String, b4 As Boolean  i1 = 123.45  a2 = 123.45  s3 = "123.45"  b4 = True  Print i1, a2, s3, b4  Print Date, Time  Print i1 ^ 2 + Sqr(a2) + s3  '语句中的 Sqr()函数是求平方根函数  Print i1 & a2 & s3  '此语句中的&与各变量之间一定要有空格  End Sub  在当前的 Form1 窗体中输入以上代码。 运行时单击 Form1 窗体, 窗体上会出现什么数据? 提示:Date 和 Time 分别是获取当前系统日期和时间的函数;Rnd 为产生(0,1)之间随机数 (任意的一个数) 的函数; Int 是取整函数, Int((20 ­ 10 + 1) * Rnd + 10)的功能是产生一个[10,20]  之间的随机整数。  2.以下程序的功能是从键盘输入  x、y、z  三个整数,求 其中的最大值并以消息框显示出来,运行界面如图 15.1 所示。  Private Sub Form_Click()  Dim x As Integer, y As Integer, z As Integer  Dim max As Integer  ' max 用于存放最大值  '  以下三个语句用于从键盘输入 x、y、z 的值  x = InputBox ("输入整数 x:", "输入")  y = _________("输入整数 y:", "输入")  z =_________ ("输入整数 z:", "输入")  图 15.1  运行时的消息框界面

(38)

'  以下 If 语句用于求 x、y、z 中的最大者,并存放到 max 中  If x > y Then  max = _________  Else  max =_________  End If  If max < z Then  max = z  End If  '  以下代码使用消息框输出如图 15­1 所示的信息  __________ x & "," & y & "," & z & "中的最大值为:" & max, , "求最大值"  End Sub  在当前 Form1 窗体的代码窗口中输入并完成以上程序,使之能实现题目要求的功能。 提示: (1)InputBox()函数的功能是产生一个对话框作为输入数据的界面,等待用户输入 数据并返回所输入的内容。 其格式为 InputBox(prompt[, title][, default][, xpos, ypos][, helpfile,  context])。 (2)End Sub 语句上面的那条语句中的&与各变量之间一定要有空格。  3.某运输公司的运费计算标准如下:运输 1 吨货物且距离为 50 公里以下时,收费 1 元/  公里;距离为 50 公里以上时,超过部分加收 0.1 元/公里;距 离超过 1000 公里时,按上述收费标准打 0.95 折。试计算某 人将 t 吨货物运输 s 公里,应收多少运费? 要求使用 Select Case 语句实现, 运行界面如图 15.2 所示。 提示: (1)运输距离与货物重量通过文本框输入,使用  Val(<字符串表达式>)函数将<字符串表达式>转换为数字,例 如 Val("10xy")的返回值是数值 10。 (2)Case 引导的表达式用 To 关键字确定范围,例如 Case  1  To  50 表示运输距离为 50  公里以下。  4.在 VB 中执行以下程序段,其运行结果为 10,请在横线处填入合适的语句。  Private Sub Command1_Click()  i = 0: j = 10  Do While _______  i = i + 1  j = j ­ 1  k = i + j  Loop  Print k  End Sub  5.编程求 n!=1´2´3´…´n,要求程序用文本框输入 n 和 n!的值。读者可以参照图 15.2 所 示的界面进行设计。  6.以下程序段是通过人机对话的形式从键盘输入 4 个数据存入数组中,然后从中找出最 大的数并输出。请在横线处填入合适的内容,实现程序的功能。  Private Sub Form_Click()  Dim a(3) As Single  For i = 0 To 3  图 15.2  运费计算的运行界面

(39)

a(i) = InputBox("输入" & i & "的值")  Next i  Max = a(0)  For i = 1 To 3  If Max < a(i) Then  ____________  End If  Next i  __________  End Sub  7.在数组 a 中存放 10 个数:20、32、13、4、78、94、43、6、57、  86,求最小值。要 求数据在程序运行过程中通过键盘输入,运行结果由消息框给出。  8.在标题为“打印图案” 、背景色为黄色的窗体上设置一个标题为“开始” 、命名为  Command1 的按钮;再设置一个文本框(命名为 Text1)用于接收输入。运行时,在文本框中 输入一个表示行数的整数 n,单击“开始”按钮,先判断 n 是否为正整数,若是,则在窗体上 打印类似如下的图案,图案颜色为红色,打印的位置为紧挨窗体左边界,实际的行数为文本框 中的正整数;若 n≤0,则在窗体上打印“请输入正整数” 。  1  2  2  3  3  3  4  4  4  4  5  5  5  5  5  6  6  6  6  6  6  (1)设计符合题意的界面,改正以下代码中的错误并补充代码以满足题意要求。  Private Sub Command1_Click()  Dim n As Integer  n = Text1.Text  For i = 1 To n  Print String(i, Trim(Str(i)))  Next i  End Sub  提示: ①  String(number,character)  函数返回 number 个 character 代表的字符串的首字符组 成的字符串,例如 String(3,"abc")  的返回值是“aaa” 。 ②  Str(number)函数将数值 number 转换成字符串,通常正数前面会加入一个前导空格,如  str(5)的返回值是“5” ,str(­5)的返回值是“­5” 。 ③  Trim(character)  函数将字符串的前导空格和尾随空格去掉,例如:Trim("abc")的返回 值是“abc” 。 ④  Print 方法中的 Tab(n­i)是指后面的输出项定位从 n­i 列开始。 (2)程序运行时,分别在文本框中输入 6 和­4,分析程序的运行结果。 (3)程序运行正确后,在下列横线处填入适当的内容。 ① 窗体的 属性设为“打印图案” 。 ② 窗体的 属性设为黄色。 ③ 窗体的 属性设为红色。

(40)

四、实验思考  1.怎样设置对象属性?  2.窗体中相应单击的事件名是不是窗体名_Click?

实验 16 常用控件的操作

一、实验目的  1.掌握 Visual Basic 中常用控件的属性、方法、事件。  2.掌握常用 ActiveX 控件的特性并学会应用这些控件编程。  3.初步掌握建立基于图形用户界面应用程序的过程。  4.学会使用 Visual Basic 的常用控件设计用户界面。 二、实验准备  1.了解文本框的 ForeColor、FontSize、SelText、SelStart、SelLength 等属性。  2.了解列表框和组合框的使用、列表选项的添加。  3.了解菜单的设计方法。  4.使用定时器控件设计简单动画。 三、实验内容及步骤  1.字体大小和颜色控制。新建工程 1,在窗体 Form1 中设计如图 16.1 所示的界面,要求 文本框中的字体大小由组合框中选择的字号决定,字体颜色由单选按钮选定的颜色决定。 提示: (1)组合框的 List 属性可以设置为 8、12、16、20、24、28、32、36、40,可在属 性窗口中设置,每输入一个数要输入一个回车。 (2)要将多个单选按钮设置成按钮组,需要先画 Frame 控件,选定该控件后再添加单选 按钮控件数组,且将第一个单选按钮的 Value 属性设为 True,其他两个设为 False。 (3) 在组合框的 Click 事件过程中改变文本框的字体大小, 而在单选按钮控件数组的 Click  事件过程中改变文本框的颜色。  2.菜单设计。在实验内容 1 的工程 1 中新建窗体 Form2 并将其设为启动窗体,使用菜单 编辑器设计如图  16.2  所示的“编辑菜单”窗体,其中“编辑”菜单有“复制”和“粘贴”两 个菜单项。 图 16.1  要求设计的界面 图 16.2  “编辑菜单”运行界面

參考文獻

相關文件

二、本案中等師資類科學生(特教系以外之學生)修習之「教育專業課程版本」應為106年11月17日教育部臺教師(二)字第

第二種為專門論述西方印刷字體發展史的著作,目前具代表性例如前節所 述,哈佛大學出版的 Daniel Berkeley Updike《Printing Type: Their History, Forms and

運用想像力、形式/技巧表現一個 的夢境 回憶 的一刻,以形式/技巧,表達 的情 景/情緒。. 從評賞

学校现有教学仪器设备超过1亿元,学校图书馆纸质藏书125万册,电子图书

鉴于课程发展和教学方法的研究和实践一日千里,加上教育局课程发展处多 年来透过不同途径,搜集各界对历史课程及教学等方面的意见,课程发展议会于

如今大師這部書的繁體字版、簡體字版都已經完成出版,在簡體

Guidelines for Photocopying of Printed Works by Not-for-profit Educational Establishments (1). •

表 4-4-5 彙整了不同教育程度的民眾對祭品用品電子化的接受度之 單因子變異數分析統計結果。由表 4-4-5 的整體量表的 F