1. SQL Server数据库基本概念
1.1基本模式
1.1.1 逻辑数据库
用户经常需要在T-SQL中引用SQL Server对象并对其进行操作,如对数据库表进行查询和数据更新等,在其所使用的T-SQL语句中需要给出对象的名称。用户可以给出两种对象名,即完全限定名和部分限定名。
(1)完全限定名。在SQL Server 2008中,完全限定名是对象的全名,
包括4个部分:服务器名、数据库名、数据库架构名和对象名,
其格式为 server.database.scheme.object
在SQL Server 2008上创建的每一个对象都必须有一个唯一的完全限定名。
(2)部分限定名。在使用T-SQL编程时,常省略全名中的某些部分,对象全名的4个部分中的前3个部分均可以省略,当省略中间的部分时,圆点符“.”不可省略。把只包含对象完全限定名中的一部分的对象名称为部分限定名。SQL Server可以根据系统的当前工作环境确定对象名称中省略的部分。
在部分限定名中,未指出的部分使用以下默认值。
服务器:默认为本地服务器。
数据库:默认为当前数据库。
数据库架构名:默认为dbo。
例如,以下是一些正确的对象部分限定名: server.database..object /*省略架构名*/ server.. scheme.object /*省略数据库名*/ database. scheme.object /*省略服务器名*/ server…object /*省略架构名和数据库名*/ scheme.object /*省略服务器名和数据库名*/ object /*省略服务器名、数据库名和架构名*/
下面大致介绍一下SQL Server 2008中所包含的常用数据库对象。
1 表:表是SQL Server中最主要的数据库对象,它是用来存储和操作数据的一种逻辑结构。表由行和列组成,因此也称为二维表。表是在日常工作和生活中经常使用的一种表示数据及其关系的形式。
2 视图:视图是从一个或多个基本表中引出的表。数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。
由于视图本身并不存储实际数据,因此也可以称之为虚表。视图中的数据来自定义视图的查询所引用的基本表,并在引用时动态生成数据。当基本表中的数据发生变化时,从视图中查询出来的数据也随之改变。视图一经定义,就可以像基本表一样被查询、修改、删除和更新了。
3 索引:索引是一种不用扫描整个数据表就可以对表中的数据实现快速访问的途径,它是对数据表中的一列或者多列数据进行排序的一种结构。
表中的记录通常按其输入的时间顺序存放,这种顺序称为记录的物理顺序。为了实现对表记录的快速查询,可以对表的记录按某个或某些属性进行排序,这种顺序称为逻辑顺序。
索引是根据索引表达式的值进行逻辑排序的一组指针,它可以实现对数据的快速访问,索引是关系数据库的内部实现技术,它被存放在存储文件中。
4 约束:约束机制保障了SQL Server 2008中数据的一致性与完整性,具有代表性的约束就是主键和外键。主键约束当前表记录的唯一性,外键约束当前表记录与其他表的关系。
5 存储过程:存储过程是一组为了完成特定功能的SQL语句集合(功能函数)。这个语句集合经过编译后存储在数据库中,存储过程具有接受参数、输出参数、返回单个或多个结果以及返回值的功能。存储过程独立于表存在(表不存在,存储过程存在,但是会出错)。存储过程有与函数类似的地方,但它又不同于函数,例如,它不返回取代其名称的值,也不能直接在表达式中使用。
① 触发器:触发器与表紧密关联。它可以实现更加复杂的数据操作,更加有效地保障数据库系统中数据的完整性和一致性。触发器基于一个表创建,但可以对多个表进行操作。(学生学号改,住宿表,学费表都改的实现)
②默认值:默认值是在用户没有给出具体数据时,系统所自动生成的数值。它是SQL Server 2008系统确保数据一致性和完整性的方法。
③ 用户和角色:用户是指对数据库有存取权限的使用者;角色是指一组数据库用户的集合。这两个概念类似于Windows XP的本地用户和组的概念。
④ 规则:规则用来限制表字段的数据范围。
⑤ 类型:用户可以根据需要在给定的系统类型之上定义自己的数据类型。
⑥ 函数:用户可以根据需要在SQL Server 2008上定义自己的函数。
1.1.2 物理数据库
1.页和区
SQL Server 2008中有两个主要的数据存储单位:页和区。
页是用于数据存储的最基本单位。每个页的大小是8 KB。每页的开头是96 B的标头,用于存储有关页的系统信息。紧接着标头存放的是数据行,数据行按顺序排列。数据库表中的每一行数据都不能跨页存储,即表中的每一行数据字节数不能超过8192。页的末尾是行偏移表,页中的每一行在偏移表中都有一个对应的条目。每个条目记录着对应行的第一个字节与页首部的距离。
区是用于管理空间的基本单位。每8个连接的页组成一个区,大小为64 KB,即每1 MB的数据库就有16个区。区用于控制表和索引的存储。
2.数据库文件
SQL Server 2008所使用的文件包括以下三类文件。
(1)主数据文件。主数据文件简称主文件,正如其名字所示,该文件是数据库的关键文件,包含了数据库的启动信息,并且存储数据。每个数据库必须有且仅能有一个主文件,其默认扩展名为.mdf。可直接拷贝
(2)辅助数据文件。辅助数据文件简称辅(助)文件,用于存储未包括在主文件内的其他数据。辅助文件的默认扩展名为.ndf。辅助文件是可选的,根据具体情况,可以创建多个辅助文件,也可以不使用辅助文件。一般当数据库很大时,有可能需要创建多个辅助文件。而当数据库较小时,则只需要创建主文件而不需要创建辅助文件。
(3)日志文件。日志文件用于保存恢复数据库所需的事务日志信息。每个数据库至少有一个日志文件,也可以有多个,日志文件的扩展名为.ldf。日志文件的存储与数据文件不同,它包含一系列记录,这些记录的存储不以页为存储单位。
3.文件组
使用文件组可以提高表中数据的查询性能。在SQL Server 2008中有两类文件组。
(1)主文件组。主文件组包含主要数据文件和任何没有明确指派给其他文件组的其他文件。管理数据库的系统表的所有页均分配在主文件组中。
(2)用户定义文件组。用户定义文件组是指在CREATE DATABASE或ALTER DATABASE语句中使用FILEGROUP关键字指定的文件组。
每个数据库中都有一个文件组作为默认文件组运行。若在SQL Server 2008中创建表或索引时没有为其指定文件组,那么将从默认文件组中进行存储页分配、查询等操作。用户可以指定默认文件组,如果没有指定默认文件组,则主文件组是默认文件组。
2.创建数据库
2.1 系统数据库和用户数据库
系统数据库存储有关SQL Server的系统信息,它们是SQL Server 2008管理数据库的依据。如果系统数据库遭到破坏,那么SQL Server将不能正常启动。在安装SQL Server 2008时,系统将创建4个可见的系统数据库:master、model、msdb和tempdb。
(1)master数据库包含了SQL Server 2008的登录账号、系统配置、数据库位置及数据库错误信息等,控制用户数据库和SQL Server的运行。
(2)model数据库为新创建的数据库提供模板。
(3)msdb数据库为“SQL Server代理”调度信息和作业记录提供存储空间。
(4)tempdb数据库为临时表和临时存储过程提供存储空间,所有与系统连接的用户的临时表和临时存储过程都存储于该数据库中。
每个系统数据库都包含主数据文件和主日志文件。扩展名分别为.mdf 和.ldf,例如master数据库的两个文件分别为master.mdf和master.ldf。
2.2 界面方式数据库操作
2.2.1 数据库的创建
下面以创建学生成绩管理系统的数据库(名为PXSCJ)为例,说明使用SQL Server Management Studio窗口图形化向导创建数据库的过程。
【例2.1】 创建数据库PXSCJ,数据文件和日志文件的属性按默认值设置。
创建该数据库的主要过程如下。
第1步:以系统管理员身份登录计算机,在桌面上单击“开始→所有程序→Microsoft SQL Server 2008”,选择并启动SQL Server Management Studio。如图2.1所示,使用默认的系统配置连接到数据库服务器。
第2步:选择“对象资源管理器”中服务器目录下的“数据库”目录,右击鼠标,在弹出的快捷菜单中选择“新建数据库”菜单项,打开“新建数据库”窗口。
第3步:“新建数据库”窗口的左上方共有三个选项卡——“常规”、“选项”和“文件组”,这里只配置“常规”选项卡,其他选项卡使用系统默认设置。
在“新建数据库”窗口的左上方选择“常规”选项卡,在“数据库名称”文本框中填写要创建的数据库名称“PXSCJ”,也可以在“所有者”文本框中指定数据库的所有者,如sa。这里使用默认值,其他属性也按默认值设置,如图2.2所示。
图2.2 新建数据库属性
另外,可以通过单击自动增长标签栏下面的 ... 按钮,弹出图2.3所示的对话框,在该对话框中可以设置数据库是否自动增长、增长方式、数据库文件最大文件大小。数据日志文件的自动增长设置对话框与数据文件的类似。
图2.3 自动增长设置
配置路径的方式与配置自动增长方式类似,可以通过单击路径标签栏下面的 按钮来自定义路径,默认路径为C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008 MSSQLDATA。这里,数据库文件大小、增长方式和路径都使用默认值,确认后单击“确定”按钮。
至此数据库PXSCJ已经创建完成了,此时,可以在对象资源管理器的“数据库”目录下找到该数据库所对应的图标,如图2.4所示。
图2.4 创建后的PXSCJ数据库
2.2.2数据库的修改
在数据库成功创建后,数据文件名和日志文件名就不能改变了。对已存在的数据库可以进行的修改包括以下几项。
- 增加或删除数据文件。
- 改变数据文件的大小和增长方式。
- 改变日志文件的大小和增长方式。
- 增加或删除日志文件。
- 增加或删除文件组。
- 重命名数据库。
下面以对数据库PXSCJ的修改为例,说明在SQL Server Management Studio中对数据库的定义进行修改的操作方法。
在进行任何界面操作以前,都要启动SQL Server Management Studio,后面启动SQL Server Management Studio的步骤将被省略,只介绍其主要的操作步骤。
第1步:选择需要进行修改的数据库PXSCJ,右击鼠标,在出现的快捷菜单中选择“属性”菜单项,如图2.5所示。
第2步:选择“属性”菜单项后,出现如图2.6所示的“数据库属性-PXSCJ”窗口。从图中的选项卡列表中可以看出,它包括9个选项卡。
下面详细介绍一下对已经存在的数据库可以进行的修改操作。
(1)改变数据文件的大小和增长方式。在图2.6所示的“数据库属性-PXSCJ”窗口中的选项卡列表中选择“文件”,在右边的“初始大小”列中输入要修改的数据库的初始大小,如图2.7所示。
(2)增加或删除数据文件。当原有数据库的存储空间不够大时,除了可以采用扩大原有数据文件存储量的方法之外,还可以增加新的数据文件。或者,从系统管理的需求出发,采用多个数据文件来存储数据,以避免数据文件过大。此时,会用到向数据库中增加数据文件的操作。
【例2.2】 在PXSCJ数据库中增加数据文件PXSCJ_2,其属性均取系统默认值。
操作方法如下:
打开“数据库属性-PXSCJ”窗口,在选项卡列表中选择“文件”,单击窗口右下角的“添加”按钮,数据库文件下方会新增加一行文件项,如图2.8所示。
删除辅助数据文件的操作方法如下。
打开“数据库属性”窗口,选择“文件”选项卡。选中需删除的辅助数据文件PXSCJ_2,单击对话框右下角的“删除”按钮,然后单击“确定”按钮即完成删除。
(3)增加或删除文件组。数据库管理员(DBA)从系统管理策略角度出发,有时可能需要增加或删除文件组。这里通过示例说明操作方法。
【例2.3】 假设要在数据库PXSCJ中增加一个名为FGroup的文件组。
操作方法如下。
打开“数据库属性”窗口,选择“文件组”选项卡。单击右下角的“添加”按钮,这时在PRIMARY行的下面会出现新的一行。在该行的“名称”列输入“FGroup”,单击“确定”按钮,如图2.9所示。
例如,在PXSCJ数据库新增的文件组FGroup中增加数据文件PXSCJ2。操作方法如下。
选择“文件”选项卡,按增加数据文件的操作方法添加数据文件。在“文件组”下拉框中选择“FGroup”,如图2.10所示,单击“确定”按钮。
删除文件组的操作方法如下。
选择“文件组”选项卡。选中需删除的文件组,单击对话框右下角的“删除”按钮,再单击“确定”按钮即可删除。
(4)数据库的重命名。使用图形界面修改数据库名称的方法是:启动“SQL Server Management Studio”,在“对象资源管理器”窗口中,展开“数据库”,选择要重命名的数据库,右击鼠标,在弹出的快捷菜单中选择“重命名”菜单项,输入新的数据库名称,即可更改数据库的名称。在一般情况下,不建议用户更改已经创建好的数据库名称,因为许多应用程序可能已经使用了该名称,在更改了数据库名称之后,还需要修改相应的应用程序。
2.2.3删除数据库
通常的做法是,把一些不需要的数据库删除,以释放被其占用的系统空间和消耗。用户可以利用图形向导方式轻松地完成数据库系统的删除工作。
【例2.4】 删除PXSCJ数据库。
启动SQL Server Management Studio,在对象资源管理器中选择要删除的数据库“PXSCJ”,右击鼠标,在弹出的快捷菜单中选择“删除”菜单项,打开如图2.11所示的“删除对象”对话框,单击右下角的“确定”按钮,即可删除数据库PXSCJ。
2.3命令方式创建数据库
2.3.1 创建数据库
命令方式创建数据库使用CREATE DATABASE命令,创建前要确保用户具有创建数据库的权限。
语法格式。
说明:
在对语法格式进行解释之前,先介绍本书的Transact-SQL语法格式中使用的约定。表2.1列出了这些约定,并进行了说明。这些约定在本书介绍T-SQL语法格式时都适用。
表2.1 本书Transact-SQL语法的约定和说明
CREATE DATABASE database_name [ ON [ PRIMARY ] [ <filespec> [ ,...n ] [ , <filegroup> [ ,...n ] ] [ LOG ON { <filespec> [ ,...n ] } ] ] [ COLLATE collation_name ] [ WITH <external_access_option> ] [FOR { ATTACH | ATTACH_REBUILD_LOG }] ] [;] 其中, <filespec> ::= {( NAME = logical_file_name , FILENAME = { 'os_file_name' | 'filestream_path' } [ , SIZE = size [ KB | MB | GB | TB ] ] [ , MAXSIZE = { max_size [ KB | MB | GB | TB ] | UNLIMITED } ] [ , FILEGROWTH = growth_increment [ KB | MB | GB | TB | % ] ] ) [ ,...n ] } <filegroup> ::= { FILEGROUP filegroup_name [ CONTAINS FILESTREAM ] [ DEFAULT ] <filespec> [ ,...n ] } <external_access_option> ::= { [ DB_CHAINING { ON | OFF } ] [ , TRUSTWORTHY { ON | OFF } ] }
下面对CREATE DABASE命令的语法格式进行说明。
(1)database_name:所创建的数据库逻辑名称,该名称在SQL Server实例中必须唯一。其命名须遵循SQL Server 2008的命名规则,最大长度为128个字符。
(2)ON子句:指定了数据库的数据文件和文件组,其中,PRIMARY用来指定主文件。若不指定主文件,则各数据文件中的第一个文件将成为主文件。
(3)<filespec>:指定数据库文件的属性,主要给出文件的逻辑名、存储路径、大小及增长特性。这些特征可以与以界面方式创建数据库时对数据库特征的设置相联系。
① logical_file_name:逻辑文件名,是数据库创建后在所有T-SQL语句中引用文件时所使用的名字。
② os_file_name:操作系统文件名,是操作系统在创建物理文件时使用的路径和文件名。对于FILESTREAM文件组,FILENAME选项指向将存储FILESTREAM数据的路径“filestream_path”。在最后一个文件夹之前的路径必须存在,但不能存在最后一个文件夹。例如,如果指定路径C:FilestreamData,则C:Filestream必须存在才能运行CREATE DATABASE语句,但 Data文件夹不能存在。有关FILESTREAM的内容将在第3章中介绍。
③ size:是数据文件的初始容量大小。对于主文件,若不指出大小,则默认为model数据库主文件的大小。对于辅助数据文件,自动设置为3 MB。UNLIMITED关键字表示指定文件将增长到磁盘满。
④ max_size:指定文件的最大大小。UNLIMITED关键字表示文件大小不受限制,但实际上受磁盘可用空间限制。如果不指定MAXSIZE选项,则文件将增长到磁盘空间满。
⑤ growth_increament:指出文件每次的增量,有百分比和空间值两种格式,前者如10%,即每次在原来空间大小的基础上增长10%;后者如5 MB,即每次增长5 MB,而不管原来空间大小是多少。但要注意,FILEGROWTH的值不能超过MAXSIZE的值。
(4)<filegroup>:定义文件组的属性。filegroup_name为定义的文件组的名称,CONTAINS FILESTREAM选项指定文件组在文件系统中存储FILESTREAM二进制大型对象(BLOB)。DEFAULT关键字指定命名文件组为数据库中的默认文件组。<filespec>用于指定属于该文件组的文件。文件组中各文件的描述和数据文件描述相同。
(5)LOG ON子句:用于指定数据库事务日志文件的属性,其定义格式与数据文件的格式相同。如果没有指定该子句,则将自动创建一个日志文件。
(6)COLLATE collation_name:指定数据库的默认排序规则。排序规则名称既可以是 Windows 排序规则名称,也可以是 SQL 排序规则名称。如果没有指定排序规则,则将SQL Server实例的默认排序规则分配为数据库的排序规则。
(7)WITH子句:用于控制外部与数据库之间的双向访问。
① DB_CHAINING { ON | OFF }
当指定为ON时,数据库可以为跨数据库所有权链的源或目标。当为OFF时,数据库不能参与跨数据库所有权链接。默认值为OFF。
② TRUSTWORTHY { ON | OFF }
当指定为ON时,使用模拟上下文的数据库模块(如视图、用户定义函数或存储过程)可以访问数据库以外的资源。当为OFF时,模拟上下文中的数据库模块不能访问数据库以外的资源。默认值为OFF。
(8)FOR子句:
① FOR ATTACH子句:指定通过附加一组现有的操作系统文件来创建数据库,使用FOR ATTACH子句时必须指定数据库的主文件。如果有多个数据和日志文件,则必须确保所有的.mdf文件和.ndf文件可用,否则操作将失败。
② FOR ATTACH_REBUILD_LOG子句:指定通过附加一组现有的操作系统文件来创建数据库,使用这一选项将不再需要所有日志文件。
由语法格式可知,最简单的一句创建数据库的语句为
CREATE DATABASE database_name
【例2.5】 创建一个名为TEST1的数据库,其初始大小为5 MB,最大大小为50 MB,允许数据库自动增长,增长方式是按10%比例增长。日志文件初始为2 MB,最大可增长到5 MB,按1 MB增长。数据文件和日志文件的存放位置为SQL Server的数据库目录“C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008 MSSQLDATA”。假设SQL Server服务已启动,并以系统管理员身份登录计算机。
在“SQL Server Management Studio”窗口中单击“新建查询”按钮新建一个查询窗口,如图2.12所示。
在“查询分析器”窗口中输入如下T-SQL语句: CREATE DATABASE TEST1 ON ( NAME= 'TEST1_DATA', FILENAME='C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008MSSQLDATATEST1.mdf', SIZE=5 MB, MAXSIZE=50 MB, FILEGROWTH=10% ) LOG ON ( NAME='TEST1_log', FILENAME='C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008MSSQLDATATEST1.ldf', SIZE=2 MB, MAXSIZE=5 MB, FILEGROWTH=1 MB );
输入完毕后,单击SSMS面板上的“!执行”按钮,如图2.13所示。从图中可以看到,CREATE DATABASE命令执行时,在结果窗口中将显示命令执行的进展情况。
当命令成功执行后,在“对象资源管理器”中展开“数据库”目录,可以看到,新建的数据库“TEST1”就显示于其中。如果没有发现“TEST1”,则选择“数据库”,右击鼠标,在弹出的快捷菜单中选择“刷新”菜单项即可。
通过数据库属性对话框可以看到,新建立TEST1数据库的各项属性完全符合预定要求。
【例2.6】 创建一个名为TEST2的数据库,它有两个数据文件,其中,主数据文件为20 MB,最大大小不限,按10%增长。 1个辅数据文件为20 MB,最大大小不限,按10%增长;有1个日志文件,大小为50 MB,最大大小为100 MB,按10 MB增长。
在查询分析器中输入如下T-SQL语句并执行.
CREATE DATABASE TEST2 ON PRIMARY /*主文件*/ ( NAME = 'TEST2_data1', FILENAME = 'D:data est2_data1.mdf', SIZE = 20 MB, MAXSIZE = UNLIMITED, FILEGROWTH = 10% ), /*有逗号* ( NAME = 'TEST2_data2', FILENAME = 'D:data est2_data2.ndf', SIZE = 20 MB, MAXSIZE = UNLIMITED, FILEGROWTH = 10% ) /* 无逗号*/ LOG ON ( NAME = 'TEST2_log1', FILENAME = 'D:data est2_log1.ldf', SIZE = 50 MB, MAXSIZE = 100 MB, FILEGROWTH = 10 MB );
【例2.7】 创建一个具有2个文件组的数据库TEST3。要求:
(1)主文件组包括文件TEST3_dat1,文件初始大小为20 MB,最大为60 MB,按5 MB增长;
(2)有1个文件组名为TEST3Group1,包括文件TEST3_dat2,文件初始大小为10 MB,最大为30 MB,按10%增长。
CREATE DATABASE TEST3 ON PRIMARY ( NAME = 'TEST3_dat1', FILENAME = 'D:dataTEST3_dat1.mdf', SIZE = 20 MB, MAXSIZE = 60 MB, FILEGROWTH = 5 MB ), FILEGROUP TEST3Group1 ( NAME = 'TEST3_dat2', FILENAME = 'D:dataTEST3_dat2.ndf', SIZE = 10 MB, MAXSIZE = 30 MB, FILEGROWTH = 10% )
2.3.2修改数据库
使用ALTER DATABASE命令可对数据库进行以下修改:
增加或删除数据文件;
改变数据文件的大小和增长方式;
改变日志文件的大小和增长方式;
增加或删除日志文件;
增加或删除文件组。
语法格式。
ALTER DATABASE database_name { ADD FILE <filespec>[,…n][ TO FILEGROUP filegroup_name ] /*在文件组中增加数据文件*/ | ADD LOG FILE <filespec>[,…n] /*增加日志文件*/ | REMOVE FILE logical_file_name /*删除数据文件*/ | ADD FILEGROUP filegroup_name [CONTAINS FILESTREAM] /*增加文件组*/ | REMOVE FILEGROUP filegroup_name /*删除文件组*/ | MODIFY FILE <filespec> /*更改文件属性*/ | MODIFY NAME = new_dbname /*数据库更名*/ | MODIFY FILEGROUP filegroup_name { <filegroup_updatability_option> | DEFAULT | NAME = new_filegroup_name } /*更改文件组属性*/ | SET <optionspec> [ ,...n ] [ WITH <termination> ] /*设置数据库属性*/ | COLLATE collation_name /*指定数据库排序规则*/ } [;] 其中, <filegroup_updatability_option>::= { { READONLY | READWRITE } | { READ_ONLY | READ_WRITE } }
【例2.8】 假设已经创建了例2.5中的数据库TEST1,它只有一个主数据文件,其逻辑文件名为TEST1_DATA,大小为5 MB,最大为50 MB,增长方式为按10%增长。
要求:修改数据库TEST1现有数据文件TEST1_DATA的属性,将主数据文件的最大大小改为100 MB,增长方式改为按每次5 MB增长。
在“查询分析器”窗口中输入如下Transact-SQL语句: ALTER DATABASE TEST1 MODIFY FILE ( NAME = TEST1_DATA, MAXSIZE =100 MB, /*将主数据文件的最大大小改为100 MB*/ FILEGROWTH = 5 MB /*将主数据文件的增长方式改为按5 MB增长*/ ) GO
单击“执行”按钮执行输入的T_SQL语句,右击“对象资源管理器”中的“数据库”,选择“刷新”菜单项,之后右击数据库TEST1的图标,选择“属性”菜单项,在“文件”页上查看修改后的数据文件。
【例2.9】 先为数据库TEST1增加数据文件TEST1BAK。然后删除该数据文件。
ALTER DATABASE TEST1 ADD FILE ( NAME = 'TEST1BAK', FILENAME = 'D:dataTEST1BAK.ndf', SIZE = 10 MB, MAXSIZE = 50 MB, FILEGROWTH = 5% )
通过查看“数据库属性”窗口中的文件属性来观察数据库“TEST1”是否增加数据文件TEST1BAK。
删除数据文件TEST1BAK的命令如下:
ALTER DATABASE TEST1 REMOVE FILE TEST1BAK GO
【例2.10】 为数据库TEST1添加文件组FGROUP,并为此文件组添加两个大小均为10 MB的数据文件。
ALTER DATABASE TEST1 ADD FILEGROUP FGROUP GO ALTER DATABASE TEST1 ADD FILE ( NAME = 'TEST1_DATA2', FILENAME = 'D:dataTEST1_Data2.ndf', SIZE = 10 MB ), ( NAME = 'TEST1_DATA3', FILENAME = 'D:dataTEST1_Data3.ndf', SIZE = 10 MB ) TO FILEGROUP FGROUP GO
【例2.11】 从数据库中删除文件组,将例2.10中添加到TEST1数据库中的文件组FGROUP删除。
注意:被删除的文件组中的数据文件必须先删除,且不能删除主文件组。
在查询分析器中输入如下Transact-SQL语句并执行:
ALTER DATABASE TEST1 REMOVE FILE TEST1_DATA2 GO ALTER DATABASE TEST1 REMOVE FILE TEST1_DATA3 GO ALTER DATABASE TEST1 REMOVE FILEGROUP FGROUP GO
【例2.12】 为数据库TEST1添加一个日志文件。
在查询分析器中输入如下Transact-SQL语句并执行:
ALTER DATABASE TEST1 ADD LOG FILE ( NAME = 'TEST1_LOG2', FILENAME = 'D:dataTEST1_Log2.ldf', SIZE = 5 MB, MAXSIZE =10 MB, FILEGROWTH = 1 MB ) GO
【例2.13】 从数据库TEST1中删除一个日志文件,将日志文件TEST1_LOG2删除。注意,不能删除主日志文件。
将数据库TEST1的名称改为JUST_TEST。进行此操作时必须保证该数据库此时没有被其他任何用户使用。
在查询分析器中输入如下Transact-SQL语句并执行:
ALTER DATABASE TEST1 REMOVE FILE TEST1_LOG2 GO ALTER DATABASE TEST1 MODIFY NAME = JUST_TEST GO
2.3.3 删除数据库
删除数据库使用DROP DATABASE命令。
语法格式:
DROP DATABASE database_name[,…n][;]
其中,database_name是要删除的数据库名。例如,要删除数据库TEST2,使用命令:
DROP DATABASE TEST2 GO
2.3.4 数据库快照
快照可用于报表。另外,如果源数据库出现用户错误,还可将源数据库恢复到创建快照时的状态。丢失的数据仅限于创建快照后数据库更新的数据。
在SQL Server 2008中,创建数据库快照也使用CREATE DATABASE命令。语法格式如下:
CREATE DATABASE database_snapshot_name ON ( NAME = logical_file_name, FILENAME = 'os_file_name' ) [ ,...n ] AS SNAPSHOT OF source_database_name [;]
【例2.14】 创建PXSCJ数据库的快照PXSCJ_01。
CREATE DATABASE PXSCJ_01 ON ( NAME=PXSCJ, FILENAME='D:dataPXSCJ_01.mdf' ) AS SNAPSHOT OF PXSCJ GO
命令执行成功之后,在对象资源管理器中刷新“数据库”菜单栏,在“数据库”中展开“数据库快照”,就可以看见刚刚创建的数据库快照PXSCJ_01了。
删除数据库快照的方法和删除数据库的方法完全相同,可以使用界面方式删除,也可以使用命令方式删除,例如,
DROP DATABASE PXSCJ_01;