在SQL Server中,数据库主要用来存储数据及数据库对象(如表、索引等)。本节主要介绍如何创建、修改和删除数据库。
在SQL Server创建用户数据库之前,用户必须设计好数据库的名称以及它的所有者、空间大小和存储信息的文件与文件组。
下面在SQL Server Management Studio中创建数据库db_database,具体操作步骤如下。
(1)启动SQL Server Management Studio,连接到SQL Server数据库服务器上。
(2)右击“数据库”选项,在弹出的快捷菜单中选择“新建数据库”命令,如图3.1所示。
(3)进入“新建数据库”对话框,如图3.2所示。在列表框中填写数据库名“db_Test”,单击“确定”按钮,成功添加数据库。
图3.1 新建数据库
图3.2 创建数据库名称
“常规”选项卡:用于设置新建数据库的名称。
“选项”和“文件组”选项卡:定义数据库的一些选项,显示文件和文件组的统计信息。这里均采用默认设置。
SQL Server默认创建了一个PRIMARY文件组,用于存放若干个数据文件。但日志文件没有文件组。
(4)单击“所有者”后面的“浏览”按钮 ,在弹出的列表框中选择数据库的所有者。数据库所有者是对数据库具有完全操作权限的用户,这里选择“默认值”选项,表示数据库所有者为用户登录Windows操作系统使用的管理员账户,如Administrator。
SQL Server数据库的数据文件有逻辑名和物理名。逻辑名是在SQL语句中引用文件时使用的名称,物理名用于操作系统管理。
(5)在“数据库名称”文本框中输入新建数据库的名称“db_Test”,数据库名称设置完成后,系统自动在“数据库文件”列表中产生一个主要数据文件(初始大小为8 MB)和一个日志文件(初始大小为8 MB),同时显示文件组、自动增长和路径等默认设置,用户可以根据需要自行修改这些默认的设置,也可以单击右下角的“添加”按钮添加数据文件。这里主要数据文件和日志文件均采用默认设置。
语法如下:
参数说明如下。
database_name:新数据库的名称。数据库名称在SQL Server的实例中必须唯一,并且必须符合标识符规则。
ON:指定显式定义用来存储数据库数据部分的磁盘文件(数据文件)。当后面是以逗号分隔的、用以定义主文件组的数据文件的<filespec>项列表时,需要使用ON。主文件组的文件列表后可跟以逗号分隔的用以定义用户文件组及其文件的<filegroup>项列表(可选)。
PRIMARY:指定关联的<filespec>列表定义主文件。在主文件组的<filespec>项中指定的第一个文件将成为主文件。一个数据库只能有一个主文件。
LOG ON:指定显式定义用来存储数据库日志的磁盘文件(日志文件)。LOG ON后跟以逗号分隔的用以定义日志文件的<filespec>项列表。如果没有指定LOG ON,将自动创建一个日志文件,其大小为该数据库的所有数据文件大小总和的25%或512 KB,取两者之中的较大者。不能对数据库快照指定LOG ON。
COLLATE:指明数据库使用的校验方式。collation_name可以是Windows的校验方式名,也可以是SQL校验方式名。如果省略此子句,则数据库使用当前的SQL Server校验方式。
NAME:指定文件在SQL Server中的逻辑名。当使用FOR ATTACH选项时,就不需要使用NAME选项。
FILENAME:指定文件在操作系统中存储的路径和文件名。
SIZE:指定数据库的初始容量大小。如果没有指定主文件的大小,则SQL Server默认其与模板数据库中的主文件大小一致,其他数据库文件和事务日志文件则默认为1 MB。指定大小的数字SIZE可以使用KB、MB、GB和TB作为后缀,默认的后缀为MB。SIZE中不能使用小数,其最小值为512 KB,默认值是1 MB。主文件的SIZE不能小于模板数据库中的主文件。
MAXSIZE:指定文件的最大容量。如果没有指定MAXSIZE,则文件可以不断增长直到充满磁盘。
UNLIMITED:指明文件无容量限制。
FILEGROWTH:指定文件每次增容时增加的容量大小。增加量可以用以KB、MB作后缀的字节数或以%作后缀的被增容文件的百分比来表示。默认后缀为MB。如果没有指定FILEGROWTH,则默认值为10%,每次扩容的最小值为64 KB。
【例3.1】 用CREATE DATABASE命令创建一个名为MingRi的数据库,如图3.3所示。 (实例位置:资源包\TM\sl\3\1)
图3.3 创建一个名称为MingRi的数据库
代码如下:
CREATE DATABASE MingRi --使用CREATE DATABASE命令创建一个名称为MingRi的数据库
在创建数据库时,所要创建的数据库名必须是系统中不存在的,如果存在相同名称的数据库,在创建数据库时系统将报错。另外,数据库的名称也可以是中文名称。
【例3.2】 在SQL Server管理器中,使用CREATE DATABASE命令创建名为mrkj的数据库。其中,主数据文件名是mrkj.mdf,初始大小是10 MB,最大存储空间是100 MB,增长大小是5 MB。而日志文件名是mrkj.ldf,初始大小是8 MB,最大的存储空间是50 MB,增长大小是8 MB,如图3.4所示。 (实例位置:资源包\TM\sl\3\2)
图3.4 自定义选项创建数据库
代码如下:
数据库创建完成后,用户在使用过程中可以根据需要对其原始定义进行修改。修改的内容主要包括以下几项。
更改数据库文件。
添加和删除文件组。
更改选项。
更改跟踪。
更改权限。
更改扩展属性。
更改镜像。
更改事务日志传送。
下面介绍如何更改数据库的所有者,具体操作步骤如下。
(1)启动SQL Server Management Studio,连接到SQL Server服务器上,在“对象资源管理器”对话框中展开“数据库”节点。
(2)右击需要更改的数据库,在弹出的快捷菜单中选择“属性”命令,如图3.5所示。
(3)进入“数据库属性”对话框,如图3.6所示。通过该对话框可以修改数据库的相关选项。
图3.5 选择“属性”命令
图3.6 “数据库属性”对话框
(4)打开“数据库属性”对话框中的“文件”选项卡,单击“所有者”后的“浏览”按钮 ,弹出“选择数据库所有者”对话框,如图3.7所示。
(5)单击“浏览”按钮,弹出“查找对象”对话框,如图3.8所示。通过该对话框选择匹配对象。
图3.7 “选择数据库所有者”对话框
图3.8 “查找对象”对话框
(6)在“匹配的对象”列表框中选择数据库的所有者sa选项,单击“确定”按钮,完成数据库所有者的更改操作。
SQL中修改数据库的命令为ALTER DATABASE。语法格式如下:
参数说明如下。
ADD FILE:指定要增加的数据库文件。
TO FILEGROUP:指定要增加文件到哪个文件组。
ADD LOG FILE:指定要增加的事务日志文件。
REMOVE FILE:从数据库系统表中删除指定文件的定义,并且删除其物理文件。文件只有为空时才能被删除。
ADD FILEGROUP:指定要增加的文件组。
REMOVE FILEGROUP:从数据库中删除指定文件组的定义,并且删除其包含的所有数据库文件。文件组只有为空时才能被删除。
MODIFY FILE:修改指定文件的文件名、容量大小、最大容量、文件增容方式等属性,但一次只能修改一个文件的一个属性。使用此选项时应注意,在文件格式filespec中必须用NAME明确指定文件名称,如果文件大小已经确定,那么新定义的SIZE必须比当前的文件容量大;FILENAME只能指定在tempdbdatabase中存在的文件,并且新的文件名只有在SQL Server重新启动后才起作用。
MODIFY FILEGROUP:修改文件组属性,其中属性filegroup_ property的取值可以为READONLY,表示指定文件组为只读,要注意的是主文件组不能指定为只读,只有对数据库有独占访问权限的用户才可以将一个文件组标志为只读;取值为READWRITE,表示使文件组为可读写,只有对数据库有独占访问权限的用户才可以将一个文件组标志为可读写;取值为DEFAULT,表示指定文件组为默认文件组,一个数据库中只能有一个默认文件组。
SET:设置数据库属性。
ALTER DATABASE命令可以修改数据库大小、缩小数据库、更改数据库名称等。
【例3.3】 将一个大小为10 MB的数据文件mrkj添加到MingRi数据库中,该数据文件的大小为10 MB,最大的文件大小为100 MB,增长速度为2 MB,MingRi数据库的物理地址为G盘文件夹下。 (实例位置:资源包\TM\sl\3\3)
SQL语句如下:
【例3.4】 使用系统存储过程sp_renamedb将数据库名称mrkj更名为mrsoft,如图3.9所示。 (实例位置:资源包\TM\sl\3\4)
图3.9 将数据库名称mrkj更名为mrsoft
代码如下:
exec sp_renamedb 'mrkj', 'mrsoft' --数据库重命名
只有属于sysadmin固定服务器角色的成员才可以执行sp_renamedb系统存储过程。
如果用户不再需要某一数据库,只要满足一定的条件即可将其删除。删除之后,相应的数据库文件及其数据都会被删除,并且不可恢复。
删除数据库时必须满足以下条件。
如果数据库涉及日志传送操作,在删除数据库之前必须取消日志传送操作。
若要删除为事务复制发布的数据库,或删除为合并复制发布或订阅的数据库,必须首先从数据库中删除备份。如果数据库已损坏,不能删除备份,可以先将数据库设置为脱机状态,然后再删除数据库。
如果数据库上存在数据库快照,必须首先删除数据库快照。
下面介绍如何删除数据库MingRi,具体操作步骤如下。
(1)启动SQL Server Management Studio,连接到SQL Server中的数据库。在“对象资源管理器”中展开“数据库”节点。
(2)右击要删除的数据库MingRi选项,在弹出的快捷菜单中选择“删除”命令,如图3.10所示。
(3)在弹出的“删除对象”对话框中单击“确定”按钮,即可删除数据库,如图3.11所示。
图3.10 选择“删除”命令
图3.11 “删除对象”对话框
系统数据库(msdb、model、master、tempdb)无法删除。卸载数据库后应立即备份master数据库,因为卸载数据库会更新master数据库中的信息。
语法格式如下:
DROP DATABASE database_name [ ,...n ] --如果有多个要删除的数据库,用逗号隔开
其中,database_name是要删除的数据库名,中括号内为有多个数据库的情况。
另外,如果删除正在使用的数据库,系统将出现错误。例如,不能在“学生档案管理”数据库中删除“学生档案管理”数据库,SQL代码如下:
Use 学生档案管理 --使用学生档案管理数据库 Drop database 学生档案管理 --删除正在使用的数据库
删除学生档案管理数据库的操作没有成功,系统会报错,运行结果如图3.12所示。
图3.12 删除正在使用的数据库时系统报错
使用DROP DATABASE命令还可以批量删除数据库。例如,将“m1”“m2”“m3”这3个数据库批量删除。要删除的数据库间用逗号隔开,代码如下:
Drop database m1,m2,m3