1. 数据库的文件组成:
a. 数据库包含两种文件:
数据文件:用于存放数据库中的数据;
日志文件:记录对数据库进行过的操作(一个数据库可以包含多个日志文件);
b. 数据文件:
i. 一个数据库可以有多个数据文件;
ii. 和C程序只能包含一个含有main函数的程序一样,数据文件中也只能包含一个主数据文件,其余都是次数据文件;
iii. 主数据文件是整个数据库的核心,包含数据库的启动信息,并里面含有指向其它各次数据文件的指针,一般不用来存放用户数据;
iv. 次数据文件可以有多个,专门用来存放用户的数据信息;
2. 创建数据库:
a. 一般规则:使用CREATE关键字,CREATE DATABASE XXX即创建了一个名为XXX的数据库;
b. 直接创建(裸奔式):CREATE DATABASE XXX 该种方式虽然创建了数据库但是没有指定数据库在文件系统(即操作系统)中的存放路径以及增长方式、大小等信息;
c. 指定一个主文件:
CREATE DATABASE XXX
ON
PRIMARY (
NAME = 文件的逻辑名称(即在数据库系统层面上可见的名称),
FILENAME = '主文件所在的路径(必须是绝对路径)\主文件名.mdf',
SIZE = XX,
MAXSIZE = XX,
FILEGROWTH = XX
)
这里建立一个名叫XXX的数据库;
ON表示该数据库建立在某文件之上,而文件将在ON后面进行描述;
PRIMARY表示主文件,由于一个数据库可以建立在多个文件之上,而主文件只能有一个,因此PRIMARY关键字也只能使用一次,加了PRIMARY关键字的才是主文件,否则都是次文件;
括号表示一个文件定义的定义体;
数据库管理系统中的文件具有两种不同的观察角度,一种是站在数据库管理系统的层面上看,就是逻辑名(不带后缀),类似程序中的变量名,另一种是站在文件系统(即操作系统)的层面上看,就是所谓的逻辑名(是带后缀的);
mdf是main data file的缩写,即主数据文件的意思;
SIZE指文件的初始大小,这就说明文件时可增长的,而MAXSIZE显然是指文件的最大容量,单位都是MB,可以省略单位MB而直接写数字;
FILEGROWTH是指文件的单位增长量,当对数据库中的数据进行扩增时,如果超过了当前的SIZE就需要文件扩增,它指定了每次进行扩增的单位大小,可以使用两种方式表示:一种是按大小增长(直接填写数字),另一种是按百分比增长(填写XX%,表示按照当前大小的百分之几进行增长);
例子:
CREATE DATABASE Student_Course
ON
PRIMARY (
NAME = SC_MDATA,
FILENAME = 'm:\Database\sc_mdata.mdf',
SIZE = 4,
MAXSIZE = 10,
FILEGROWTH = 1 //也可以为10%
)
注:文件体中每条属性定义之间用逗号隔开,最后一条定义之后不用加逗号,加了逗号就认为后面还有定义没写!!
d. 文件组:
i. 一个数据库可以包含多个文件组;
ii. 文件组相当于文件系统中的文件夹,可以对各种数据文件(.ndf、.mdf)进行组织和管理;
iii. 文件组只能存放数据文件,日志文件没有文件组的概念;
iv. 每个文件组只能有一个主文件组,其名字默认为PRIMARY,即组名为PRIMARY,不能改变,是系统决定的;
v. 主文件组中必须包含主文件(即.mdf);
e. 创建文件组:
CREATE DATABASE XXX
ON
PRIMARY ( //定义了一个主文件
...............
), //各文件体之间要用逗号隔开
( //定义了一个次文件,其中FILENAME以.ndf为后缀,即nth data file的缩写
..............
), //各个文件组之间也要用逗号隔开
//以上文件都是定义在主文件组PRIMARY中的
FILEGROUP XXX //定义了一个新的文件组
//在新的文件组中可以定义多个文件
(
..............
),
(
..............
)
f. 创建日志文件:
LOG
ON
(
...........
),
(
.........
)
日志文件可以创建多个;
ON之前没有任何东西就表示创建的数据文件,如果前面有LOG表示创建的是日志文件;
日志文件的FILENAME的后缀为.ldf,即log data file的缩写;
一般日志文件的定义写在最后,在第一个日志文件之前定义的一个文件体后不要加逗号,否则会报错!!!
g. 向某个数据库添加文件:
ALTER DATABASE XXX //表示对XXX数据库进行修改,因为后面的语句都是在数据库层面上的修改
ADD FILE //可以添加多个文件,这里添加的是数据文件,添加日志文件使用ADD LOG FILE
(
.........
),
(
...........
)
TO FILEGROUP GGG //将文件添加到名为GGG的文件组中,如果不写这句话就表示将上述文件添加到PRIMARY文建组中;
数据库层面上的修改是指对数据库的存储形式进行修改,特别指对数据库文件进行修改,这类修改必须使用ALTER DATABASE语句;
对象层面上的修改是指对某个数据库中的对象修改(比如删除某个数据库中的表,或者对表中的某个属性进行修改等),这类修改不是数据库层面上的(修改数据库文件),此类修改必须使用USE语句,接下来再使用ALTER TABLE等语句;
3. 数据库的删除:
i. 规则为:DROP DATABASE XXX 将XXX数据库删除;
ii. 执行该删除语句时不会有提示,因此一定要谨慎操作,数据无价!!!
4. 删除数据库中的文件:
规则为:ALTER DATABASE XXX
REMOVE FILE XXX, XXX, XXX