菜鸟科技网

SQLServer创建数据库命令的语法是什么?

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

SQLServer创建数据库命令的语法是什么?-图1
(图片来源网络,侵删)

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' ]
    )
  )
}

核心参数详解

  1. database_name
    数据库名称必须符合SQL Server标识符规则,最长128个字符,且在SQL Server实例中唯一,建议使用有意义的名称,避免保留关键字(如mastertempdb等)。

  2. ON子句
    用于定义数据库的数据文件和文件组。PRIMARY指定主数据文件(.mdf),若未明确指定,则第一个文件自动成为主文件,每个文件需包含以下参数:

    • NAME:逻辑文件名,用于SQL Server内部引用。
    • FILENAME:操作系统中的物理路径及文件名,需确保SQL Server服务账户对该路径有读写权限。
    • SIZE:初始文件大小,默认值为MB单位,最小值为512 KB,若未指定,默认为model数据库大小。
    • MAXSIZE:文件最大增长限制,设置为UNLIMITED表示无限制。
    • FILEGROWTH:文件增长增量,可使用表示按当前大小的百分比增长,默认值为MB单位。
  3. LOG ON子句
    用于定义事务日志文件(.ldf),语法与数据文件类似,若未指定,SQL Server会自动创建日志文件,大小为数据文件大小的25%,最大为64 GB。

    SQLServer创建数据库命令的语法是什么?-图2
    (图片来源网络,侵删)
  4. FILEGROUP子句
    用于创建文件组,将数据文件分组管理,便于优化性能和分配存储。DEFAULT表示该文件组为默认文件组。

  5. COLLATE子句
    指定数据库的排序规则,如SQL_Latin1_General_CP1_CI_AS(不区分大小写、区分重音),若未指定,继承实例的默认排序规则。

  6. 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。

SQLServer创建数据库命令的语法是什么?-图3
(图片来源网络,侵删)

创建多文件组数据库

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
);

该示例创建包含两个文件组(FG1FG2)的数据库,适用于将不同表分散存储在不同磁盘以提高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的数据库,可将文档等非结构化数据存储在文件系统中,同时支持非事务性访问。

注意事项

  1. 权限要求:执行CREATE DATABASE需具备CREATE DATABASE服务器权限,或属于sysadmin固定服务器角色。
  2. 路径验证:物理路径必须存在,且SQL Server服务账户需有权限访问,建议将数据文件和日志文件放在不同磁盘以避免I/O争用。
  3. 文件增长策略:合理设置FILEGROWTHMAXSIZE,避免因文件自动增长导致性能下降或磁盘空间耗尽。
  4. 排序规则影响:排序规则会影响字符串比较和排序操作,跨服务器迁移数据库时需保持排序规则一致。
  5. 命名规范:数据文件和日志文件建议使用不同的扩展名(.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: 此错误通常因磁盘空间不足或文件路径权限问题导致,可按以下步骤排查:

  1. 检查指定路径的剩余空间是否满足SIZEMAXSIZE要求;
  2. 确认SQL Server服务账户对目标文件夹有完全控制权限;
  3. 尝试将文件路径改为其他磁盘或减小初始文件大小。
分享:
扫描分享到社交APP
上一篇
下一篇