第一部分
实验指导 



“数据库原理及应用”是一门理论性较强、实践性也较强的专业基础课程,这就需要把理论知识和实际应用紧密结合起来,因此上机实验是教学中的必要环节。实验目的就是使学生在学习数据库知识时做到理论联系实际,在进行理论知识学习的同时通过上机实践进行巩固和提高。实验内容是根据主教材的理论体系和内容编写的,做到了由浅入深、循序渐进。另外,学生经过上机实验学习可以掌握SQL Server 2012数据库管理系统的实际应用技能。

对上机实验有以下3个方面的要求。

1. 实验前的准备

上机前要认真复习主教材中相关的理论内容,认真阅读指导书中的实验目的以及实验内容,根据实验步骤进行分析,选择适当的解决方法,分析实验教材的上机实验过程,并对可能遇到的问题找出解决对策,了解自身的薄弱环节,以便在上机过程中重点解决。

2. 实验过程

认真按照指导书上所给的实验内容进行操作,并且要按照所给出问题的先后顺序去完成,不要跳跃着去完成实验内容,因为各个实验在内容上是有联系的,如果顺序颠倒,实验就不能达到预期的效果。

学生应该独立完成整个实验过程,这样有助于加深对实验内容的掌握,遇到问题尽量独立解决。

3. 实验报告的撰写

上机实验结束后要按实验要求撰写实验报告。实验报告是对实验工作整理后写出的简单扼要的书面报告。撰写实验报告是做完实验后最基本的工作,它可以使学生对实验过程中获得的感性知识进行全面总结并可提高到理性认识,总结出已取得的结果,了解尚未解决的问题和实验尚需注意的事项,并提供有价值的资料。撰写实验报告的过程是学生用所学数据库的基本理论对实验结果进行分析综合,逻辑思维上升为理论的过程,也是锻炼学生科学思维,独立分析和解决问题,准确地进行科学表达的过程。

实验报告一般按指导教师要求的内容撰写,其格式和模板参见附录A。










实验一
SQL Server 2012基本服务和信息实验



数据库原理及应用实验与课程设计指导——SQL Server 2012(第2版)

实
验
一SQL Server 2012基本服务和信息实验

一、 实验目的

要求学生查看联机丛书的内容,了解SQL Server Management Studio的环境及基本操作; 了解SQL Server 2012的基本信息和系统信息。

二、 实验内容

(1) 查看SQL Server联机丛书的内容。

(2) 查看SQL Server Management Studio的环境并掌握其基本操作。

(3)  SQL Server 2012服务器管理和注册。

(4) 查看SQL Server 2012的目录结构。

(5) 使用SQL Server 2012基本系统视图查看相关信息。

三、 实验指导
1. 联机丛书

实验1.1运行SQL Server 2012联机丛书,了解相关信息。

SQL Server是由Microsoft公司推出的新一代数据库平台,SQL Server 2012在功能上对云平台进行了支持。对于SQL Server 2012这种功能强大且复杂的系统来说帮助文档的地位无可替代。因为用户要记住SQL Server中每个选项的含义以及各种TSQL语句是很困难的,所以无论对于刚开始学习数据库的人还是资深的DBA来说,帮助文档都是必不可少的工具。

说明: 联机丛书是免费的,用户可以从Microsoft的官方网站下载对应版本的联机丛书或直接查看联机丛书。



联机丛书包含下列信息类型: 

 安装和升级说明。

 有关新增功能和向后兼容性的信息。

 SQL Server 2012的技术和功能的概念性说明。

 描述如何使用SQL Server 2012各种功能的过程性主题。

 指导用户完成常见任务。

 SQL Server 2012支持的图形工具、命令提示实用工具、编程语言和应用程序编程接口(API)的参考文档。

 包含在SQL Server 2012中的示例数据库和应用程序的说明。

在SSMS中选择“帮助”菜单中的“如何实现”命令,或者直接按F1键,系统将打开SQL Server 2012联机丛书,如图1.1.1所示。



图1.1.1SQL Server 2012联机丛书界面



2. SQL Server Management Studio

实验1.2运行SQL Server Management Studio集成环境,了解其功能。

SQL Server Management Studio是一个集成环境,用于访问、配置、管理和开发SQL Server的所有组件。SQL Server Management Studio组合了大量图形工具和丰富的脚本编辑器,是一种易于使用且直观的工具,用户通过使用它能够快速、高效地在SQL Server中进行工作,如图1.1.2所示。



图1.1.2Microsoft SQL Server Management Studio窗口


SQL Server Management Studio将早期版本的SQL Server中所包含的企业管理器、查询分析器和Analysis Manager功能整合到单一的环境中。此外,SQL Server Management Studio还可以和SQL Server的所有组件协同工作,例如Reporting Services、Integration Services、SQL Server 2012 Compact Edition和Notification Services。这对于数据库的开发至关重要,也是数据库管理员获得功能齐全的单一实用工具,其中包含易于使用的图形工具和丰富的脚本撰写功能。

3. 服务器管理和注册

实验1.3服务器管理的相关实验。

这里主要介绍用SQL Server配置管理器完成启动、暂停和停止服务的操作,其操作步骤如下: 

单击“开始”→Microsoft SQL Server 2012→“配置工具”,选择“SQL Server配置管理器”,出现如图1.1.3所示的SQL Server Configuration Manager窗口。单击“SQL Server 2012服务”选项,在右边可以看到本地所有的SQL Server服务,包括不同实例的服务。



图1.1.3SQL Server Configuration Manager窗口



如果要启动、停止、暂停SQL Server服务,用鼠标指针指向服务名称,然后右击,在弹出的快捷键菜单里选择“启动”“停止”“暂停”命令即可。

实验1.4服务器注册的相关实验。

服务器的注册主要为注册本地或者远程SQL Server服务器。打开SQL Server Management Studio窗口进行服务器注册,注册步骤如下: 

(1) 在“视图”菜单中选择“已注册的服务器”命令显示出已注册的服务器,如图1.1.4所示。



图1.1.4已注册的服务器



(2) 在右上角已注册的服务器中选择注册类型进行相应服务类型注册。

(3) 在所选服务类型的树形架构的根部右击,选择“新建服务器组”命令进行组的建立,如图1.1.5所示。

(4) 在新建的服务器组下面注册服务器,右击“我的服务器组”结点,弹出快捷菜单,选择“新建服务器注册”命令,弹出如图1.1.6所示的“新建服务器注册”对话框。然后填写服务器名称,选择相应的认证方式,输入用户名及密码,完成注册。

4. SQL Server 2012的目录结构

在安装SQL Server 2012时可以指定存储SQL Server程序和数据文件的目录,默认安装文件夹的路径为“C: \Program Files\Microsoft SQL Server”。




图1.1.5新建服务器组




图1.1.6“新建服务器注册”对话框





进入“C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL”后的窗口如图1.1.7所示。



图1.1.7SQL Server 2012的目录结构



下面介绍主要文件夹。

 Backup: 此文件夹最初为空。它是SQL Server 2012创建磁盘文件备份设备的默认存储位置。

 Binn: 此文件夹是Windows客户和服务器的可执行文件、在线帮助文件和扩展存储过程的DLL文件所在的存储位置。

 DATA: 此文件夹是所有数据库的数据文件和日志文件的默认存储位置。这些数据库文件中还包括SQL Server 2012的系统数据库文件。

 Log: 此文件夹存储SQL Server 2012的日志文件,存放提示、警告和错误信息。

5. SQL Server 2012基本系统信息

SQL Server 2012的物理存储由若干数据库构成,系统数据库如表1.1.1所示。

如果选择系统数据库并右击,选择“属性”命令,可以打开该系统数据库的属性对话框查看相应信息。




表1.1.1SQL Server 2012系统数据库


数据库名称数据库描述
mastermaster数据库记录SQL Server系统的所有系统级信息,主要包括实例范围的元数据、端点、链接服务器和系统配置设置以及记录了所有其他数据库的存在、数据库文件的位置和SQL Server的初始化信息
model提供了SQL Server实例上创建的所有数据库的模板
msdb主要由SQL Server代理用于计划警报和作业
tempdbtempdb系统数据库是一个全局资源,可供连接到SQL Server实例的所有用户使用,并可用于保存显式创建的临时用户对象、SQL Server数据库引擎创建的内部对象等




在SQL Server 2012中提供了相当丰富的系统视图,能够从宏观到微观、从静态到动态反映数据库对象的存储结果、系统性能、系统等待事件等; 同时保留了与早期版本兼容的视图,主要区别在于SQL Server 2012提供了新系统视图,并且内容更加全面、丰富且更加注重命名规则。

Microsoft SQL Server上的每个数据库的主要信息作为该表的一条记录。最初安装SQL Server时,sysdatabases只包含master、model、msdb、tempdb等系统数据库的一些信息项。

SQL Server 2012的几乎所有对象信息都存在于sysobjects系统视图中,同时又在不同的系统视图中保留了相应的副本,对于函数、视图、存储过程、触发器等相应的对象详细资料存储于新的sys.sql_modules视图中。 

实验1.5查看数据库层面的存储结构信息。

(1) 查询数据库服务器的概要情况: 


SELECT * FROM SYS.SERVERS

WHERE SERVER_ID=0


兼容性视图: SYS.SYSSERVERS。

(2) 查询各个数据库的详细信息: 

SELECT * FROM SYS.DATABASES


兼容性视图: SYS.SYSDATABASES。

(3) 查询文件组的详细信息: 


SELECT * FROM SYS.FILEGROUPS


兼容性视图: SYS.SYSFILEGROUPS。

(4) 查询各个数据库文件的详细信息: 

SELECT * FROM SYS.MASTER_FILES


兼容性视图: SYS.SYSALTFILES。

(5) 查询当前数据库文件的详细信息: 

SELECT * FROM SYS.DATABASE_FILES


兼容性视图: SYS.SYSFILES。

(6) 查询数据空间的详细情况,可以是文件组或分区方案: 


SELECT * FROM SYS.DATA_SPACES



实验1.6查看数据库中数据表的存储信息。

用户通过以下系统表可以大致了解数据表在数据库中存储的一些系统信息。

首先创建一张表和一些索引。

CREATE TABLE test

(

id int  NOT NULL,

name char(100) NULL,

CONSTRAINT PK_test PRIMARY KEY CLUSTERED (id ASC)

)

CREATE NONCLUSTERED INDEX IX_test ON test(name)



(1) 由于绝大多数的用户对象信息都出自SYS.OBJECTS表,根据表名称可以查询test表的相关信息:

SELECT * 

FROM SYS.OBJECTS 

WHERE type_desc='USER_TABLE' AND NAME='test'



(2) 查询与test表相关的所有对象: 

SELECT * FROM SYS.OBJECTS 

WHERE type_desc='USER_TABLE' AND NAME='test' OR parent_object_id IN 

(SELECT object_id FROM SYS.OBJECTS 

WHERE type_desc='USER_TABLE' AND NAME='test')



(3) 查询test表的字段详细信息,并查询出相关column_id的信息: 

SELECT * FROM SYS.COLUMNS 

WHERE OBJECT_ID='1483152329'



(4) 查询test表中的索引文件信息,可以清楚地看到存在两个索引: 

SELECT * FROM SYS.INDEXES 

WHERE OBJECT_ID='1483152329'


兼容性视图: SYSINDEXES。

(5) 查询test表的分区信息: 

数据库中所有表和索引的每个分区在表中各对应一行。在此处可以看到该表有两个分区,聚集索引即表本身,还有一个是name的非聚集索引。partition_id即分区的ID。hobt_id包含此分区的行的数据堆或B树的ID。

SELECT * FROM SYS.PARTITIONS 

WHERE OBJECT_ID='1483152329'



分配单元情况,数据库中的每个分配单元都在表中占一行。

SELECT * FROM SYS.ALLOCATION_UNITS


(6)  SYS.ALLOCATION_UNITS和SYS.PARTITIONS一起使用能够反映出某个对象的页面分配和使用情况:

SELECT * FROM SYS.ALLOCATION_UNITS U,SYS.PARTITIONS P

WHERE U.TYPE IN (1,3) AND U.CONTAINER_ID=P.HOBT_ID AND P.OBJECT_ID='1483152329'

UNION ALL

SELECT * FROM SYS.ALLOCATION_UNITS U,SYS.PARTITIONS P

WHERE U.TYPE =2 AND U.CONTAINER_ID=P.PARTITION_ID AND P.OBJECT_ID='1483152329'



(7) 查询每个分区的页和行计数信息: 
SELECT * FROM SYS.DM_DB_PARTITION_STATS 

WHERE OBJECT_ID='1483152329'


(8) 查询索引的详细字段情况: 

SELECT * FROM SYS.INDEX_COLUMNS 

WHERE OBJECT_ID='1483152329'



兼容性视图: SYSINDEXKEYS。

(9) 查询数据库用户表: 

SELECT * FROM SYS.DATABASE_PRINCIPALS


兼容性视图: SYSUSERS。

(10) 查询数据库数据类型表: 

SELECT * FROM SYS.TYPES


兼容性视图: SYSTYPES。

四、 注意事项

(1) 在服务器已经“停止”或“暂停”的情况下需要相关服务时应重新启动SQL Server 2012服务器。

(2) 系统数据信息一般都存储在系统数据库master中。

五、 思考题

(1) 在SQL Server Management Studio中可以进行哪些常用的操作?

(2) 如何查看函数、视图、存储过程、触发器等相应对象的详细信息?

六、 练习题

1. 分析实验指导部分中SQL Server 2012基本系统信息例子的实验结果。

2. 创建一个新的数据库,查看数据库存储的相关信息。

3. 在创建的数据库中创建一个新的数据表,查看相关系统信息。

4. 在创建的数据库中创建一个存储过程,查看相关系统信息。










实验二

数据库创建与管理实验




实
验
二数据库创建与管理实验


一、 实验目的

要求学生熟练掌握和使用SQL Server Management Studio、TSQL语句创建和管理数据库,并学会使用查询分析器接收TSQL语句和进行结果分析。

二、 实验内容

(1) 创建数据库。

(2) 查看和修改数据库的属性。

(3) 修改数据库的名称。

(4) 删除数据库。 

三、 实验指导
1. 创建数据库

在SQL Server 2012中创建数据库的方法有两种,一种是使用SQL Server Management Studio创建数据库; 另一种是使用TSQL语句创建数据库。

实验2.1使用SQL Server Management Studio创建教学管理数据库,其数据库名为JXGL,初始大小为3MB,最大为50MB,数据库按增量为1MB的自动增长方式增长; 日志文件初始为1MB,最大可增长到20MB,按10%增长。数据库的逻辑文件名为JXGL、物理文件名为JXGL.mdf,存放路径为“D:\JXGLSYS”。日志文件的逻辑文件名为JXGL_log、物理文件名为JXGL_log.ldf,存放路径为“D:\JXGLSYS”。

步骤如下: 

(1) 在“对象资源管理器”中选中“数据库”文件夹,然后右击,在弹出的快捷菜单上选择“新建数据库”命令,打开“新建数据库”对话框,如图1.2.1所示。



图1.2.1“新建数据库”对话框



(2) 在“新建数据库”对话框的“数据库名称”文本框中输入“JXGL”,并修改数据库中数据文件的文件名、初始大小、保存位置。

(3) 单击“确定”按钮就可以创建JXGL数据库。在SQL Server Management Studio窗口中出现JXGL数据库标志,这表明建库工作已经完成。

说明: 由于文件能自动增长,所以初始大小不要设置得太大,一般不设置其最大值,考虑到硬盘的大小,最大值一定要小于所在盘的大小。



实验2.2使用TSQL语句创建学籍管理数据库,其数据库名为EDUC,初始大小为10MB,最大为50MB,数据库自动增长,增长方式是按5%的比例增长; 日志文件初始为2MB,最大可增长到10MB,按1MB的增量增长。数据库的逻辑文件名为student_data、物理文件名为student_data.mdf,存放路径为“D:\sql_data”。日志文件的逻辑文件名为student_log、物理文件名为student_log.ldf,存放路径为“D:\sql_data”。

单击常用工具栏中的“新建查询”按钮就可以新建一个数据库引擎查询文档。参照教材的第5章,在查询文档中输入创建数据库的代码。


CREATE DATABASE EDUC

ON PRIMARY

(

NAME=student_data,

FILENAME='D:\sql_data\student_data.mdf',

SIZE=10MB,

MAXSIZE=50MB,

FILEGROWTH=5%

)

LOG ON

(

NAME=student_log,

FILENAME='D:\sql_data\student_log.ldf',

SIZE=2MB,

MAXSIZE=10MB,

FILEGROWTH=1MB

)


正确输入后,按键盘上的F5键或单击“执行”按钮就可以执行该SQL语句创建指定数据库文件位置的数据库。

2. 查看数据库属性

对已经建好的数据库有时还需要对它的属性参数进行查看和修改。在Microsoft SQL Server 2012系统中查看数据库信息有很多种方法。

实验2.3使用SQL Server Management Studio查看和修改数据库属性。

查看和修改EDUC数据库属性的步骤如下: 

(1) 在“对象资源管理器”中展开“数据库”文件夹,右击EDUC,在弹出的快捷菜单中选择“属性”命令,出现“数据库属性EDUC”对话框,如图1.2.2所示。



图1.2.2“数据库属性EDUC”对话框



在“常规”选择页中是数据库的基本信息,不允许用户修改。

(2) 在该对话框的“文件”选择页中能够对数据库文件进行修改,既可以增加数据文件,也可以删除数据文件,还可以修改数据库文件的逻辑名、大小、增长率。

说明: 不可以修改数据库文件的文件类型、文件所在的文件组、路径及文件名。




(3) 在“文件组”选择页中可以查看当前数据库的文件组情况,并且可以增加、删除文件组,修改文件组信息。

(4) 在该对话框中还可以对选项、权限等进行设置。

实验2.4使用目录视图、系统函数和系统存储过程等查看有关数据库的基本信息。

(1)  通过目录视图sys.databases查看数据库的属性。

通过查询sys.databases目录视图来查看EDUC数据库的几个属性。此例返回数据库ID号(database_id)、数据库是只读还是读写的(is_read_only)、数据库的排序规则(collation_name)和数据库兼容级别(compatibility_level)。

USE EDUC

GO

SELECT database_id,is_read_only,collation_name,compatibility_level

FROM sys.databases WHERE name = 'EDUC'

GO



(2) 使用系统函数DATABASEPROPERTYEX查看数据库的属性。

AUTO_SHRINK检查数据库的自动收缩是否开启,因为频繁收缩和展开数据库可能会导致物理碎片增多。

USE EDUC

GO

SELECT DATABASEPROPERTYEX('EDUC', 'IsAutoShrink')

GO



此示例返回EDUC数据库中AUTO_SHRINK数据库选项的状态,返回值1表示将该选项设置为ON; 返回值0表示将该选项设置为OFF。

(3) 使用系统函数OBJECTPROPERTY查看当前数据库中所有用户表的名称。

USE JXGL

GO

SELECT OBJECT_NAME(id) AS '数据表名'

FROM sysobjects

WHERE xtype='U' AND OBJECTPROPERTY(id,'IsMSShipped')=0

GO



其中主要用到了系统表sysobjects以及其属性xtype,并使用OBJECTPROPERTY系统函数来判断该对象是不是在安装SQL Server过程中创建的。

(4) 使用系统存储过程sp_spaceused查看EDUC数据库的空间信息。

USE EDUC

GO

EXEC sp_spaceused 

GO


在Microsoft SQL Server 2012系统中还可以使用其他一些目录视图、函数、存储过程查看有关数据库的基本信息,如表1.2.1所示。



表1.2.1查看数据库信息的系统


类型系统视图、函数、过程说明
目录视图
sys.databases查看有关数据库的基本信息
sys.database_files查看有关数据库文件的信息
sys.filegroups查看有关数据库文件组的信息
sys.master_files查看数据库文件的基本信息和状态信息



系统函数

databaseproperty()查看指定数据库中的指定选项信息
suser_name()查看用户登录名
db_name()查看数据库名
object_name()查看数据库对象名
系统存储过程
sp_helpdb显示有关数据库和数据库参数信息
sp_spaceused查看数据库空间信息
sp_dboption查看数据库选项信息




3. 修改数据库属性

修改数据库文件的操作主要有增加、修改和删除数据库的数据文件、日志文件等操作。

实验2.5修改数据库的相关属性。

(1) 在数据库JXGL中增加辅助数据文件xs_data,需要在数据库引擎查询文档中输入以下代码: 

USE JXGL

GO

ALTER DATABASE JXGL

ADD  FILE

( 

NAME=xs_data,

FILENAME='D:\JXGLSYS\xs_data.ndf',

SIZE=3MB,

MAXSIZE=10MB

 )

GO



在增加数据文件前先使用语句ALTER DATABASE <数据库名>获得修改权限,再添加数据文件。其具体参数也有5项,与创建数据文件相同。在添加数据文件项中NAME项是必不可少的。

(2) 增加辅助日志文件。在数据库JXGL中增加事务日志文件xs_log,在数据库引擎查询文档中输入以下代码: 

USE JXGL

GO

ALTER DATABASE JXGL

ADD LOG FILE

( 

NAME=xs_log,

FILENAME='D:\JXGLSYS\xs_log.ldf',

FILEGROWTH=10% 

)

GO



增加日志文件与增加数据文件的方法相同,唯一不同的是增加数据文件语句是ADD FILE,而增加日志文件语句是ADD LOG FILE。

正确输入后,按键盘上的F5键或单击“执行”按钮就可以执行该SQL语句,这样就给数据库JXGL增加了一个新的事务日志文件。

用户可以展开“数据库”,选择JXGL后右击,在弹出的快捷菜单中选择“属性”命令,打开“数据库属性JXGL”对话框,在“文件”选择页中查看添加的文件。在“文件”选择页中可以查看到添加的数据文件和日志文件,如图1.2.3所示。



图1.2.3查看新添加的文件



(3) 修改数据库文件。修改数据库JXGL中的日志文件的初始大小和最大值,在实验2.1中添加的日志文件xs_log的“初始大小”为1MB、“增长的最大限制”为2097152MB。下面修改其“初始大小”为3MB、“增长的最大限制”为5MB。在数据库引擎查询文档中输入以下代码: 

USE JXGL

GO

ALTER DATABASE JXGL

MODIFY FILE

( 

NAME=xs_log,

SIZE=3,

MAXSIZE=5 

)

GO


在修改数据库文件前要先用ALTER DATABASE <数据库名>获得修改权限,然后再修改数据库文件,代码是MODIFY FILE。另外还要注意要修改哪个数据库文件,用name属性指定,可以修改数据库文件的大小、最大值、增长率等属性。修改数据库的数据文件与事务日志文件的代码是相同的。


正确输入后,按键盘上的F5键或单击“执行”按钮就可以执行该SQL语句,这样就修改了数据库JXGL的xs_log文件。同样可以在“数据库属性JXGL”对话框的“文件”选择页中查看修改的文件属性。

(4) 删除日志文件。删除XSGL数据库中的xs_log日志文件,需要在数据库引擎查询文档中输入以下代码: 

USE JXGL

GO

ALTER DATABASE JXGL

REMOVE FILE xs_log

GO


在删除数据文件前要先使用语句ALTER DATABASE <数据库名>获得权限,然后再删除数据文件。

正确输入后,按键盘上的F5键或单击“执行”按钮就可以执行该SQL语句,这样就删除了数据库JXGL的日志文件xs_log。

4. 修改数据库名称

(1) 使用SQL Server Management Studio修改数据库名称。

在“对象资源管理器”窗口中右击需要改名的数据库,从弹出的快捷菜单中选择“重命名”命令,当数据库名称处于可编辑状态时输入新名即可。

(2) 使用TSQL语句修改数据库名称。

修改数据库名称的语句的语法格式如下: 

ALTER DATABASE <原数据库名称>

MODIFY NAME = <新数据库名称>



(3) 将学籍管理数据库的名字EDUC改为XJGL。

GO

ALTER DATABASE EDUC

MODIFY NAME=XJGL

GO



另外也可以使用系统存储过程sp_renamedb,语法格式如下: 

sp_renamedb [@old_name=]'old_name', [@new_name=]'new_name'

GO

EXEC sp_renamedb 'EDUC','SJGL'

GO 




5. 删除数据库

数据库的删除方法有两种,即使用SQL Server Management Studio直接删除,或者使用TSQL代码进行删除。

1) 使用SQL Server Management Studio删除数据库

进入SQL Server Management Studio界面后进行如下操作: 

选择要删除的数据库,然后右击,在弹出的快捷菜单中选择“删除”命令,弹出“删除对象”对话框,在该对话框中单击“确定”按钮即可。

2) 使用TSQL语句删除数据库

在实际编程中一般都是使用代码来删除数据库的,在数据库引擎查询文档中输入以下代码: 

DROP DATABASE <数据库名>


正确输入后,按键盘上的F5键或单击“执行”按钮执行该SQL语句,这样就删除了指定的数据库。

四、 注意事项

(1) 在创建大型数据库时要尽量把主数据文件和事务日志文件放在不同的路径下,这样能够提高读取数据的效率。

(2) 更改数据库名称只是更改了数据库的物理名称,不会更改数据库的逻辑名称,即主数据文件的名称。

五、 思考题

(1) 了解SQL Server 2012物理数据库中所包含的几种类型的文件。

(2) 了解SQL Server 2012中数据文件和日志文件各自的作用。

六、 练习题

1. 使用SQL Server Management Studio创建一个学生成绩数据库,初始大小为5MB,最大为30MB,数据库自动增长,增长方式是按1%的比例增长; 日志文件初始为1MB,最大可增长到10MB,按每次1MB的速度增长。数据库的名称为student_grade,存放路径为“D:\XSCJSYS”。日志文件的名称为student_log,存放路径为“D:\XSCJSYS”。

2. 使用TSQL创建一个图书管理数据库,名为TSGL,初始大小为1MB,最大为20MB,数据库自动增长,增长方式是按5%的比例增长; 日志文件初始为2MB,最大可增长到10MB,按每次1MB的速度增长。数据库的逻辑文件名为books_data、物理文件名为books_data.mdf,存放路径为“D:\TSGLSYS”。日志文件的逻辑文件名为books_log、物理文件名为books_log.ldf,存放路径为“D:\TSGLSYS”。









实验三

数据表创建与管理实验




实
验
三数据表创建与管理实验




一、 实验目的

要求学生熟练掌握SQL Server Management Studio的使用和使用TSQL语句进行数据表的创建与删除,并对数据表和表中的数据进行有效的管理。

二、 实验内容

分别使用SQL Server Management Studio和TSQL语句创建和删除数据表,修改表结构,输入数据、更新数据。

三、 实验指导
1. 数据表的定义

实验3.1在JXGL数据库中使用SQL Server Management Studio建立S、C和SC表,结构如表1.3.1~表1.3.3所示。


表1.3.1学生表S的结构


列名描述数据类型允许Null值说明

sno学号char(8)NO主键
sname姓名char(8)NO—
age年龄smallintYES—
sex性别char(2)YES—
sdept所在系varchar(50)YES—





表1.3.2课程表C的结构


列名描述数据类型允许Null值说明

cno课程号char(4)NO主键
cname课程名char(20)NO—
credit学分floatYES—
pcno先修课char(4)YES—
describe课程描述varchar(100)YES—




表1.3.3选课表SC的结构


列名描述数据类型允许Null值说明


sno学号char(8)NO
cno课程号char(4)NO主键(同时都是外键)

grade成绩floatYES—


具体步骤如下: 

(1) 在SQL Server Management Studio的“对象资源管理器”中单击“数据库”前面的“+”号,选择“表”并右击,在弹出的快捷菜单中选择“新建表”命令,进入设计表字段的对话框,如图1.3.1所示。



图1.3.1设计表字段的对话框



(2) 在设计表字段的对话框中共有3列,即列名、数据类型、允许Null值。“列名”就是数据库表的字段名,而“数据类型”是字段值的类型,即整型、字符型、日期时间型等类型,“允许Null值”用来设置该字段中的值能不能为空。

“列属性”显示在表设计器的底部窗格中。

展开“常规”项可显示“名称”“数据类型”“默认值或绑定”“允许Null值”“长度”。 


 名称: 显示所选列的名称。 

 数据类型: 显示所选列的数据类型。若要编辑此属性,只需单击该属性的值,展开下拉列表,然后选择其他值。

 默认值或绑定: 当没有为此列指定值时显示此列的默认值。此字段的值既可以是SQL Server默认约束的值,也可以是此列被绑定到的全局约束的名称。在该下拉列表中包含数据库中定义的所有全局默认值。若要将该列绑定到某个全局默认值,可以从下拉列表中进行选择。另外,若要为该列创建默认约束,可以直接以文本格式输入默认值。

 允许Null值: 指示此列是否允许空值。若要编辑此属性,只需在表设计器的顶部窗格中选中与列对应的“允许Null值”复选框。

 长度: 显示基于字符的数据类型所允许的字符数。此属性仅可用于基于字符的数据类型。 

展开“表设计器”可以看到以下属性。 

 标识规范: 显示此列是否对其值强制唯一性的相关信息。此属性的值是否为标识列以及是否与子属性“是标识”的值相同。 

 标识种子: 显示在此标识列的创建过程中指定的种子值。在默认情况下会将值1赋给该单元格。

 标识增量: 显示在此标识列的创建过程中指定的增量值。在默认情况下会将值1赋给该单元格。

 计算列规范: 显示计算所得列的相关信息。该属性显示的值与“公式”属性的值相同,可显示计算所得列的公式。 

 公式: 显示计算所得列的公式。

 简洁数据类型: 按与SQL CREATE TABLE语句同样的格式显示有关字段的数据类型的信息。 

 排序规则: 显示当使用列值对查询结果的行进行排序时,SQL Server默认情况下对列应用的排序规则顺序。 



图1.3.2“选择名称”对话框

(3) 设计好表的字段后单击“关闭”按钮(或直接单击“保存”按钮),弹出“选择名称”对话框,如图1.3.2所示。

(4) 单击“确定”按钮就完成了数据表的创建。

使用同样的方法建立如表1.3.2中结构的C表和如表1.3.3中结构的SC表。

实验3.2在学生管理数据库EDUC中使用TSQL语句创建数据表,表结构如表1.3.4~表1.3.10所示。


表1.3.4院系信息表Dept_info的结构


列名描述数据类型允许Null值说明
dno院系编号char(4)NO主键
dname院系名称char(16)NO—
d_chair院系领导char(8)YES—
d_address院系地址varchar(50)YES—
tel电话号码char(12)YES—



表1.3.5班级信息表Class_info的结构


列名描述数据类型允许Null值说明
classno班级编号char(4)NO主键
classname班级名称char(16)NO—
monitor班长char(8)YES—
instructor辅导员姓名char(8)YES—
dno院系编号char(4)NO外键



表1.3.6学生信息表Student_info的结构





列名描述数据类型允许Null值说明

sno学生学号char(8)NO主键
sname学生姓名char(8)NO—
sex学生性别char(2)YES—
s_native籍贯varchar(50)YES—
birthday学生出生日期smalldatetimeYES—

dno学生所在院系编号char(4)YES外键
classno班级号char(4)YES外键
entime学生入校时间smalldatetimeYES—
home学生家庭住址varchar(50)YES—
tel学生联系电话char(12)YES—



表1.3.7教师信息表Teacher_info的结构


列名描述数据类型允许Null值说明

tno教师编号char(8)NO主键
tname教师姓名char(8)NO—
sex教师性别char(2)YES—
birthday教师出生日期smalldateYES—
dno教师所在院系编号char(4)YES外键
title教师职称char(14)YES—
home教师家庭住址varchar(50)YES—
tel教师电话char(12)YES—



表1.3.8课程信息表Course_info的结构


列名描述数据类型允许Null值说明

cno课程编号char(10)NO主键
cname课程名称char(20)NO—
experiment实验时数tinyintYES—
lecture授课学时tinyintYES—
semester开课学期tinyintYES—
credit课程学分tinyintYES—



表1.3.9学生成绩信息表SC_info的结构


列名描述数据类型允许Null值说明

sno学生学号char(8)NO
tcid上课编号char(2)NO主键(又分别是外键)
score学生成绩tinyintYES—



表1.3.10教师上课信息表TC_info的结构


列名描述数据类型允许Null值说明

tcid上课编号char(2)NO主键
tno教师编号char(8)YES外键
score学生成绩tinyintYES—
classno班级号char(4)YES外键
cno课程编号char(10)NO外键
semester学期char(6)YES—
schoolyear学年char(10)YES—
classroom上课地点varchar(50)YES—
classtime上课时间varchar(50)YES—