第2章 数据库管理
任务目标:本章设计了一个简单数据库Manage,用于对客户、货物以及客户对货物的订货信息进行管理,来帮助大家学习和理解数据库管理。通过Manage数据库应用,达到掌握SQL Server 2012的相关知识的目标,学会数据库的管理、信息的有效组织、数据库的高级应用、数据库的安全操作等技能。本章是实现Manage数据库的基础,首先应掌握SQL Server数据库的基本知识,包括数据库系统以及数据库文件结构等概念,在此基础上通过对数据库的创建、修改、删除、分离和附加等操作,完成数据库管理项目的相关任务操作。
2.1 SQL Server数据库的结构
从数据库管理员的角度,SQL Server数据库的物理表现形式是数据文件,即一个数据库由一个或多个磁盘上的文件组成。这种物理表现只对数据库管理员是可见的,对用户是透明的,可称为物理数据库。
从数据库用户的角度,SQL Server数据库是由存放数据的表和对这些数据进行各类操作的逻辑对象共同组成的一个集合。这种集合称为逻辑数据库,组成逻辑数据库的各种对象称为数据库对象。
2.1.1 数据库文件分类
SQL Server数据库是以文件的形式存储在磁盘上的,根据文件作用不同可以分为三种类型,为了便于文件管理,可将数据库文件分成不同的文件组。
1.数据库文件
● 主数据文件,是数据库的关键文件,包含数据库的启动信息、数据库对象、其他文件的位置信息以及数据等。每个数据库必须有且仅有一个主数据文件,其扩展名为.mdf。
● 辅助数据文件,用于存储未包含在主文件中的数据信息。使用辅助数据文件可以扩展数据库的存储空间。若数据库只有主数据文件来存储数据,则主数据文件的最大容量将受到整个磁盘空间的限制;若采用了辅助数据库文件,并将多个文件存放在不同的磁盘上,则数据库的容量不再受一个磁盘空间的限制。每个数据库可有0个或多个辅助数据文件,其扩展名为.ndf。
● 事务日志文件,用来记录对数据库的所有修改操作和执行每次修改的事务,保存恢复数据库所需的事务日志信息。SQL Server遵循先写日志再执行数据库修改操作(如
INSERT、UPDATE、DELETE等SQL命令)的原则,一旦发生数据库系统崩溃,数据库管理员可以通过日志文件完成数据库的修复与重建。每个数据库有一个或多个事务日志文件,其扩展名为.ldf。
注意:数据库三类数据文件的扩展名不是强制的,但最好使用这些默认扩展名,这样有助于标识文件用途。数据库文件默认存放路径为C:\Program Files\Microsoft SQL Server\MSSQL10. MSSQLSERVER\MSSQL\DATA,此路径可以改变。
2.文件组
为了扩展存储空间,在创建数据库时常将多个数据文件存放在不同的磁盘上,并把多个数据文件组成一个或多个文件组。创建数据库对象时可以指定它所在的文件组,但不能指定文件,这样当对数据库对象进行操作时,由数据库对象找到它所在的文件组,再由文件组找到组中的数据文件。数据库根据组内数据文件的大小,按比例写入组内所有数据文件中,而不是将组内第一个数据文件写满后再写第二个、第三个……这样可以使多个磁盘同时并行工作,大大提高了读写速度,又使组内的数据文件同时写满。
每个数据库中都有一个文件组作为默认文件组,即主文件组PRIMARY。若创建表或索引时没有为其指定文件组,则将从默认文件组中进行存储页分配、查询等操作。
注意:在一个数据库中可以创建多个文件组,而一个数据库文件只能属于一个文件组,事务日志文件不属于任何文件组,一个数据文件或文件组只能被一个数据库使用。
2.1.2 数据库对象
数据库中的数据按不同的形式组织在一起,构成了不同的数据库对象。当一个用户连接到数据库服务器后,看到的是这些逻辑对象,而不是存放在物理磁盘上的文件。一个数据库对象在磁盘上没有对应的文件。
SQL Server数据库对象主要包括以下几方面。
● 表:SQL Server最主要的数据库对象,是由行和列组成的二维表,作为存放和操作数据的一种逻辑结构。
● 视图:从一个或多个基表中创建的虚拟表,数据库中只存放视图的定义,数据仍然存放在基表中。
● 索引:提供加快检索数据的方式,是对数据表某些列的数据进行排序的一种结构。
● 同义词:在架构范围内为存在于本地或远程服务器上的其他数据库对象提供备用名称的一种技术手段。
● 存储过程:一组经过预编译的SQL语句集合,用于完成特定功能。
● 触发器:能够被某些操作激发并自动触发执行的一种特殊的存储过程。
● 规则:用来限制表列数据范围、保障数据完整性的一种手段。
● 默认值:在用户没有给出具体数据时,系统所自动生成的数值。
● 约束:用来保障数据的一致性与完整性的简便方法。
2.2 系统数据库
SQL Server 2012包含用户数据库和系统数据库两类。
用户数据库是由用户自行创建的数据库,存储着用户的重要数据。
2.2.1 用户数据库
系统数据库是在安装SQL Server 2012时由安装程序自动创建的数据库。系统数据库存放着SQL Server运行和管理其他数据库的重要信息,是SQL Server 2012管理数据库的依据。如果系统数据库遭到破坏,SQL Server将不能正常运行。
2.2.2 系统数据库
SQL Server 2012包含5个系统数据库,分别是:master、tempdb、model、masb和resource。其中,前4个数据库是可见的,可以在SSMS中的【对象资源管理器】窗口(见图2.1)【系统数据库】节点中看到;resource数据库为隐藏数据库,它存在于sys框架中,无法显示在SSMS【系统数据库】节点中。
图2.1 【对象资源管理器】窗口内的系统数据库
1.master数据库
master数据库是SQL Server的主控数据库,用于管理其他数据库和保存SQL Server系统信息。master数据库如果遭到破坏,SQL Server系统将无法启动。master数据库记录了SQL Server系统级的信息,包括系统中所有的登录账号、系统配置信息、所有数据库的信息、所有用户数据库的主文件地址等,这些信息都记录在master数据库的各个表中。
为了与用户创建的表相区别,这些表被称为系统表,表名多以“sys”开头。master数据库中包含的系统表很丰富,常用的部分系统表如表2.1所示。
表2.1 常用的master系统表
系统表名称 |
用 途 |
---|---|
sys_server_info |
保存服务器及安装信息 |
spt_values |
用于保存系统表的特征值 |
sysconfigures |
保存服务器选项的代码、名称、当前设置 |
sysdatabases |
保存所有数据库的代码、名称、创建日期等信息 |
syslogins |
保存系统所有登录账号 |
sysdevices |
用于保存系统数据库设备和备份的信息 |
2.tempdb数据库
临时数据库tempdb用于存储用户创建的临时表、存储过程或用户声明的全局变量,以及用户通过游标筛选出来的数据,并为数据排序提供一个临时性工作空间。当用户离开SQL Server以后,在tempdb数据库中的临时信息将被自动删除。当再次启动SQL Server时tempdb数据库将被重建,当它的空间不够用时,系统自动扩展它的大小。
使用这个临时数据库不需要特殊的权限,不管SQL Server中安装了多少个数据库,临时数据库都只有一个。tempdb数据库是SQL Server中负担最重的数据库,因为几乎所有的查询都可能需要使用它。
3.model数据库
model数据库是SQL Server 2012中的模板数据库,其中包含的各个系统表为每个用户数据库所共享。当创建一个用户数据库时,model数据库的内容会自动复制到该数据库中。通过修改模板数据库,可以对所有新数据库建立一个自定义的配置。所以我们可以把每一个新建数据库所需要的数据对象创建在model数据库中。
model数据库有19个系统表,另外还有一些视图和存储过程。表2.2中列出了model数据库中部分系统表信息。
表2.2 常用的数据库系统表
系统表名称 |
用 途 |
---|---|
sysobjects |
用于保存数据库中所有的数据库对象的信息,包括表、视图、存储过程、规则等 |
systypes |
记录系统数据类型和用户定义的数据类型 |
sysfiles |
记录数据库的数据文件和日志文件的信息 |
sysdevices |
用于保存数据库的文件组信息 |
sysusers |
记录数据库中所有的用户和角色 |
4.msdb数据库
msdb数据库用于存储报警、作业及操作员信息。SQL Server Agent(SQL Server代理)通过这些信息来调度作业,监视数据库系统的错误并触发报警,同时将作业或报警消息传递给操作员。
5.resource数据库
resource数据库包含SQL Server 2012中的所有系统对象。该数据库具有只读特性,即可以从resource数据库中读取相应的信息,但是不能够更改其信息。Resource数据库的物理文件名为mssqlsystemresource.mdf,该文件不允许移动或重新命名,否则SQL Server将不能启动。
2.3 使用SSMS操作数据库
SQL Server 2012提供的管理工具SQL Server Management Studio(SSMS)使用户能够在图形化界面中,方便而直观地完成数据库的建立、修改、删除等操作。
2.3.1 创建数据库
创建数据库实质上就是定义数据库文件与设置数据库选项,包括确定数据库的逻辑文件名与物理文件名,规划数据库文件的容量,指定文件的增长模式,设计数据库的排序规则,选择数据库的字符集,设置数据库文件的存放位置等。
微课:使用SSMS创建数据库
注意:系统会根据用户输入的数据库的名称,自动生成数据库文件的相关属性,具体如下。
● 逻辑名称:数据库的逻辑文件名。
● 文件类型:用来标识创建的文件是存储记录(行数据)的数据文件,还是存储日常事务行为的日志文件。
● 文件组:用来标识创建的数据库所归属的文件组名称。文件组包含所有的系统表。一个数据库文件只能存在于一个文件组中。日志文件不允许属于任何文件组。
● 初始大小:用来设置空数据库文件的初始空间大小值(单位默认为MB)。刚创建的数据库只有系统表,而不存在用户数据库对象,因此初始文件大小可以比较小。以后随着数据库量增长,可以自动扩展数据库的空间大小。
● 自动增长:当数据库文件在超过其初始空间大小时,该项可用以启动文件大小的自动增长功能,可设置具体的增长方式。
● 路径:数据库物理文件所存放的位置。默认情况下为SQL Server安装目录下的某个特定子目录。可以通过其右侧的按钮来指定文件的存储路径。
● 文件名:数据库物理文件的名称。该名称一般由系统根据逻辑名称按内部规则设定,也可以通过输入改变默认名称。
要创建数据库,用户必须是sysadmin或dbcreator服务器的成员,或被明确赋予了执行CREATE DATABASE语句的权限。
【任务2.1】 创建一个名为Manage的数据库,该数据库包含一个主数据库文件、一个事务日志文件,所有文件都存储在C:\Program Files\Microsoft SQL Server\data文件夹下。其中,主数据库文件初始大小为5MB,按照10%的容量增长,大小无限制。日志文件初始大小为1MB,每次增长1MB,文件最大容量为100MB。
创建Manage数据库过程操作步骤如下。
(1)启动SSMS 2012管理工具。
(2)在SSMS窗口左侧的【对象资源管理器】中展开当前服务器对象节点,右击数据库节点,选择【新建数据库】命令,如图2.2所示。弹出【新建数据库】对话框,如图2.3所示。
图2.2 新建数据库快捷菜单
图2.3 【新建数据库】对话框
(3)在对话框左上方的【选择页】窗格中选中【常规】选项卡,在对话框右侧的窗格中分别为新建的数据库提供必要的信息,如图2.4所示。
图2.4 【新建数据库】对话框
(4)在【数据库名称】文本框中输入要创建数据库的逻辑名称Manage。为【所有者】文本框选择数据库的拥有者(Owner)。数据库的拥有者又称为数据库的属主,可以是任何具有数据库权限的登录账户。此处保持系统默认值,即将数据库的拥有者设置为登录SQL Server服务器的当前用户。
(5)分别设置系统自动添加的逻辑名称为主数据文件Manage和Manage_log的事务日志文件的文件属性,其中逻辑名称和物理名称都可以更改。单击【自动增长】栏目右侧的按钮,在图2.5所示的【更改Manage的自动增长设置】对话框中选中【启用自动增长】复选框,按照题目要求分别设置文件增长和最大文件大小属性。
图2.5 创建Manage数据库
(6)分别单击主数据文件和事务日志文件【路径】表项栏目右侧的按钮,弹出【定位文件夹】对话框,将文件的保存路径改为C:\Program Files\MicrosoftSQLServer\MSSQL11. MSSQLSERVER\MSSQL\DATA,如图2.6所示,单击【确定】按钮。
图2.6 确定路径
(7)完成所有设置之后,单击【确定】按钮,退出【新建数据库】对话框。此时在【对象资源管理器】中可以看到新创建的数据库Manage,在资源管理器C:\Program Files\MicrosoftSQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA文件夹下可见SQL Server引擎生成的2个数据库物理文件,如图2.7所示。
图2.7 资源管理器中Manage数据库的物理文件
2.3.2 修改数据库属性
建立一个数据库以后,可以根据需要对该数据库的结构进行修改。修改数据库包括增删数据文件和事务日志文件个数、设置某些数据库选项等,如将Manage数据库设置为只读、将其修改为自动收缩等属性修改。可以通过打开【数据库属性】对话框,在【选择页】中的【常规】、【文件】、【文件组】、【选项】、【更改跟踪】、【权限】和【扩展属性】各个选项卡中进行查看和修改,如图2.8所示。修改完成后,单击【确定】按钮即可。
微课:修改数据库属性
图2.8 数据库属性
【任务2.2】 为Manage数据库添加一个辅助数据文件Mange_DB1,将其初始大小设置为5,自动增加10%,最大空间设置为20MB。
在Manage数据库中添加辅助数据文件操作步骤如下。
(1)选择Manage数据库节点,单击鼠标右键在弹出的快捷菜单中选择“属性”选项,如图2.9所示。
(2)在弹出的对话框中的【选择页】中选择【文件】,如图2.10所示。
图2.9 数据库快捷菜单
图2.10 【文件】选择页
(3)在【文件】选择页中单击“添加”命令按钮,在逻辑名称处输入“Mange_DB1”并设置其初始大小为5MB,如图2.11所示。
图2.11 【文件】选择页
(4)单击【自动增长】栏目右侧的按钮,在图2.12所示的【更改Mange_DB1的自动增长设置】对话框中选中自动增加10%,最大空间设置为20MB。
图2.12 设置自动增长
2.3.3 数据库的分离和附加
当数据库需要从一台计算机转移到另一台计算机,或者更改物理保存位置,可以通过数据库的分离和附加操作来完成。
1.分离数据库
分离数据库就是将数据库从SQL Server实例中卸载,但组成该数据库的数据文件和事务日志文件依然完好无损地保存在磁盘上。通过分离得到的数据库,可以重新附加到SQL Server实例上。在对数据库进行分离之前,要确保没有任何用户登录到该数据库上。
微课:分离数据库
注意:只有固定服务器角色成员sysadmin才可执行分离操作,系统数据库master、model和tempdb无法从系统分离出去。
【任务2.3】 将创建好的Manage的数据库从服务器上进行分离。
分离Manage数据库操作步骤如下。
(1)启动SSMS 2012工具。
(2)在左侧的【对象资源管理器】中展开当前服务器的对象节点,右击Manage数据库节点,选择弹出菜单【任务】下的【分离】命令,如图2.13所示。
图2.13 分离命令
(3)在打开的图2.14所示的对话框中右边窗格的【要分离的数据库】表项栏目中,显示出要分离的数据库名称、删除连接、更新统计信息、状态、消息等项目。选中【删除连接】复选框,指示终止任何现有的数据库连接;如果要更新现有的优化统计信息,应选中【更新统计信息】复选框;默认情况下,分离操作将在分离数据库时保留过期的优化统计信息;【状态】表项栏目可选择“就绪”或“未就绪”两种状态值;【消息】表项栏目显示数据库活动连接的个数。
图2.14 【分离数据库】对话框
(4)单击【确定】按钮,执行分离操作。分离成功后,该数据库将从【对象资源管理器】中的树型结构中被删除。
2.附加数据库
附加数据库就是利用分离出来的数据库文件和事务日志文件将数据库再附加到任何SQL Server系统中,而且数据库在新系统中的使用状态与它分离时的状态完全相同。
微课:附加数据库
【任务2.4】 将被分离的Manage的数据库重新附加到SQL Server服务器上。
将分离的Manage数据库附加到服务器上的操作步骤如下。
(1)启动SSMS 2012工具。
(2)在【对象资源管理器】中右击【数据库】节点,在弹出的菜单中选择【附加】命令,如图2.15所示。
图2.15 附加命令
(3)打开【附加数据库】对话框,如图2.16所示。
(4)单击【添加】按钮,打开【定位数据库文件】对话框,如图2.17所示。选择要附加数据库的主数据文件,单击【确定】按钮,返回到【附加数据库】对话框,如图2.18所示。
(5)单击【确定】按钮,数据库引擎执行附加数据库操作,被附加的数据库立即出现在【对象资源管理器】中的树型结构中,如图2.19所示。
图2.16 【附加数据库】对话框
图2.17 【定位数据库文件】对话框
图2.18 【附加数据库】对话框
图2.19 Manage数据库
2.3.4 删除数据库
对于过时的数据库或失去使用价值的数据库,应及时予以删除,以便节省系统空间,提高操作的效率。删除数据库一定要谨慎操作,数据库一旦删除,数据库中所有对象也将被删除,数据库所占用的系统空间也将被释放,存储在数据库中的重要信息将永久丢失。为防止误删除重要数据库而导致数据丢失,造成无法挽回的损失,在进行数据库删除之前,最好先对被删除的数据库进行一次备份。
微课:使用SSMS删除数据库
注意:当数据库处于正在使用、正在被恢复和正在参与复制三种状态之一时,不能删除该数据库。
【任务2.5】 删除系统中的Manage数据库。
(1)启动SSMS 2012工具,在【对象资源管理器】的Manage数据库节点上右击,执行【删除】命令,如图2.20所示。
(2)打开【删除对象】对话框,如图2.21所示。
图2.20 删除命令
图2.21 【删除对象】对话框
(3)根据应用的需求,有选择地选中对话框中的两个复选框。
● 【删除数据库备份和还原历史记录信息】复选框用来决定是否保存在进行数据库备份或还原过程中产生的历史记录。选中该复选框将删除历史记录。
● 【关闭现有连接】复选框用来保证正在被使用的数据库能够成功删除。该选项在实施删除操作前会自动关闭对于被删除数据库的连接。
(4)单击【确定】按钮,完成Manage数据库的删除操作,同时该数据库将从【对象资源管理器】中的树型结构中被删除。
2.4 使用T-SQL操作数据库
2.4.1 创建数据库
微课:使用T-SQL语句创建数据库
CREATE DATABASE语句用来创建指定的数据库,该语句的基本语法格式如下。
CREATE DATABASE数据库名
[ON [PRIMARY]
{([NAME=数据文件的逻辑名称,]
FILENAME= '数据文件的物理名称' ,
[SIZE=数据文件的初始大小,]
[MAXSIZE=数据文件的最大容量,]
[FILEGROWTH=数据文件的增长量])}[ ,…n]
LOG ON
{([NAME=事务日志文件的逻辑名称,]
FILENAME = '事务日志文件的物理名称',
[SIZE=事务日志文件的初始大小,]
[MAXSIZE=事务日志文件的最大容量 ,]
[FILEGROWTH =事务日志文件的增长量])}[ ,…n]
[COLLATE数据库的排序方式]
[FOR {ATTACH | ATTACH_REBUILD_LOG}][;]
语法说明如下。
(1)ON关键字表示数据库是根据后面的参数来创建的,LOG ON子句用于指定该数据库的事务日志文件。每个文件定义包含NAME、FILENAME、SIZE、MAXSIZE和FILEGROWTH五个参数,需用括号括起来,若存在多个文件,文件定义用逗号分隔。
(2)PRIMARY关键字指定将后面定义的数据文件加入主文件组中,也可加入用户自创建的文件组中。
(3)NAME关键字用来指定数据库文件的逻辑名。
(4)FILENAME关键字用来指定数据库文件的物理名,需要指明文件路径及带后缀的全名,用单引号引起来。
(5)SIZE关键字用于指定文件的初始大小,默认单位为MB,也可定义为其他单位(如KB、GB或TB)。数据文件初始大小为3MB,日志文件初始大小为1MB。
(6)MAXSIZE关键字用于指定文件的最大容量,单位与SIZE参数单位相同。若文件大小不受限制,表示文件可不断增长,直到磁盘空间完全被使用,此时可省略该参数,或将参数值设置为UNLIMITED。
(7)FILEGROWTH关键字用于指定数据库文件的增加量,增量采用固定大小和按比例增长两种方式,可加MB等单位或%,默认单位为MB。
(8)COLLATE关键字引导的子句用来指定数据库的默认排序方式。COLLATE子句不出现时,数据库将依照SQL Server的model系统数据库的设置来定义数据库的默认排序方式。
(9)FOR {ATTACH | ATTACH_REBUILD_LOG}子句用来指定以何种附加方式向新建数据库中添加初始数据。FOR ATTACH选项将依据已有的数据文件来创建新的数据库,此时新建数据库必须保证主文件已经被指定。FOR ATTACH_REBUILD_LOG选项则依据日志文件的事务记录来创建新的数据库。
(10)若省略所有的选项,则数据库创建时会根据model系统数据库的默认设置来自动设定各属性参数。当用户不需对新建数据库的各种特性进行较多控制时,可以采用最简化的数据库创建方式,即语句CREATE DATABASE数据库名。
注意:SQL语句在书写时不区分大小写,为了清晰,本书采用大写表示关键字,用小写表示用户自定义的名称。一条语句可以写成多行,但不能将多条语句写在一行中。
【任务2.6】 创建一个名为Manage的数据库,该数据库包含一个主数据库文件、一个事务日志文件,所有文件都存储在D:\data文件夹下。其中,主数据库文件初始大小为5MB,按照10%的容量增长,大小无限制;日志文件初始大小为1MB,每次增长1MB,文件最大容量为100MB。
使用T_SQL实现Manage数据库创建步骤如下。
(1)打开查询编辑器。
(2)在查询编辑器中输入如下的T-SQL脚本代码。
CREATE DATABASE Manage
ON PRIMARY
(NAME=Manage_data,
FILENAME='D:\data\Manage_data.mdf',
SIZE=5MB,
MAXSIZE=UNLIMITED,
FILEGROWTH=10%)
LOG ON
(NAME=Manage_log,
FILENAME='D:\data\Manage_log.ldf',
MAXSIZE=100,
FILEGROWTH=1MB)
GO
(3)按F5键执行输入的代码,执行结果如图2.22所示。
图2.22 使用CREATE DATABASE语句创建数据库
2.4.2 切换(或使用)数据库
微课:切换(或使用)数据库
T-SQL中可使用USE语句来将数据库上下文环境设置为指定的某个数据库。SQL Server服务器上通常有许多数据库,为使当前的一组操作都施加到某个选定的数据库上,需要使用USE语句将该数据库切换到数据库上下文环境中。这种切换到某个数据库的操作也常被称为打开该数据库。
USE语句的基本语法格式如下。
USE数据库名[;]
USE语句常用在批处理或脚本代码中。
【任务2.7】 将当前数据库切换为Manage数据库。
(1)打开查询编辑器。
(2)在查询编辑器中输入如下的T-SQL脚本代码。
USE Manage
GO
(3)按F5键执行输入的代码。
2.4.3 修改数据库
微课:使用T-SQL语句修改数据库
T-SQL提供了ALTER DATABASE语句用于修改数据库的各文件参数,如更改数据库文件的尺寸、改变数据库文件的增长方式、增加或删除数据库文件及文件组等。
ALTER DATABASE语句的基本语法格式如下。
ALTER DATABASE数据库名
ADD FILE <文件格式> [TO FILEGROUP文件组]
| ADD LOG FILE <文件格式>
| REMOVE FILE逻辑文件名
| ADD FILEGROUP文件组名
| REMOVE FILEGROUP文件组名
| MODIFY FILE <文件格式>
| MODIFY FILEGROUP文件组名,文件组属性
| MODIFY NAME=数据库新名称
| SET数据库功能选项[,…n] [WITH终止符]
| COLLATE数据库的排序方式[;]
语法说明如下。
(1)在上述语法格式中,“|”表示几项中仅选一项。
(2)ADD FILE与ADD LOG FILE子句分别用来向数据库中添加数据文件与日志文件,文件的属性定义见CREATE DATABASE。TO FILEGROUP子句指定将文件添加到哪个文件组,默认为主文件组PRIMARY。
(3)REMOVE FILE子句用于从数据库中删除一个数据文件。
(4)ADD FILEGROUP和REMOVE FILEGROUP子句分别指定添加和删除一个数据库文件组。
(5)MODIFY FILE子句用于修改数据库文件的初始大小、文件最大容量及文件增长量等信息。
注意:数据库文件的物理文件名称不允许修改,因此FILENAME子句不允许出现在文件修改中。另外,在修改文件的“分配的空间”项时,所改动的值必须大于现有的空间值。
(6)MODIFY FILEGROUP子句用于修改文件组属性。
(7)MODIFY NAME子句用于改变数据库的逻辑名称。
注意:要对数据库改名必须先将数据库改为排他锁锁定状态,即断开所有其他连接,以执行该操作。
(8)SET关键字引导的子句用来设置某些数据库功能选项,这些选项将影响数据库的某些特征或属性。
(9)COLLATE关键字引导的子句用来为数据库指定排序规则。
【任务2.8】 编写T-SQL代码,为Manage数据库添加一个新文件组newfilegroup,并在其中添加一个辅助数据文件Manage_add.ndf,将其保存在与主数据文件相同的目录下,初始大小3MB,最大值不受限制,每次增长10MB。
(1)打开查询编辑器。
(2)在查询编辑器中输入如下的T-SQL脚本代码。
ALTER DATABASE Manage
ADD FILEGROUP newfilegroup
GO
ALTER DATABASE Manage
ADD FILE
(NAME=Manage_add,
FILENAME='D:\DATA\Manage_add.ndf',
SIZE=3MB,
MAXSIZE=UNLIMITED,
FILEGROWTH=10)
TO FILEGROUP newfilegroup
GO
(3)按F5键执行输入的代码,执行结果如图2.23所示。
图2.23 使用ALTER DATABASE语句修改数据库
2.4.4 删除数据库
微课:使用T-SQL语句删除数据库
T-SQL提供了DROP DATABASE命令来删除数据库,该语句的基本语法格式如下。
DROP DATABASE数据库名[;]
注意:在执行某个数据库的删除命令前,要保证没有实际应用与该数据库保持连接。
【任务2.9】 删除Manage数据库。
(1)打开查询编辑器。
(2)在查询编辑器中输入如下的T-SQL脚本代码。
DROP DATABASE Manage
GO
(3)按F5键执行输入的代码,刷新【对象资源管理器】,该数据库已从其中的树型结构中被删除。
图2.24 使用DROP语句删除数据库
2.4.5 管理数据库信息
1.查看数据库信息
微课:使用T-SQL语句查看数据库
查看数据库信息主要包括查看三方面内容:基本信息、维护信息和空间使用情况。
在T-SQL中查看数据库信息可使用sp_helpdb系统存储过程,基本语法格式如下。
[EXECUTE] sp_helpdb [数据库名]
注意事项如下。
● 若省略数据库名,可查看所有数据库的定义信息,与“SELECT * FROM sysdatabases”语句功能完全相同。
● EXECUTE关键字可缩写成EXEC。如果此语句是一个批处理中的第一句,则EXECUTE关键字可省略。
【任务2.10】 查看Manage数据库相关信息。
(1)打开查询编辑器。
(2)在查询编辑器中输入如下的T-SQL脚本代码。
EXEC sp_helpdb Manage
GO
(3)按F5键执行输入的代码,执行结果如图2.25所示。
图2.25 查看数据库信息
2.4.6 直接复制文件的数据库分离与附加
T-SQL也提供了实现数据库分离与附加的系统存储过程。
1.实现数据库分离的语法格式
sp_detach_db数据库名[, TRUE | FALSE]
● 如果为TRUE,则跳过UPDATE STATISTICS。如果为FALSE,则运行UPDATE STATISTICS。对于要移动到只读媒体上的数据库,此选项很有用。
● 只有sysadmin固定服务器角色的成员才能执行sp_detach_db。
2.实现数据库附加的语法格式
sp_attach_db数据库名, 数据库文件名[, …16]
● 数据库名必须是唯一的。
● 数据库文件名为文件的物理名称,包括文件路径。
● 最多可以指定16个文件名。
● 文件名列表至少必须包括主文件。
● 可使用此方法对现有数据库制作多个副本,也可以实现在不同SQL Server服务器之间移动传递数据的目的。
本章小结
本章主要介绍了数据库的重要概念SQL Server 2012的数据库类型、数据库文件、事务日志等。本章的重点是使用语句创建、显示、修改、删除数据库和使用SSMS管理数据库。
课后练习
一、填空题
使用T-SQL语句,创建数据库使用 命令,修改数据库使用 命令,删除数据库使用 命令,查看数据库信息使用 命令,查看和设置数据库选项使用
命令。
二、简答题
1.SQL Server 2012中数据库文件有哪三类?分别简述各个文件的功能及要求。
2.SQL Server 2012提供的系统数据库有几个,各具什么功能?
3.数据库处在什么情况下不允许删除?
综合实训
实训名称
创建并管理学生信息管理数据库(Students)。
实训任务
(1)使用SSMS对学生信息管理数据库(Students)进行创建、修改与删除等操作。
(2)使用T-SQL命令对学生信息管理数据库(Students)进行创建、修改与删除等操作。
实训目的
(1)规划学生信息管理数据库(Students)的主数据文件、辅助数据文件与日志文件的名称、大小、增长方式与存储路径等属性。
(2)在SSMS中完成学生信息管理数据库(Students)从创建、修改、分离、附加,直到删除的完整过程。
(3)使用T-SQL语句完成学生信息管理数据库(Students)的创建、修改与删除等操作。
实训环境
Windows Server平台及SQL Server 2012系统。
实训内容
Students数据库,该数据库包含一个主数据文件逻辑名“StuInfodata1”,物理名“C:\DATA\StuInfodata1.mdf”,初始容量3MB,最大容量10MB,每次增长量为15%。一个辅助数据文件逻辑名“StuInfodata2”,物理名“D:\DATA\StuInfodata2.ndf”,初始默认,最大容量不受限,每次增长量为2MB。一个事务日志文件逻辑名“StuInfolog”,物理名“D:\DATA\StuInfolog. ldf”,其他参数默认。
(1)使用SSMS创建该数据库,创建完成后即可再通过SSMS对其进行删除。
(2)使用T-SQL语句创建该数据库,可使用最简单的语句实现以上功能。
(3)使用T-SQL语句对该数据库进行修改,创建一个新的文件组newgroup,并在其中添加一个辅助数据文件,逻辑名为“StuInfoAdd”,与前一数据文件放在同一目录下,初始大小为5MB。添加一个事务日志文件,逻辑名为“StuInfoLogAdd”,与前一日志文件放在同一目录下。
(4)使用系统存储过程查看数据库信息。
(5)使用系统存储过程修改数据库设置信息,将“自动收缩(AUTO SHRINK)”属性设置为TRUE。
(6)使用SSMS和T-SQL两种方式对数据库进行分离操作。
(7)用最简单的T-SQL语句创建数据库CeShi,创建成功后对数据库进行删除操作。
实训步骤
操作具体步骤略,请参考相应案例。
实训结果
在本次实训操作结果的基础上,分析总结并撰写实训报告。