第3章数据库的创建和管理3.1数据库的存储结构3.2创建和删除数据库3.3修改数据库3.1数据库的存储结构数据库的存储结构分为逻辑存储结构和物理存储结构两种。数据库的逻辑存储结构指的是数据库是由哪些性质的信息所组成。实际上,SQLServer的数据库是由诸如表、视图、索引等各种不同的数据库对象所组成。数据库的物理存储结构是讨论数据库文件是如何在磁盘上存储的,数据库在磁盘上是以文件为单位存储的,由数据库文件和事务日志文件组成,一个数据库至少应该包含一个数据库文件和一个事务日志文件。3.1数据库的存储结构3.1.1数据库文件1.主数据库文件(PrimaryDatabaseFile)一个数据库可以有一个或多个数据库文件,一个数据库文件只能属于一个数据库。当有多个数据库文件时,有一个文件被定义为主数据库文件(简称为主文件),其扩展名为mdf。3.1数据库的存储结构主数据库文件用来存储数据库的启动信息以及部分或者全部数据,是所有数据库文件的起点,包含指向其它数据库文件的指针。一个数据库只能有一个主数据库文件。3.1数据库的存储结构2.辅助数据库文件(SecondaryDatabaseFile)用于存储主数据库文件中未存储的剩余数据和数据库对象,一个数据库可以没有辅助数据库文件,但也可以同时拥有多个辅助数据库文件。辅助数据库文件的扩展名为ndf(简称为辅助文件)。3.1数据库的存储结构3.事务日志文件存储数据库的更新情况等事务日志信息,当数据库损坏时,管理员使用事务日志恢复数据库。每一个数据库至少必须拥有一个事务日志文件,而且允许拥有多个日志文件。事务日志文件的扩展名为ldf,日志文件的大小至少是512KB。SQLServer事务日志采用提前写入的方式。3.1数据库的存储结构注意:SQLServer2000中的数据和事务日志文件不能存放在压缩文件系统或象共享网络目录等远程的网络驱动器上。SQLServer2000的文件拥有两个名称,即逻辑文件名和物理文件名。当使用Transact-SQL命令语句访问某一个文件时,必须使用该文件的逻辑名。物理文件名是文件实际存储在磁盘上的文件名,而且可包含完整的磁盘目录路径。3.1数据库的存储结构3.1.2数据库文件组利用文件组可以使服务器的性能得到提高。主文件组中包含了所有的系统表,当建立数据库时,主文件组包括主数据库文件和未指定组的其他文件。用户定义文件组中可以指定一个缺省文件组,那么在创建数据库对象时如果没有指定将其放在哪一个文件组中,就会将它放在缺省文件组中。如果没有指定缺省文件组,则主文件组为缺省文件组。3.1数据库的存储结构一个文件只能存在于一个文件组中,一个文件组也只能被一个数据库使用;日志文件是独立的,它不能作为任何文件组的成员。本章首页3.2创建和删除数据库3.2.1创建数据库创建数据库需要一定许可,在默认情况下,只有系统管理员和数据库拥有者可以创建数据库。数据库被创建后,创建数据库的用户自动成为该数据库的所有者。创建数据库的过程实际上就是为数据库设计名称、设计所占用的存储空间和存放文件位置的过程等。3.2创建和删除数据库1.使用向导创建数据库2.使用企业管理器创建数据库3.使用Transact-SQL语言创建数据库3.2创建和删除数据库说明:在Transact-SQL语言的命令格式中,用[]括起来的内容表示是可选的;[,…n]表示重复前面的内容;用括起来表示在实际编写语句时,用相应的内容替代;用{}括起来表示是必选的;类似A|B的格式,表示A和B只能选择一个,不能同时都选。3.2创建和删除数据库CREATEDATABASEdatabase_name[ON[PRIMARY][filespec[,…n][,filegroupspec[,…n]]][LOGON{filespec[,…n]}][FORLOAD|FORATTACH]3.2创建和删除数据库filespec::=([NAME=logical_file_name,]FILENAME=‘os_file_name’[,SIZE=size][,MAXSIZE={max_size|UNLIMITED}][,FILEGROWTH=growth_increment])[,…n]filegroupspec::=FILEGROUPfilegroup_namefilespec[,…n]3.2创建和删除数据库database_name:新数据库的名称。数据库名称在服务器中必须唯一,最长为128个字符,并且要符合标识符的命名规则。每个服务器管理的数据库最多为32767个。ON:指定存放数据库的数据文件信息。filespec列表用于定义主文件组的数据文件,filegroup列表用于定义用户文件组及其中的文件。PRIMARY:用于指定主文件组中的文件。主文件组的第一个由filespec指定的文件是主文件。如果不指定PRIMARY关键字,则在命令中列出的第一个文件将被默认为主文件。3.2创建和删除数据库LOGON:指明事务日志文件的明确定义。如果没有本选项,则系统会自动产生一个文件名前缀与数据库名相同,容量为所有数据库文件大小1/4的事务日志文件。FORLOAD:表示计划将备份直接装入新建的数据库,主要是为了和过去的SQLServer版本兼容。FORATTACH:表示在一组已经存在的操作系统文件中建立一个新的数据库。NAME:指定数据库的逻辑名称。FILENAME:指定数据库所在文件的操作系统文件名称和路径,该操作系统文件名和NAME的逻辑名称一一对应。3.2创建和删除数据库SIZE:指定数据库的初始容量大小。如果没有指定主文件的大小,则SQLServer默认其与模板数据库中的主文件大小一致,其它数据库文件和事务日志文件则默认为1MB。指定大小的数字size可以使用KB、MB、GB和TB后缀,默认的后缀为MB。Size中不能使用小数,其最小值为512KB,默认值为1MB。主文件的size不能小于模板数据库中的主文件。MAXSIZE:指定操作系统文件可以增长到的最大尺寸。如果没有指定,则文件可以不断增长直到充满磁盘。3.2创建和删除数据库FILEGROWTH:指定文件每次增加容量的大小,当指定数据为0时,表示文件不增长。增加量可以确定为以KB、MB作后缀的字节数或以%作后缀的被增加容量文件的百分比来表示。默认后缀为MB。如果没有指定FILEGROWTH,则默认值为10%,每次扩容的最小值为64KB。3.2创建和删除数据库例3-2-1:使用CREATEDATABASE创建一个student数据库,所有参数均取默认值。例3-2-2:创建一个Student1数据库,该数据库的主文件逻辑名称为Student1_data,物理文件名为Student1.mdf,初始大小为10MB,最大尺寸为无限大,增长速度为10%;数据库的日志文件逻辑名称为Student1_log,物理文件名为Student1.ldf,初始大小为1MB,最大尺寸为5MB,增长速度为1MB。3.2创建和删除数据库例3-2-3:创建一个指定多个数据文件和日志文件的数据库。该数据库名称为students,有1个10MB和1个20MB的数据文件和2个10MB的事务日志文件。数据文件逻辑名称为student1和student2,物理文件名为student1.mdf和student2.mdf。主文件是student1,由primary指定,两个数据文件的最大尺寸分别为无限大和100MB,增长速度分别为10%和1MB。事务日志文件的逻辑名为studentlog1和studentlog2,物理文件名为studentlog1.ldf和studentlog2.ldf,最大尺寸均为50MB,文件增长速度为1MB。3.2创建和删除数据库3.2.2删除数据库1.利用企业管理器删除数据库2.利用Drop语句删除数据库Dropdatabasedatabase_name[,…n]说明:只有处于正常状态下的数据库,才能使用DROP语句删除。当数据库处于以下状态时不能被删除:数据库正在使用;数据库正在恢复;数据库包含用于复制的已经出版的对象。本章首页3.3修改数据库3.3.1数据库更名在重命名数据库之前,应该确保没有用户使用该数据库,而且数据库应该设置为“单用户”模式。系统存储过程sp_renamedb语法如下:sp_renamedb[@dbname=]'old_name',[@newname=]'new_name'3.3修改数据库3.3.2利用企业管理器修改数据库属性限制访问包含两个选项:“db_owner,dbcreator或sysadmin的成员”选项表示只有数据库的所有者、数据库创建者和系统管理员才有权使用数据库;“单用户”选项表示数据库在同一时间只能供一个用户使用。ANSINULL默认设置:允许在数据库表的列中输入空(NULL)值。递归触发器:指定是否允许触发器递归调用。自动更新统计信息:允许使用SELECTINTO或BCP、WRITETEXT、UPDATETEXT命令向表中大量插入数据。在开发数据库时常常将此选项设置为真。3.3修改数据库残缺页检测:允许自动检测有损坏的页。页是数据库内容的基本存储单位,每个页的大小为8KB。由于SQLServer对页的读写单位是大小为512字节的扇区,当每个页的第一个扇区被成功写入后,SQLServer就认为此页已经被成功写入。因此,如果写完第一个扇区后发生突发事件,导致写入中断,就会产生有损坏的页,需要通知备份来恢复数据库。自动关闭:当数据库中无用户时,自动关闭该数据库,并将所占用的资源交还给操作系统。对那些不间断使用的数据库不要使用此选项。3.3修改数据库自动收缩:允许定期对数据库进行检查,当数据库文件或日志文件中未用空间超过其大小的25%时,系统将会自动缩减文件,使其未用空间等于25%。当文件大小没有超过其建立时的初始大小时,不会缩减文件。缩减后的文件也必须大于或等于其初始大小。自动创建统计信息:在优化查询时,根据需要自动创建统计信息。使用被引用的标识符:标识符必须用双引号括起来,且可以不遵循Transact-SQL命名标准。3.3修改数据库3.3.3使用Transact-SQL语言修改数据库只有数据库管理员或具有CREATEDATABASE权限的数据库所有者才有权执行该语句。ALTERDATABASE语句的语法格式如下:3.3修改数据库Alterdatabasedatabasename{addfilefilespec[,…n][tofilegroupfilegroupname]|addlogfilefilespec[,…n]|removefilelogical_file_name|removefilegroupfilegroup_name|modifyfilefilespec|modifyname=new_databasename|addfilegroupfilegroup_name|modifyfilegroupfilegroup_name{filegroup_property|name=new_filegroup_name}}3.3修改数据库addfilefilespec[,…n][tofilegroupfilegroupname]:表示向指定的文件组中添加新的数据文件。addlogfilefilespec[,…n]:增加新的日志文件。removefilelogical_file_name:删除指定的操作系统文件。removefilegroupfilegroup_name:删除指定的文件组。modifyfilefilespec:修改某个操作系统文件。3.3修改数据库modifyname=new_databasename:重命名数据库。addfilegroupfilegroup_name:增加一个文件组。modifyfilegroupfilegroup_name:修改某个指定文件组的