在SQL Server中创建数据库是数据库管理的核心操作之一,掌握其命令语法和参数配置对于数据库管理员和开发人员至关重要,本文将详细讲解SQL Server创建数据库的完整命令语法,包括各参数的作用、示例用法及注意事项,帮助用户全面理解并灵活应用。

SQL Server创建数据库主要通过CREATE DATABASE
语句实现,其基本语法结构如下:
CREATE DATABASE database_name [ ON [ PRIMARY ] [ <filespec> [ ,...n ] ] [ , <filegroup> [ ,...n ] ] ] [ LOG ON { <filespec> [ ,...n ] } ] [ COLLATE collation_name ] [ WITH <option> [ ,...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 | % ] ] ) } <filegroup>::= { FILEGROUP filegroup_name [ CONTAINS FILESTREAM ] [ DEFAULT ] <filespec> [ ,...n ] } <option>::= { ( FILESTREAM ( [ NON_TRANSACTED_ACCESS = { OFF | READ_ONLY | FULL } ] [ , DIRECTORY_NAME = 'directory_name' ] ) ) }
核心参数详解
-
database_name
数据库名称必须符合SQL Server标识符规则,最长128个字符,且在SQL Server实例中唯一,建议使用有意义的名称,避免保留关键字(如master
、tempdb
等)。 -
ON子句
用于定义数据库的数据文件和文件组。PRIMARY
指定主数据文件(.mdf
),若未明确指定,则第一个文件自动成为主文件,每个文件需包含以下参数:NAME
:逻辑文件名,用于SQL Server内部引用。FILENAME
:操作系统中的物理路径及文件名,需确保SQL Server服务账户对该路径有读写权限。SIZE
:初始文件大小,默认值为MB
单位,最小值为512 KB,若未指定,默认为model
数据库大小。MAXSIZE
:文件最大增长限制,设置为UNLIMITED
表示无限制。FILEGROWTH
:文件增长增量,可使用表示按当前大小的百分比增长,默认值为MB
单位。
-
LOG ON子句
用于定义事务日志文件(.ldf
),语法与数据文件类似,若未指定,SQL Server会自动创建日志文件,大小为数据文件大小的25%,最大为64 GB。(图片来源网络,侵删) -
FILEGROUP子句
用于创建文件组,将数据文件分组管理,便于优化性能和分配存储。DEFAULT
表示该文件组为默认文件组。 -
COLLATE子句
指定数据库的排序规则,如SQL_Latin1_General_CP1_CI_AS
(不区分大小写、区分重音),若未指定,继承实例的默认排序规则。 -
WITH子句
用于配置高级选项,如FILESTREAM
,支持将非结构化数据(如文档、媒体文件)直接存储在NTFS文件系统中。
示例应用
创建简单数据库
CREATE DATABASE SalesDB ON PRIMARY ( NAME = SalesDB_Data, FILENAME = 'C:\SQLData\SalesDB.mdf', SIZE = 5MB, MAXSIZE = 100MB, FILEGROWTH = 10% ) LOG ON ( NAME = SalesDB_Log, FILENAME = 'C:\SQLLog\SalesDB.ldf', SIZE = 2MB, MAXSIZE = 50MB, FILEGROWTH = 1MB );
此示例创建名为SalesDB
的数据库,主数据文件初始大小为5MB,最大增长至100MB,按10%增量增长;日志文件初始大小为2MB,最大50MB,固定增长1MB。

创建多文件组数据库
CREATE DATABASE InventoryDB ON PRIMARY ( NAME = InventoryDB_Data, FILENAME = 'C:\SQLData\InventoryDB.mdf', SIZE = 10GB, FILEGROWTH = 1GB ), FILEGROUP FG1 ( NAME = InventoryDB FG1 Data, FILENAME = 'D:\Data\InventoryDB_FG1.ndf', SIZE = 5GB, FILEGROWTH = 512MB ), FILEGROUP FG2 ( NAME = InventoryDB FG2 Data, FILENAME = 'E:\Data\InventoryDB_FG2.ndf', SIZE = 5GB, FILEGROWTH = 512MB ) LOG ON ( NAME = InventoryDB_Log, FILENAME = 'C:\SQLLog\InventoryDB.ldf', SIZE = 8GB, FILEGROWTH = 1GB );
该示例创建包含两个文件组(FG1
和FG2
)的数据库,适用于将不同表分散存储在不同磁盘以提高I/O性能。
创建支持FILESTREAM的数据库
CREATE DATABASE DocumentDB ON PRIMARY ( NAME = DocumentDB_Data, FILENAME = 'C:\SQLData\DocumentDB.mdf', SIZE = 3GB, FILEGROWTH = 1GB ), FILEGROUP DocumentFS CONTAINS FILESTREAM ( NAME = DocumentFS_Data, FILENAME = 'C:\FSData\DocumentFS' ) LOG ON ( NAME = DocumentDB_Log, FILENAME = 'C:\SQLLog\DocumentDB.ldf', SIZE = 1GB ) WITH (FILESTREAM (NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = 'DocumentFS'));
此示例创建支持FILESTREAM的数据库,可将文档等非结构化数据存储在文件系统中,同时支持非事务性访问。
注意事项
- 权限要求:执行
CREATE DATABASE
需具备CREATE DATABASE
服务器权限,或属于sysadmin
固定服务器角色。 - 路径验证:物理路径必须存在,且SQL Server服务账户需有权限访问,建议将数据文件和日志文件放在不同磁盘以避免I/O争用。
- 文件增长策略:合理设置
FILEGROWTH
和MAXSIZE
,避免因文件自动增长导致性能下降或磁盘空间耗尽。 - 排序规则影响:排序规则会影响字符串比较和排序操作,跨服务器迁移数据库时需保持排序规则一致。
- 命名规范:数据文件和日志文件建议使用不同的扩展名(
.mdf
、.ndf
、.ldf
),便于管理。
相关问答FAQs
Q1: 如何修改已创建数据库的文件大小和增长策略?
A1: 使用ALTER DATABASE
语句修改文件属性,将SalesDB
的主数据文件最大大小改为200MB,并设置固定增长2MB:
ALTER DATABASE SalesDB MODIFY FILE ( NAME = SalesDB_Data, MAXSIZE = 200MB, FILEGROWTH = 2MB );
Q2: 创建数据库时提示“设备资源不足”如何解决?
A2: 此错误通常因磁盘空间不足或文件路径权限问题导致,可按以下步骤排查:
- 检查指定路径的剩余空间是否满足
SIZE
和MAXSIZE
要求; - 确认SQL Server服务账户对目标文件夹有完全控制权限;
- 尝试将文件路径改为其他磁盘或减小初始文件大小。