SQL Server-创建数据库


在SQL Server中,每个数据库至少拥有两个操作系统文件:一个数据文件和一个日志文件。

数据文件包含数据和对象;例如数据库表( table),索引( index)、存储过程( storage)、触发器( trigger)和视图(view)等。

日志文件包含数据库中所有更新事务的全部信息,用于恢复数据库。为了便于分配和管理,可以将数据文件集合成若干文件组。在创建数据库对象之前应首先创建数据库。

数据库文件:SQL Server数据库具有三种类型的文件

主要数据文件:主要数据文件( primary data file)包含数据库的启动信息,并指向数据库中的其他文件。用户数据和对象可存储在此文件中,也可以存储在次要数据文件中。每个数据库有一个主要数据文件。主要数据文件的建议文件扩展名是. mdf。

次要数据文件:次要数据文件(no-primary data file)是可选的,由用户定义并存储用户数据。将数据库中的数据分散在不同的文件中有两个好处。其一,次要文件可用于将数据分散到多个磁盘上,这样系统就可以同时对多个硬盘做存取,加快数据处理的速度,提高系统工作效率。其二,如果数据库超过了单个Windows文件的最大大小,可以使用次要数据文件,这样数据库就能继续增长。次要数据文件的建议文件扩展名是. ndf。

事务日志文件:事务日志文件保存用于恢复数据库的日志信息。每个数据库必须至少有一个日志文件。事务日志的建议文件扩展名是.ldf。

在SQL Server 2005 中,数据库中所有文件的位置都记录在数据库的主文件master系统数据库中。大多数情况下,数据库引擎使用master数据库中的文件位置信息。

文件组:

文件组是指将构成数据库的数个文件集合起来组合成为一个个群体,并给定一个组名。当在数据库中创建数据库对象时,可以特别指定要将某些对象存储在某一特定的组上。SQL  Server 2005 中的数据库可由数个文件组组成,其中一个称为主要文件组( primary filegroup),其他则由用户定义,称为非主要文件组。

当创建数据库时,主要文件组包含有主要数据文件和未指定加入组的其他文件,该数据库所属的系统表(systemtable)也是建立在主要文件组上。在其他非主要文件组中,用户可指定其中一个为默认文件组(default filegroup),当用户在数据库上创建对象时,如果未指明该对象要建立在哪一个文件组时,系统会将该对象建立在默认文件组上。默认文件组中的文件必须足够大,能够容纳未分配给其他文件组的所有新对象。如果没有默认文件组的话,则主要文件组为默认的文件组。使用文件组的目的也是为提高执行效率。

事务日志:

在创建一个数据库的同时,系统一定要创建一个对应的事务处理日志文件(transaction log),该文件是用来记录数据库的更新情况的,凡对数据库数据有改变的事务操作都会记录在这个文件中,如insert , update, delete操作等。事务日志的作用是当数据库被破坏时,可以利用它来恢复数据库内容。每个数据库也可以有多个日志文件。其建议文件扩展名为.ldf。

逻辑和物理文件名称:

逻辑文件名(logical_file_name)是在所有Transact-SQL语句中引用数据库物理文件时所使用的名称。逻辑文件名必须符合SQL Server标识符规则,而且在数据库中的逻辑文件名必须是唯一的。

物理文件名(os_file_name)是包括目录路径的数据库物理文件名。它必须符合操作系统文件命名规则。

创建数据库

1.交互式创建数据库

打开SQL Server ,在对象资源管理器中,右击“数据库”,选择“新建数据库”。在窗口中可以对数据库文件进行操作。设置好参数后确认。

2.使用Transact-SQL指定参数创建数据库

2.1 创建数据库 testbase1

在查询编辑器窗口中输入T-SQL语句:

create database testbase1  --数据库名
on
(  name = testbase1_data,  --逻辑文件名
     filename = 'F:\MSSQL\lab1\testbase1_data.mdf')  --物理文件名
log on
(  name = testbase1_log,
     filename = 'F:\MSSQL\lab1\testbase1_log.ldf')
go

2.2 指定多个参数创建数据库 testbase2

在查询编辑器窗口中输入T-SQL语句:

create database testbase2  --数据库名
on
    primary  --文件组
        ( name = testbase2_prim_sub_dat1,  --逻辑文件名
            filename = 'F:\MSSQL\lab1\testbase2_prim_sub1_dat.mdf',  --物理文件名
            size = 5mb,
            maxsize = 50mb,
            filegrowth = 20%),
        ( name = testbase2_prim_sub_dat2,
            filename = 'F:\MSSQL\lab1\testbase2_prim_sub2_dat.ndf',
            size = 5mb,
            maxsize = 50mb,
            filegrowth = 20%),
    filegroup testbase2_group1
        ( name = testbase2_group1_sub1,
            filename = 'F:\MSSQL\lab1\testbase2_group1_sub1_dat.ndf',
            size = 5mb,
            maxsize = 50mb,
            filegrowth = 5mb),
        ( name = testbase2_group1_sub2,
            filename = 'F:\MSSQL\lab1\testbase2_group1_sub2_dat.ndf',
            size = 5mb,
            maxsize = 50mb,
            filegrowth = 5mb),
    filegroup testbase2_group2
        ( name = testbase2_group2_sub1,
            filename = 'F:\MSSQL\lab1\testbase2_group2_sub1_dat.ndf',
            size = 5mb,
            maxsize = 50mb,
            filegrowth = 15%),
        ( name = testbase2_group2_sub2,
            filename = 'F:\MSSQL\lab1\testbase2_group2_sub2_dat.ndf',
            size = 5mb,
            maxsize = 50mb,
            filegrowth = 15%)
log on
( name = testbase2_testbase2_log,
    filename = 'F:\MSSQL\lab1\testbase2_log_file.ldf',
    size = 20mb,
    maxsize = 500mb,
    filegrowth = 10mb)
go