创建一个新数据库及存储该数据库的文件或从先前创建的数据库的文件中附加数据库
语法
CREATE DATABASE database_name
[ ON
[ < filespec > [ n ] ]
[ < filegroup > [ n ] ]
]
[ LOG ON { < filespec > [ n ] } ]
[ COLLATE collation_name ]
[ FOR LOAD | FOR ATTACH ]
< filespec > ::=
[ PRIMARY ]
( [ NAME = logical_file_name ]
FILENAME = os_file_name
[ SIZE = size ]
[ MAXSIZE = { max_size | UNLIMITED } ]
[ FILEGROWTH = growth_increment ] ) [ n ]
< filegroup > ::=
FILEGROUP filegroup_name < filespec > [ n ]
参数
database_name
新数据库的名称数据库名称在服务器中必须唯一并且符合标识符的规则database_name 最多可以包含 个字符除非没有为日志指定逻辑名如果没有指定日志文件的逻辑名则 Microsoft® SQL Server; 会通过向 database_name 追加后缀来生成逻辑名该操作要求 database_name 在 个字符之内以便生成的日志文件逻辑名少于 个字符
ON
指定显式定义用来存储数据库数据部分的磁盘文件(数据文件)该关键字后跟以逗号分隔的 项列表 项用以定义主文件组的数据文件主文件组的文件列表后可跟以逗号分隔的 项列表(可选) 项用以定义用户文件组及其文件n
占位符表示可以为新数据库指定多个文件
LOG ON
指定显式定义用来存储数据库日志的磁盘文件(日志文件)该关键字后跟以逗号分隔的 项列表 项用以定义日志文件如果没有指定 LOG ON将自动创建一个日志文件该文件使用系统生成的名称大小为数据库中所有数据文件总大小的 %FOR LOAD
支持该子句是为了与早期版本的 Microsoft SQL Server 兼容数据库在打开 dbo use only 数据库选项的情况下创建并且将其状态设置为正在装载SQL Server 版中不需要该子句因为 RESTORE 语句可以作为还原操作的一部分重新创建数据库
FOR ATTACH
指定从现有的一组操作系统文件中附加数据库必须有指定第一个主文件的 条目至于其它 条目只需要与第一次创建数据库或上一次附加数据库时路径不同的文件的那些条目必须为这些文件指定 条目附加的数据库必须使用与 SQL Server 相同的代码页和排序次序创建应使用 sp_attach_db 系统存储过程而不要直接使用 CREATE DATABASE FOR ATTACH只有必须指定 个以上的 项目时才需要使用 CREATE DATABASE FOR ATTACH 如果将数据库附加到的服务器不是该数据库从中分离的服务器并且启用了分离的数据库以进行复制则应该运行 sp_removedbreplication 从数据库删除复制
collation_name
指定数据库的默认排序规则排序规则名称既可以是 Windows 排序规则名称也可以是 SQL 排序规则名称如果没有指定排序规则则将 SQL Server 实例的默认排序规则指派为数据库的排序规则
有关 Windows 和 SQL 排序规则名称的更多信息请参见 COLLATE
PRIMARY
指定关联的 列表定义主文件主文件组包含所有数据库系统表还包含所有未指派给用户文件组的对象主文件组的第一个 条目成为主文件该文件包含数据库的逻辑起点及其系统表一个数据库只能有一个主文件如果没有指定 PRIMARY那么 CREATE DATABASE 语句中列出的第一个文件将成为主文件NAME
为由 定义的文件指定逻辑名称如果指定了 FOR ATTACH则不需要指定 NAME 参数logical_file_name
用来在创建数据库后执行的 TransactSQL 语句中引用文件的名称logical_file_name 在数据库中必须唯一并且符合标识符的规则该名称可以是字符或 Unicode 常量也可以是常规标识符或定界标识符
FILENAME
为 定义的文件指定操作系统文件名os_file_name
操作系统创建 定义的物理文件时使用的路径名和文件名os_file_name 中的路径必须指定 SQL Server 实例上的目录os_file_name 不能指定压缩文件系统中的目录如果文件在原始分区上创建则 os_file_name 必须只指定现有原始分区的驱动器字母每个原始分区上只能创建一个文件原始分区上的文件不会自动增长因此os_file_name 指定原始分区时不需要指定 MAXSIZE 和 FILEGROWTH 参数
SIZE
指定 中定义的文件的大小如果主文件的 中没有提供 SIZE 参数那么 SQL Server 将使用 model 数据库中的主文件大小如果次要文件或日志文件的 中没有指定 SIZE 参数则 SQL Server 将使文件大小为 MBsize
中定义的文件的初始大小可以使用千字节 (KB)兆字节 (MB)千兆字节 (GB) 或兆兆字节 (TB) 后缀默认值为 MB指定一个整数不要包含小数位size 的最小值为 KB如果没有指定 size则默认值为 MB为主文件指定的大小至少应与 model 数据库的主文件大小相同MAXSIZE
指定 中定义的文件可以增长到的最大大小max_size
中定义的文件可以增长到的最大大小可以使用千字节 (KB)兆字节 (MB)千兆字节 (GB) 或兆兆字节 (TB) 后缀默认值为 MB指定一个整数不要包含小数位如果没有指定 max_size那么文件将增长到磁盘变满为止 说明在磁盘即将变满时Microsoft Windows NT® S/B 系统日志会警告 SQL Server 系统管理员
UNLIMITED
指定 中定义的文件将增长到磁盘变满为止FILEGROWTH
指定 中定义的文件的增长增量文件的 FILEGROWTH 设置不能超过 MAXSIZE 设置growth_increment
每次需要新的空间时为文件添加的空间大小指定一个整数不要包含小数位 值表示不增长该值可以 MBKBGBTB 或百分比 (%) 为单位指定如果未在数量后面指定 MBKB 或 %则默认值为 MB如果指定 %则增量大小为发生增长时文件大小的指定百分比如果没有指定 FILEGROWTH则默认值为 %最小值为 KB指定的大小捨入为最接近的 KB 的倍数
注释
使用一条 CREATE DATABASE 语句即可创建数据库以及存储该数据库的文件SQL Server 分两步实现 CREATE DATABASE 语句
SQL Server 使用 model 数据库的复本初始化数据库及其元数据
然后SQL Server 使用空页填充数据库的剩余部分除了包含记录数据库中空间使用情况以外的内部数据页
因此model 数据库中任何用户定义对象均复制到所有新创建的数据库中可以向 model 数据库中添加任何对象例如表视图存储过程数据类型等以将这些对象添加到所有数据库中
每个新数据库都从 model 数据库继承数据库选项设置(除非指定了 FOR ATTACH)例如在 model 和任何创建的新数据库中数据库选项 select into/bulkcopy 都设置为 OFF如果使用 ALTER DATABASE 更改 model 数据库的选项则这些选项设置会在创建的新数据库中生效如果在 CREATE DATABASE 语句中指定了 FOR ATTACH则新数据库将继承原始数据库的数据库选项设置
一台服务器上最多可以指定 个数据库
有三种类型的文件用来存储数据库
主文件包含数据库的启动信息主文件还可以用来存储数据每个数据库都包含一个主文件
次要文件保存所有主要数据文件中容纳不下的数据如果主文件大到足以容纳数据库中的所有数据就不需要有次要数据文件而另一些数据库可能非常大需要多个次要数据文件也可能使用多个独立磁盘驱动器上的次要文件以将数据分布在多个磁盘上
事务日志文件保存用来恢复数据库的日志信息每个数据库必须至少有一个事务日志文件(尽管可以有多个)事务日志文件最小为 KB
每个数据库至少有两个文件一个主文件和一个事务日志文件
尽管 os_file_name 可以是任何有效的操作系统文件名但如果使用以下建议的扩展名则可以更加清楚地反映文件的用途
[[The No Picture]]
说明创建用户数据库后应备份 master 数据库
SIZEMAXSIZE 和 FILEGROWTH 参数中不能指定分数若要在 SIZE 参数中指定以兆字节为单位的分数请将该数字乘以 转换成千字节例如指定 KB 而不要指定 MB( 乘以 等于 )
如果仅指定 CREATE DATABASE database_name 语句而不带其它参数那么数据库的大小将与 model 数据库的大小相等
所有数据库都至少包含一个主文件组所有系统表都分配在主文件组中数据库还