第二章数据库的创建与管理2.1 SQL Server数据库2.1.1 数据库的结构2.1.2 系统数据库2..2 使用企业管理器创建数据库2.2.1企业管理器的工作界面2.2.2企业管理器创建用户数据库2.2.3向导创建用户数据库2.3使用T-SQL语句创建数据库2.3.1查询分析器2.3.2 用T-SQL语句创建数据库2.4 修改和删除数据库2.4.1 修改数据库2.4.2 删除数据库2..5 数据库迁移2.5.1分离和附加数据库2.5.2 导入和导出数据2.1 SQL Server数据库2.1.1 数据库的结构2.1数据库的存储结构数据库的存储结构分为逻辑存储结构和物理存储结构两种。
数据库的逻辑存储结构指的是,SQL Server的数据库是由诸如表、视图、索引等各种不同的数据库对象所组成。
数据库的物理存储结构是讨论数据库文件是如何在磁盘上存储的,数据库在磁盘上是以文件为单位存储的,由数据库文件和事务日志文件组成,一个数据库至少应该包含一个数据库文件和一个事务日志文件。
一、数据库文件1.主数据库文件(Primary Database File)一个数据库可以有一个或多个数据库文件,一个数据库文件只能属于一个数据库。
当有多个数据库文件时,有一个文件被定义为主数据库文件(简称为主文件),其扩展名为mdf 主数据库文件用来存储数据库的启动信息以及部分或者全部数据,是所有数据库文件的起点,包含指向其它数据库文件的指针。
一个数据库只能有一个主数据库文件。
2.次数据库文件(Secondary Database File)用于存储主数据库文件中未存储的剩余数据和数据库对象,一个数据库可以没有次数据库文件,但也可以同时拥有多个辅助数据库文件。
次数据库文件的扩展名为ndf(简称为辅助文件)。
3.事务日志文件存储数据库的更新情况等事务日志信息,当数据库损坏时,管理员使用事务日志恢复数据库。
每一个数据库至少必须拥有一个事务日志文件,而且允许拥有多个日志文件。
事务日志文件的扩展名为ldf,日志文件的大小至少是512KB。
SQL Server事务日志采用提前写入的方式SQL Server 2000的文件拥有两个名称,即逻辑文件名和物理文件名。
当使用Transact-SQL 命令语句访问某一个文件时,必须使用该文件的逻辑名。
物理文件名是文件实际存储在磁盘上的文件名,而且可包含完整的磁盘目录路径。
SQL Server 2000用文件来存放数据库,数据库文件有三类。
1.主数据库文件(Primary):(1)存储数据库的启动信息,是所有数据库文件的起点,包含指向其它数据库文件的指针(2)存放数据,每个数据库都必须有一个主数据文件。
2.次要数据文件(Secondary):存放数据,一个数据库可以没有也可以有多个Secondary文件。
3.事务日志文件(Transaction Log):存放事务日志,每个数据库至少有一个或多个日志文件。
一般情况下,一个简单的数据库可以只有一个主数据文件和一个日志文件。
如果数据库很大,则可以设置多个Secondary文件和日志文件,并将它们放在不同的磁盘上。
默认状态下,数据库文件存放在\MSSQL\data\目录下,数据文件名为“数据库名_Data.MDF”,日志文件名为“数据库名_Log.LDF”。
数据库的创建者可以在创建时指定其他的路径和文件名,也可以添加Secondary文件和更多的日志文件。
二、数据库文件组利用文件组可以使服务器的性能得到提高。
(系统提供)主文件组中包含了所有的系统表,当建立数据库时,主文件组包括主数据库文件和未指定组的其他文件。
用户定义文件组中可以指定一个缺省文件组,那么在创建数据库对象时如果没有指定将其放在哪一个文件组中,就会将它放在缺省文件组中。
如果没有指定缺省文件组,则主文件组为缺省文件组。
文件组允许多个数据库文件组成一个组,并对它们整体进行管理。
比如,可以将三个数据文件(data1.ndf、data2.ndf和data3.ndf)分别创建在三个盘上,这三个文件组成文件组fgroup1,在创建表的时候,就可以指定一个表创建在文件组fgroup1上。
这样该表的数据就可以分布在三个盘上,在对该表执行查询时,可以并行操作,大大提高了查询效率。
SQL Server的数据库文件和文件组必须遵循以下规则:(1)一个文件和文件组只能被一个数据库使用。
(2)一个文件只能属于一个文件组。
(3)数据和事务日志不能共存于同一文件或文件组上。
(4)日志文件不能属于文件组。
三.数据库对象SQL Server 2000数据库中的数据在逻辑上被组织成一系列对象,当一个用户连接到数据库后,他所看到的是这些逻辑对象,而不是物理的数据库文件。
SQL Server 2000中有以下数据库对象:表(Table)、视图(View)、存储过程(Stored procedures)、触发器(Triggers)、用户自定义数据类型(User-defined data types)、用户自定义函数(User-defined functions)、索引(Indexes)、规则(Constraints)、默认值(Defaults)等。
2.1.2系统数据库在创建任何数据库之前,打开企业管理器的“服务器/数据库”目录,可以看到系统中已经有了6个数据库。
如图2-1所示。
图2-1 SQL Server 2000中的系统数据库和示例数据库其中,有4个是SQL Server 2000的系统数据库,它们分别是:master数据库、tempdb 数据库、model数据库和msdb数据库。
1.master数据库master数据库记录了SQL Server系统级的信息,包括系统中所有的登录账号、系统配置信息、所有数据库的信息、所有用户数据库的主文件地址等。
每个数据库都有属于自己的一组系统表,记录了每个数据库各自的系统信息,这些表在创建数据库时自动产生。
为了与用户创建的表相区别,这些表被称为系统表,表名都以“sys”开头。
master数据库中还有很多系统存储过程和扩展存储过程。
系统存储过程是预先编译好的程序,所有的系统存储过程的名字都以sp_开头。
2.tempdb数据库tempdb 数据库用于存放所有连接到系统的用户临时表和临时存储过程以及SQL Server 产生的其他临时性的对象。
tempdb是SQL Server中负担最重的数据库,因为几乎所有的查询都可能需要使用它。
在SQL Server 关闭时,tempdb数据库中的所有对象都被删除,每次启动SQL Server 时,tempdb数据库里面总是空的。
3.model数据库model数据库是系统所有数据库的模板,这个数据库相当于一个模子,所有在系统中创建的新数据库的内容,在刚创建时都和model数据库完全一样。
如果SQL Server专门用作一类应用,而这类应用都需要某个表,甚至在这个表中都要包括同样的数据,那么就可以在model数据库中创建这样的表,并向表中添加那些公共的数据,以后每一个新创建的数据库中都会自动包含这个表和这些数据。
当然,也可以向model 数据库中增加其他数据库对象,这些对象都能被以后创建的数据库所继承。
4.msdb数据库msdb 数据库被SQL Server代理(SQL Server Agent)来安排报警、作业,并记录操作员。
SQL Server在安装时自动创建了另外两个数据库:pubs和northwind,它们是SQL Server的示例数据库,示例数据库是让读者作为学习工具使用的。
2..2 创建数据库1.使用企业管理器创建数据库在企业管理器中创建数据库可以按以下步骤操作:(1)选中将要使用的Server,用鼠标右键单击数据库,在弹出的快捷菜单中选择“新建数据库”,如图2-2所示。
(2)打开新建数据库对话框的“常规”选项卡,在名称栏中输入数据库的名称,如图5-3所示。
(3)在图2-3的对话框中选择“数据文件”选项卡,如图2-4所示。
在这个对话框中可以增减数据文件,对每一个数据文件设置以下内容:文件名:也叫逻辑文件名,以后就以这个名字来代表这个数据文件。
文件存放的路径:也叫物理文件名。
文件初始大小。
文件大小是否有限制,最大是多少。
文件增长方式是以兆字节增长还是以百分比增长,每次增长的幅度。
图2-2 创建新数据库图2-3 输入数据库名“TEACHDB”图2-4 设置数据库文件、文件大小和增长方式(4)选择“事务日志”选项卡,指定存放日志文件的位置、初始大小、增长方式。
对每一个日志文件,做和数据文件一样的设置。
如图5-5所示。
(5)设置完成之后,单击“确定”按钮。
以上创建了一个名为TEACHDB的数据库,并为它创建了一个主数据库文件和一个日志文件。
存放在C盘的\MSSQL\data目录下,初始大小是1M,扩展文件时按10%的幅度增长,没有限制大小。
图2-5 设置日志文件、文件大小和增长方式2.使用T-SQL语句创建数据库CREATE DA TABASE database_name &&定义数据库名必须唯一[ON [PRIMARY] &&声名以下为定义数据文件| 指定为主文数据文件([NAME=logical_file_name,] &&逻辑文件名由用户定义FILENAME=‘os_file_name’&&物理文件名:包括文件路径和文件名[,SIZE=size] &&文件初始大小[,MAXSIZE={max_size|UNLIMITED}] &&文件可以增长的最大值[,FILEGROWTH=growth_increment] &&文件的增量[FILEGROUP filegroup_name] &&文件组的定义([NAME=logical_file_name,] &&次要数据文件FILENAME=‘os_file_name’[,SIZE=size][,MAXSIZE={max_size|UNLIMITED}][,FILEGROWTH=growth_increment] )[LOG ON &&声名以下定义为日志文件([NAME=logical_file_name,] &&逻辑文件名由用户定义FILENAME=‘os_file_name’&&物理文件名:包括文件路径和文件名[,SIZE=size][,MAXSIZE={max_size|UNLIMITED}][,FILEGROWTH=growth_increment]说明:在Transact-SQL语言的命令格式中,用[ ]括起来的内容表示是可选的;类似A|B 的格式,表示A和B只能选择一个,不能同时都选。