CREATE DATABASE建库语句详解

原创地址:http://blog.csdn.net/guguda2008/article/details/5716939数据库

一个完整的建库语句是相似这样的:服务器

IF DB_ID('TEST') IS NOT NULL DROP DATABASE TEST
GO
CREATE DATABASE TEST
ON PRIMARY (
NAME=TEST_DAT_MAIN1
,FILENAME='D:/SQL2008DATAS/TEST_DAT_MAIN1.MDF'
,SIZE=3MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
),(
NAME=TEST_DAT_MAIN2
,FILENAME='D:/SQL2008DATAS/TEST_DAT_MAIN2.MDF'
,SIZE=3MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
)
,FILEGROUP TEST_DAT_SUB1 DEFAULT (
NAME=TEST_DAT_SUB1
,FILENAME='D:/SQL2008DATAS/TEST_DAT_SUB1.MDF'
,SIZE=2MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
),(
NAME=TEST_DAT_SUB2
,FILENAME='D:/SQL2008DATAS/TEST_DAT_SUB2.MDF'
,SIZE=2MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
)
,FILEGROUP TEST_DAT_SUB2 (
NAME=TEST_DAT_SUB3
,FILENAME='D:/SQL2008DATAS/TEST_DAT_SUB3.MDF'
,SIZE=2MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
)
,FILEGROUP TEST_DAT_FILESTREAM1 CONTAINS FILESTREAM (
NAME=TEST_DAT_FILESTREAM1
,FILENAME='E:/SQL2008DATAS/TEST_DAT_FILESTREAM1.MDF'
)
,FILEGROUP TEST_DAT_FILESTREAM2 CONTAINS FILESTREAM (
NAME=TEST_DAT_FILESTREAM2
,FILENAME='E:/SQL2008DATAS/TEST_DAT_FILESTREAM2.MDF'
)
LOG ON (
NAME=TEST_LOG1
,FILENAME='D:/SQL2008DATAS/TEST_LOG1.LDF'
,SIZE=10MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=10MB
),(
NAME=TEST_LOG2
,FILENAME='D:/SQL2008DATAS/TEST_LOG2.LDF'
,SIZE=10MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=10MB
)
COLLATE CHINESE_PRC_CI_AS
WITH 
DB_CHAINING OFF
,TRUSTWORTHY OFF
 

长了一点,不过不要紧,我分开一点一点说网络

1.工具

IF DB_ID('TEST') IS NOT NULL DROP DATABASE TEST
GO
操作系统

这个是判断若是有名为TEST的数据库就删除,不在本文讨论范围内,知道啥意思就好。.net

 

2.日志

CREATE DATABASE TEST对象

这就是刚才说的最简单的建库语句blog

CREATE DATABASE是关键字,表示要创建一个数据库,这两句是不能改的排序

TEST是库名,基本上是随便打的,只要符合一些规范,别打乱七八糟的字符行了,好比火星文什么的。具体规范能够看这里

http://msdn.microsoft.com/zh-cn/library/ms175874.aspx

 

3.

ON PRIMARY (
NAME=TEST_DAT_MAIN1
,FILENAME='D:/SQL2008DATAS/TEST_DAT_MAIN1.MDF'
,SIZE=3MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
),(
NAME=TEST_DAT_MAIN2
,FILENAME='D:/SQL2008DATAS/TEST_DAT_MAIN2.MDF'
,SIZE=3MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
)

 

这里详细说一下

    MSSQL是经过文件来存放数据的,在管理这些文件的时候能够把若干个文件分到一组。一个数据库至少要有一个文件和一个文件组,其中至少有一个主文件组,主文件组中有且只有一个主文件,若是用户没有指定主文件组则会经过一些默认设置来自动建立。好比上面那个最简单的CREATE DTABASE TEST,系统会自动建立一个RPIMARY文件组,其中有一个TEST.MDF文件。

    ON PRIMARY的意思是就是指定主文件组中包含的文件。上面这段语句为主文件组PRIMARY指定了两个文件,第一个文件就是数据库的主文件,第二个文件则是同属PRIMARY文件组的次要数据文件。在括号中的就是它的属性。若是要手工指定属性,NAME和FILENAME是必须写的,后面三个能够不写。不写的话就会跟MODEL数据库的设置同样。

    NAME是文件的逻辑名称,在数据库管理时做为文件的标识使用,文件名在数据库中不能重名。

    FILENAME是文件的物理名称,也就是它在操做系统中的存放路径。MSDN中的原话是“文件必须驻留在下列一种设备中:安装 SQL Server 的本地服务器、存储区域网络 [SAN] 或基于 iSCSI 的网络。”。后面两个我都没用过,留待之后学会了再补充,前一个就是WINDOWS中的路径了。注意若是文件所在的文件夹不存在会报错,因此要提早建好文件夹。

    SIZE是文件的初始大小,主文件最小2MB,次要文件最小512KB。若是SIZE后面只写数字如2则默认为2MB。

    MAXSIZE指定文件的最大大小,若是数据库中的全部文件都达到最大大小或者磁盘没空间了都会致使没法插入或由小到大更新。MAXSIZE中能够写数字,和SIZE同样,也能够写UNLIMITED指定不限制最大大小。

    FILEGROWTH指定文件增加方式,能够和上面同样写数字,也能够写百分比,不过建议写数字,由于数据库大了之后按百分比增加会慢。

    一个文件组由一段定义文字和由括号包起来的若干个文件组成,多个文件用逗号分隔,每一个文件由一对括号和若干个由逗号分隔的属性组成,语法就是这样了,后面的语句和这个是大同小异的。

 

4.

,FILEGROUP TEST_DAT_SUB1 DEFAULT (
NAME=TEST_DAT_SUB1
,FILENAME='D:/SQL2008DATAS/TEST_DAT_SUB1.MDF'
,SIZE=2MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
),(
NAME=TEST_DAT_SUB2
,FILENAME='D:/SQL2008DATAS/TEST_DAT_SUB2.MDF'
,SIZE=2MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
)

除了第一行,剩下的都和上边同样。只说一下第一行。

    FILEGROUP是关键字,指定用户文件组,后面跟着的TEST_DAT_SUB1就是名字,DEFAULT是指定此文件组为默认文件组。默认文件组的意思就是若是建立用户数据时若是没有明确指定,都会放到这个文件组里。

    下面的语句就是为TEST_DAT_SUB1文件组分配两个文件。很少说了。我也都是COPY一下一更名就完了。

 

5

,FILEGROUP TEST_DAT_SUB2 (
NAME=TEST_DAT_SUB3
,FILENAME='D:/SQL2008DATAS/TEST_DAT_SUB3.MDF'
,SIZE=2MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=5MB
)

没有须要说明的地方,都能看懂了吧。

 

6

,FILEGROUP TEST_DAT_FILESTREAM1 CONTAINS FILESTREAM (
NAME=TEST_DAT_FILESTREAM1
,FILENAME='E:/SQL2008DATAS/TEST_DAT_FILESTREAM1.MDF'
)
,FILEGROUP TEST_DAT_FILESTREAM2 CONTAINS FILESTREAM (
NAME=TEST_DAT_FILESTREAM2
,FILENAME='E:/SQL2008DATAS/TEST_DAT_FILESTREAM2.MDF'
)

注意文件组名后的CONTAINS FILESTREAM关键字,这个是2008新加的数据流功能,这里不讨论先。反正加上这个关键字就是指定文件组在文件系统中存储 FILESTREAM 二进制大型对象 (BLOB)。这种文件组中的文件只能指定NAME和FILENAME两个属性,其中FILENAME中的最后一个文件夹不能在系统中存在,好比D:/ABC/123/XXX.MDF中,必须在D盘有一个ABC文件夹,但其中不能够有名为123的文件夹。

另一个FILESTREAM 文件组里只能有一个文件,但能够指定多个FILESTREAM 文件组。

 

7

LOG ON (
NAME=TEST_LOG1
,FILENAME='D:/SQL2008DATAS/TEST_LOG1.LDF'
,SIZE=10MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=10MB
),(
NAME=TEST_LOG2
,FILENAME='D:/SQL2008DATAS/TEST_LOG2.LDF'
,SIZE=10MB
,MAXSIZE=UNLIMITED
,FILEGROWTH=10MB
)

LOG ON就是指定数据库日志文件,用来对数据库的操做日志,但比较恶心的是MS不提供查看日志文件的工具,想经过日志文件了解历史记录要用第三方工具。若是没有指定日志文件,会默认建立一个与数据库同名的LDF文件,存放在系统数据库同一目录下。建议日志文件和数据文件分两个硬盘存放。

 

8

COLLATE CHINESE_PRC_CI_AS

指定数据库的排序规则,若是不写就按数据库默认的来。排序规则我也搞不大清楚,跟系统也有关,MS的说明太简单了。学好了之后再另写。

 

9

WITH 
DB_CHAINING OFF
,TRUSTWORTHY OFF

控制外部与数据库之间的双向访问,DB_CHAINING指定数据库可不能够为跨数据库全部权链的源或目标;TRUSTWORTHY指定模拟上下文中的数据库模块能不能访问数据库之外的资源。能够不写,会都默认为OFF,对这东西感兴趣的能够本身去翻翻资料。这个我历来没用过,等学会了之后再补充到这篇博客里。

 

附加数据库和数据库快照的语法和这个差很少,等着另开一篇写,若是写太多看完后边的就会忘了前边的了。

以上就是建库语句的所有组成,除了FILESTREAM之外都是2005和2008通用的。本文是写给对数据库不太了解的新手的,因此若是你是新手并且有解释看不懂,请给我留言。若是你发现文中有说的不对的地方也请给我留言。

相关文章
相关标签/搜索