3.2 创建数据库
利用SQL Server Management Studio(SSMS)工具,可以用图形化的方法创建数据库,也可以通过Transact-SQL语句创建数据库。下面分别介绍这两种方法。
3.2.1 用图形化方法创建数据库
在SSMS工具中用图形化方法创建数据库的步骤为:
1)启动SSMS,并以数据库管理员身份连接到SQL Server数据库服务器的一个实例上。
2)在SSMS的“对象资源管理器”中,在SQL Server实例下的“数据库”节点上右击鼠标,或者在某个用户数据库上右击鼠标,在弹出的快捷菜单中选择“新建数据库”命令(如图3-2所示),弹出如图3-3所示的“新建数据库”窗口。
3)在如图3-3所示的窗口中,在“数据库名称”文本框中输入数据库名,如本例的Students。
注意,在命名数据库时必须遵守SQL Server 2008的标识符命名规则,具体为:
名字的长度为1~128个字符。
名字的第一个字符必须是字母或“_”、“@”、“#”中的任何一个字符。
在SQL Server 2008中文版中,可以直接用中文命名。
当输入完数据库名后,在下面的“数据库文件”的逻辑名称中就会有相应的名称,这只是用于辅助用户命名逻辑文件名,用户可以对这些名字进行修改。
4)“数据库名称”下面是“所有者”,数据库的所有者可以是任何具有创建数据库权限的登录账户,数据库所有者对其拥有的数据库具有全部的操作权限。默认时,数据库的所有者是“<默认值>”,表示该数据库的所有者是当前登录到SQL Server的账户。关于登录账户及数据库安全性将在第12章详细介绍。
5)在如图3-3所示的“数据库文件”下面的网格中,可以定义数据库包含的数据文件和日志文件。
在“逻辑名称”处可以指定文件的逻辑文件名。默认情况下,主要数据文件的逻辑文件名同数据库名,第一个日志文件的逻辑文件名为:“数据库名”+“_log”。
“文件类型”列显示了该文件的类型,“行数据”表示该文件是数据文件;“日志”表示该文件是日志文件。用户新建文件时,可通过此列表框指定文件的类型。由于一个数据库必须包含一个主要数据文件和一个日志文件,因此,在创建数据库时,最开始的两个文件的类型是不能修改的。
“文件组”列显示了数据文件所在的文件组(日志文件没有文件组概念),默认情况下,所有的数据文件都属于PRIMARY主要文件组。主文件组是系统预定义好的,每个数据库都必须有一个主文件组,而且主要数据文件必须存放在主文件组中。用户可以根据自己的需要添加辅助文件组,辅助文件组用于组织次要数据文件,目的是为了提高数据访问性能。文件组中的文件可以是位于不同磁盘空间上的文件。当然,为了简单起见,也可以将全部数据文件都放置在PRIMARY文件组上。
在“初始大小”列可以指定文件创建后的初始大小,默认情况下,主要数据文件的初始大小是3MB,日志文件的初始大小是1MB。这里假设将Students_log日志文件的初始大小设置为2MB,主数据文件初始大小不变。
在“自动增长”列可以指定文件的增长方式。默认情况下,主要数据文件是每次增加1MB,最大大小没有限制;日志文件是每次增加10%,最大大小也没有限制。单击某个文件对应的图标按钮,可以更改文件的增长方式和最大大小限制。图3-4所示为单击主要数据文件Students对应的“自动增长”图标按钮后弹出的对话框。
在图3-4中,若取消选中“启用自动增长”复选框,表示文件不自动增长,文件能够存放的数据量以文件的初始空间大小为限。若选中“启用自动增长”复选框,则可进一步设置每次文件增加的大小以及文件的最大大小限制。设置文件自动增长的好处是可以不必随时担心数据库的空间维护。
文件增长:可以按MB或百分比增长。如果是按百分比增长,则增量大小为发生增长时文件大小的指定百分比。
最大文件大小有下列两种方式:
■ 限制文件增长:指定文件可增长到的最大空间。
■ 不限制文件增长:以磁盘空间容量为限制,在有磁盘空间的情况下,可以一直增长。选择这个选项是有风险的,如果因为某种原因造成数据恶性增长,则会将整个磁盘空间占满。清理一块被彻底占满的磁盘空间是非常麻烦的事情。
这里假设将students_log日志文件设置为限制增长,且最大大小为6MB。
注意:在实际生产环境中,经常选择“限制文件增长”,这样可以防止耗尽磁盘空间,也可以避免系统无法继续运行。
“路径”部分显示了文件的物理存储位置,默认的存储位置是SQL Server 2008安装位置:Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data文件夹。单击此项对应的图标按钮,可以更改文件的存放位置。假设这里将主要数据文件和日志文件均放置在F:\Data文件夹下(设此文件夹已建好)。
在“文件名”部分可以指定文件的物理文件名,也可以不指定文件名,而采用系统自动赋予的文件名。系统自动创建的物理文件名为:逻辑文件名+文件类型的扩展名。例如,如果是主要数据文件,且逻辑名为Students,则物理文件名为Students.mdf;如果是次要数据文件,且逻辑文件名为Students_Data1,则其物理文件名为Students_Data1.ndf。
6)单击图3-3中的“添加”按钮,可以增加该数据库的次要数据文件和日志文件。图3-5所示为单击“添加”按钮后的情形。
7)我们这里添加一个次要数据文件。在如图3-5所示的窗口中,对该新文件进行如下设置。
在“逻辑名称”部分输入:Students_data1。
在“文件类型”下拉列表框中选择“行数据”。
单击“文件组”对应的列表框,其中有两个选项:“PRIMARY”和“新文件组”(如图3-6所示)。选择“PRIMARY”,表示将数据文件放置在主文件组中;如果选择“<新文件组>”,则弹出如图3-7所示的窗口,在此窗口中可以建立新的文件组。若要创建新文件组,可在“名称”文本框中输入新文件组的名字(这里输入的是NewFileGroup)。在选项部分,选中“只读”复选框表示该文件组中的文件是只读的,即不能对标记为只读的文件组进行修改操作。对于不允许修改的表(如记录历史数据的表),可以将它们置于只读文件组中,这样可以防止意外的更新。选中“默认值”复选框表示将该文件组作为该数据库的默认文件组。
我们这里不选中任何选项,单击“确定”按钮完成对新文件组的创建并关闭此对话框,回到如图3-5所示的窗口。
在如图3-5所示窗口的新建文件Students_Data1对应的“文件组”列表框中,现在已经有了新建立的NewFileGroup文件组,如图3-8所示,选中该文件组。
将初始大小改为:5。
单击“自动增长”对应的图标按钮,设置文件自动增长,每次增加1MB,最多增加到10MB。
将“路径”改为:D:\Data。
设置好后的形式如图3-9所示。
8)选中某个文件后,单击图3-5中的“删除”按钮,可删除选中的文件。这里不进行任何删除。
9)单击“确定”按钮,完成数据库的创建。
创建成功后,在SSMS的“对象资源管理器”中,通过刷新对象资源管理器中的“数据库”,可以看到新建立的数据库。
3.2.2 用T-SQL语句创建数据库
创建数据库的T-SQL语句为:CREATE DATABASE,此语句的简化语法格式如下。
CREATE DATABASE database_name
[ ON
[ PRIMARY ] [ <filespec> [ ,...n ]
[ , <filegroup> [ ,...n ] ]
[ LOG ON { <filespec> [ ,...n ] } ]
]
]
<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 [ DEFAULT ]
<filespec> [ ,...n ]
}
上述语法格式中,各参数含义介绍如下。
database_name:新数据库的名称。数据库名在SQL Server实例中必须是唯一的。如果在创建数据库时未指定日志文件的逻辑名,则SQL Server用database_name后加“_log”作为日志文件的逻辑名和物理名。这种情况下将限制database_name不超过123个字符,从而使生成的逻辑文件名不会超过128个字符。如果未指定数据文件名,则SQL Server用database_name作为数据文件的逻辑名和物理名。
ON:指定用来存储数据库中数据部分的磁盘文件(数据文件),其后是用逗号分隔的、用以定义数据文件的项列表。
PRIMARY:指定关联数据文件的主文件组。带有PRIMARY的部分定义的第一个文件将成为主要数据文件。如果没有指定PRIMARY,则CREATE DATABASE语句中列出的第一个文件将成为主要数据文件。
LOG ON:指定用来存储数据库中日志部分的磁盘文件(日志文件),其后面跟以逗号分隔的、用以定义日志文件的项列表。如果没有指定LOG ON,系统将自动创建一个日志文件,其大小为该数据库的所有数据文件大小总和的25%或512 KB,取两者之中的较大者。
:定义文件的属性,其中各参数含义如下。
■ NAME=logical_file_name:指定文件的逻辑名称。指定FILENAME时,需要使用NAME的值。在一个数据库中逻辑名必须唯一,而且必须符合标识符规则。名称可以是字符或 Unicode 常量,也可以是常规标识符或分隔标识符。
■ FILENAME= 'os_file_name':指定操作系统(物理)文件名称。'os_file_name'是创建文件时由操作系统使用的路径和文件名。
注意:在执行CREATE DATABASE语句前,指定的路径必须已经存在。不应将数据文件放在压缩文件系统中,除非这些文件是只读的次要数据文件或数据库是只读的。日志文件一定不要放在压缩文件系统中。
■ SIZE=size:指定文件的初始大小。如果没有为主要数据文件提供size,则数据库引擎将使用model 数据库中的主要数据文件的大小。如果指定了次要数据文件或日志文件,但未指定该文件的size,则数据库引擎将以1MB作为该文件的大小。为主要数据文件指定的大小应不小于model数据库的主要数据文件的大小。可以使用千字节(KB)、兆字节(MB)、千兆字节(GB)或兆兆字节(TB)后缀。默认为MB。size是一个整数值,不能包含小数位。
■ MAXSIZE=max_size:指定文件可增大到的最大大小。可以使用KB、MB、GB和TB后缀。默认为MB。max_size为一个整数值,不能包含小数位。如果未指定max_size,则表示文件大小无限制,文件将一直增大,直至磁盘空间满。
■ UNLIMITED:指定文件的增长无限制。在SQL Server中,指定为不限制增长的日志文件的最大大小为2TB,而数据文件的最大大小为16TB。
■ FILEGROWTH=growth_increment:指定文件的自动增量。FILEGROWTH的大小不能超过 MAXSIZE的大小。growth_increment为每次需要新空间时为文件添加的空间量。该值可以使用MB、KB、GB、TB或百分比(%)为单位指定。如果未在数字后面指定单位,则默认为MB。如果指定了“%”,则增量大小为发生增长时文件大小的指定百分比。指定的大小舍入为最接近的64KB的倍数。FILEGROWTH=0表明将文件自动增长设置为关闭,即不允许自动增加空间。如果未指定FILEGROWTH,则数据文件的默认增长值为1MB,日志文件的默认增长比例为10%,并且最小值为64KB。
:控制文件组属性,其中各参数含义如下。
■ FILEGROUP filegroup_name:文件组的逻辑名称。filegroup_name在数据库中必须唯一,而且不能是系统提供的名称PRIMARY和PRIMARY_LOG,名称必须符合标识符规则。
■ DEFAULT:指定该文件组为数据库中的默认文件组。
在使用Transact-SQL语句创建数据库时,最简单的情况是可以省略所有的参数,只提供一个数据库名即可,这时系统会按各参数的默认值创建数据库。
下面举例说明如何用Transact-SQL语句创建数据库。
【例3-1】创建一个全部采用默认设置的数据库,数据库名为mytest。
如果创建数据库时全部采用默认设置,则该数据库的主要数据文件的大小为model数据库主要数据文件的大小,日志文件将被设置为下列值中的较大者:512KB或主要数据文件大小的25%。
CREATE DATABASE mytest;
【例3-2】创建包含一个数据文件和一个日志文件的数据库。创建一个名为RShDB的数据库,该数据库由主要数据文件和一个日志文件组成。主要数据文件的逻辑文件名为“RShDB_Data”,物理文件名为“RShDB_Data.mdf”,存放在“D:\RShDB_Data”文件夹下,初始大小为10MB,最大大小为30MB,自动增长时的递增量为5MB。日志文件的逻辑文件名为“RShDB_log”,物理文件名为“RShDB_log.ldf”,也存放在“D:\RShDB_Data”文件夹下,初始大小为3MB,最大大小为12MB,自动增长时的递增量为2MB。
创建此数据库的SQL语句为(假设所需的文件夹均已建立好):
CREATE DATABASE RShDB
ON
( NAME = RShDB_Data,
FILENAME = 'D:\RShDB_Data\RShDB_Data.mdf',
SIZE = 10,
MAXSIZE = 30,
FILEGROWTH = 5 )
LOG ON
( NAME = RShDB_log,
FILENAME = 'D:\RShDB_Data\RShDB_log.ldf',
SIZE = 3,
MAXSIZE = 12,
FILEGROWTH = 2 )
【例3-3】创建包含多个数据文件和多个日志文件的数据库。创建一个名为“学生数据库”的数据库,该数据库包含两个数据文件和两个日志文件,每个文件的定义如下。
主要数据文件逻辑名为student_data1,存放在PRIMARY文件组上,初始大小为5MB,每次增加1MB,最大大小无限制,物理存储位置为F:\Data文件夹,物理文件名为student_data1.mdf。
次要数据文件的逻辑名为student_data2,初始大小为8MB,自动增长,每次增加2MB,最多增加到20MB,物理存储位置为D:\Data文件夹,物理文件名为student_data2.ndf。
日志文件1的逻辑名为student_log1,初始大小为2MB,每次增加10%,最多增加到6MB,物理存储位置为E:\Log文件夹,物理文件名为student_log1.ldf。
日志文件2的逻辑名为student_log2,初始大小为3MB,每次增加1MB,最多增加到8MB,物理存储位置为G:\Log文件夹,物理文件名为student_log2.ldf。
创建此数据库的SQL语句为(假设所需的文件夹均已建立好):
CREATE DATABASE 学生数据库
ON PRIMARY
( NAME = students_data1,
FILENAME = 'F:\Data\student_data1.mdf',
SIZE = 5MB,
MAXSIZE = UNLIMITED),
( NAME = students_data2,
FILENAME = 'D:\Data\student_data2.ndf',
SIZE = 8MB,
MAXSIZE = 20MB,
FILEGROWTH = 2MB )
LOG ON
( NAME = students_log1,
FILENAME = 'E:\Log\student_log1.ldf',
SIZE = 2MB,
MAXSIZE = 6MB,
FILEGROWTH = 10%),
( NAME = students_log2,
FILENAME = 'G:\Log\student_log2.ldf',
SIZE = 3MB,
MAXSIZE = 8MB,
FILEGROWTH = 1MB )
【例3-4】创建具有文件组的数据库。创建一个名为Sales的数据库,该数据库除了主文件组PRIMARY外,还包括SalesGroup1和SalesGroup2两个用户创建的文件组。
主文件组包含Spri1_dat和Spri2_dat数据文件,这两个文件的FILEGROWTH均为15%。
SalesGroup1文件组包含SGrp1Fi1_dat和SGrp1Fi2_dat数据文件,这两个文件的FILEGROWTH均为5MB。
SalesGroup2文件组包含SGrp2Fi1_dat和SGrp2Fi2_dat文件,这两个文件的FILEGROWTH也都为5MB。
为了简单起见,假设这些文件均存放在D:\Sales文件夹下,所有数据文件的初始大小都是10MB,最大大小都是50MB。
该数据库只包含一个日志文件Sales_log,该文件也存放在D:\Sales文件夹下,初始大小为5MB,最大大小为25MB,每次增加5MB。
创建此数据库的SQL语句为(假设D:\Sales文件夹已建立好):
CREATE DATABASE Sales
ON PRIMARY
( NAME = SPri1_dat,
FILENAME = 'D:\Sales\Spri1_dat.mdf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 15%),
( NAME = SPri2_dat,
FILENAME = 'D:\Sales\Spri2_dat.ndf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 15% ),
FILEGROUP SalesGroup1
( NAME = SGrp1Fi1_dat,
FILENAME = 'D:\Sales\SGrp1Fi1_dat.ndf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 ),
( NAME = SGrp1Fi2_dat,
FILENAME = 'D:\Sales\SGrp1Fi2_dat.ndf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 ),
FILEGROUP SalesGroup2
( NAME = SGrp2Fi1_dat,
FILENAME = 'D:\Sales\SGrp2Fi1_dat.ndf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 ),
( NAME = SGrp2Fi2_dat,
FILENAME = 'D:\Sales\SGrp2Fi2_dat.ndf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 )
LOG ON
( NAME = Sales_log,
FILENAME = 'D:\Sales\Sales_log.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB )