SQL Server是一个数据库管理系统,须要以有效方式存储高容量数据。要更好地理解SQL Server处理数据的方式,就须要了解数据的存储结构。数据库
数据库在磁盘上是以文件为单位存储的,由数据文件和事务日志文件组成。一个数据库至少应该包含一个数据文件和一个事务日志文件。安全
主数据文件:主数据文件包含数据库的启动信息,指向数据库中的其余文件,每一个数据库都有一个主数据文件(有且只有一个),推荐文件扩展名是.mdf;服务器
次要(辅助)数据文件:除主数据文件之外的全部其余数据文件都是次要数据文件,某些数据库可能不包含任何次要数据文件,而有些数据库则包含多个次要数据文件,次要数据文件的推荐文件扩展名是.ndf;ide
事务日志文件:事务日志文件包含恢复数据库全部事务的信息,每一个数据库中至少有一个事务日志文件,固然也能够有多个。事务日志文件的推荐文件扩展名是.idf;函数
- 文件流数据文件:可使基于SQL的应用程序能在文件系统中存储非结构化的数据,如:文档、图片、音频、视频等;
从更微观的角度来看,数据文件由若干个64KB大小的区组成,每一个区由8个8KB的连续页组成,以下图所示:
SQL Server所能识别的最小存储单位被称为页。一个页的大小是8KB,它是SQL Server实际存储数据的单位。磁盘I/O操做再页级执行。一个区由8个物理上连续的页组成,用来
有效地管理页。全部的页都存储在区中。当在SQL Server中建立了表之后,对象就被分配到区中。较小的表能够和其余数据库对象在一个区中。工具
事务是一个或多个T-SQL语句的集合,至关于一个“原子”任务,要么执行成功,要不彻底不执行。每一个SQL Server数据库都具备事务日志,用来记录全部事务的SQL语句。当发生数据灾难时,经过事务日志记录的T-SQL语句能够恢复数据库。
事务日志文件的存储不是以页为单位的,而是以一条条的大小不等的日志记录为单位。优化
可使用SSMS工具来设计和创建数据库,存储企业数据,以知足企业的需求。设计
建立数据库以前,必需要先肯定数据库的名称、全部者(建立数据库的用户)、大小,以及存储该数据文件和事务日志文件的位置。因此在建立数据库以前,须要考虑以下事项:日志
建立数据库的权限默认授予sysadmin和dbcreator服务器角色成员,服务器角色用于向用户授予服务器范围内的安全特权;code
建立数据库的用户将成为该数据库的全部者;
考虑数据文件及日志文件的放置位置;
- 合理估计数据库的大小合并增加值;
当数据库中的数据文件或日志文件的空间被占满时,须要为数据文件和日志文件分配更多的空间。SQL Server能够根据在新建数据库时定义的增加参数自动扩展数据库,也能够经过在现有的数据库文件上分配更多文件空间,或者在另外一个新文件上分配空间来手动扩展数据库。
扩展数据库时,必须使数据库的容量至少增长1MB,还能够指定容许文件增加到的最大值,这样能够防止文件无限制地增大,致使用尽整个磁盘空间。根据本身的需求,应适当设置增加值,过大或太小都是不恰当的。
数据库中的每一个文件均可以经过删除未使用空间的方法来减少,SQL Server容许经过缩小数据库把不使用的空间释放出来,数据文件和日志文件均可以减少(收缩)。能够手动收缩数据库,也能够自动收缩数据库。
以下图所示,选择“任务”——>“收缩”——>“数据库”命令,打开“收缩数据库-class”窗口。“当前分配的空间”选项显示了数据库占用空间的大小,“可用空间”选项显示了数据库能够收缩的空间及百分比,而后单击“肯定”按钮,将执行收缩数据库操做
在收缩数据库时,没法将整个数据库收缩得比其初始大小更小。所以,若是数据库建立时的大小为10MB,后来增加到100MB,则该数据库最小只能收缩到10MB,即便以及删除了全部数据也是如此。可是,收缩文件时,能够将各个数据库文件收缩的比其初始大小更小。
如手动收缩数据库图一所示,选择“任务”——>“收缩”——>“文件”命令打开“收缩文件-class”窗口
在“文件类型”下拉列表中选择“数据”选项,也能够在这里选择收缩日志文件。“当前分配的空间”选项和“可用空间”选项显示了该文件的占用空间,剩余空间和可收缩的百分比。
在“收缩操做”选项 组中有三个选项,默认为“释放未使用的空间”,其做用分别以下:
- 释放未使用的空间:将释放文件中全部未使用的空间,并将文件收缩到上次分配的大小。这将减少文件的大小,但不移动任何数据;
- 在释放未使用的空间前从新组织页:将释放文件中全部未使用的空间,并尝试从新定位到未分配的空间,这里须要指定“将文件收缩到”选项的值;
- 经过将数据迁移到同一个文件组中的其余我呢见来清空文件:将指定文件中的全部数据移至同一文件组中的其余文件中,而后就能够删除空文件;
能够经过设置“数据库属性”窗口中的“选项”选择页中的“自动收缩”来实现自动收缩功能。将“自动收缩”选择设置为True后,将自动收缩有可用空间的数据库,以下图所示,该活动在后台进行,而且不影响数据内的用户活动
若是须要将数据库更改到同一计算机或不一样计算机的不一样SQL Server实例中,或要移动数据库文件存储的位置,分离和附加数据会颇有用。
①在SSMS对象资源管理器中右击“class”数据库,在弹出的快捷菜单中选择“任务”——>“分离”命令,打开“分离数据库”窗口
②检查要分离的数据库,无误后,单击“肯定”按钮,完成分离操做
- 数据库中有一个或多个活动链接时,“消息”列将显示活动链接的数量,如“一个活动链接”。必须选中“删除链接”复选框以断开全部活动链接;
- 默认状况下,分离操做将在分离数据库是保留过时的优化统计信息;若要更新现有的优化统计信息,可用选中“更新统计信息”复选框;
附加数据库时,全部数据文件(主数据文件和次要数据文件)都必须可用。若是任何数据文件的路径不一样于首次建立数据库或上次附加数据库时的路径,则必须指定文件的当前路径。
①将class数据库全部文件移动到其余位置,如D:\class_log文件夹
②在SSMS对象资源管理器中,链接到SQL Server数据库实例
③右击“数据库”,在弹出的快捷菜单中选中“附加”命令,打开“附加数据库”窗口
④单击“添加”按钮,而后在打开的“定位数据文件”对话框中选择要附加的数据库所在的磁盘驱动器,展开目录树以查找和选择class数据库的.mdf文件,而后单击“肯定”按钮
⑤若是要改变附加数据库名称,可在“附加数据库”窗口的“附加为”列中输入名称,也能够在“全部者”列中更改数据库的全部者,确认无误后,单击“肯定”按钮,完成附加操做
若是数据库的事务日志文件丢失,数据文件保存无缺,也能够附加成功。在附加的时候,数据库会自动新建事务日志文件。
当用户再也不须要本身的数据库,或者已将其移到其余数据库或服务器上时,便可删除该数据库,可是不能删除系统数据库。删除数据库以后,文件及其数据都从服务器上的磁盘中删除。一旦删除数据库,它即被永久删除。
表是包含数据库中全部数据的数据库对象。数据在表中的组织方式与在电子表格中类似,都是按行和列的格式组织的。每行表明一条惟一的记录,每行表明记录中的一个字段。以下图:
SQL Server中的表包括下列主要组件:
列:每列表明由表建模的对象的某个属性。例如,员工表有编号列,姓名列和职务列等;
- 行:每行表明由表建模的对象的一个单独的实例。例如,公司每名员工在表中均占一行;
实体完整性将行定义为特定表的惟一实体。实体完整性经过UNIQUE(惟一)索引,UNIQUE约束或PRIMARY KEY(主键)约束,强制表的标识列或主键的完整性;
域完整性指特定列的项的有效性。能够强制域完整性限制类型(经过使用数据类型)、限制格式(经过使用CHECK约束和规则)或限制可能值的范围(经过使用FOREIGN KEY约束、CHECK约束、DEFAULT定义、NOT NULL定义和规则);
输入或删除行时,引用完整性保留表之间定义的关系。强制引用完整性时,SQL Server将防止用户执行下列操做:
用户定义完整性能够定义不属于其余任何完整性类别的特定业务规则。全部完整性类别都支持用户定义完整性,这包括CREATE TABLE中全部列级约束和表级约束、存储过程及触发器;
主键惟一标识表中的行数据,一个主键值对应一行数据。主键由一个或多个字段组成,其值具备惟一性,并且不容许取空值(NULL),一个表只能有一个主键。
数据类型是数据的一种属性,用于指定对象可保存的数据的类型,如整数数据、字符数据、货币数据、日期和时间数据、字符串等。
SQL Server中的数据类型能够概括为下列类别:
若是插入行时没有为列指定值,则该列使用默认值。默认值能够是计算结果为常量的任何值,如常量、内置函数或数学表达式。
对于表中的每一个列,能够指定当用户将该列保留为空白时将在该列中输入的默认值。若是没有分配默认值,并将该列保留为空白,则:
- 若是设置了容许空白值的选项,则将向该列中插入NULL;
- 若是没有设置容许空白值的选项,则该列将保持空白,但在用户为该列提供值以前,它们将没法保持行;
对于每一个表,都可建立一个包含系统生成的序号值的标识列,该序号值以惟一方式标识表中的每行。
可使用标识列在表中建立自动递增标识号,因此标识列习惯上又叫自增列,只能为每一个表建立一个标识列。
标识列具备如下三种特色:
列的数据类型为不带小数的数值类型;
在进行插入(Insert)操做时,该列的值由系统按必定规律生成,不容许空值;
- 列值不重复,具备标识表中每行的做用,每一个表只能有一个标识列;
建立一个标识列,一般要指定如下三个内容:
类型(Type):在SQL Server 2008中,标识列类型必须时数值类型,如decimal、int、numeric、smalint、bigint、tinyint。其中要注意的是,当选择decimal和numeric时,小数位数必须为零。另外还要注意每种数据类型所表示的数值范围;
种子(Seed):指派给表中第一行的值,默认为1;
- 递增量(Increment):相邻两个标识值之间的增量,默认为1;
经过限制列可接受的值,CHECK结束能够强制域的完整性。此类约束相似于FOREIGN KEY约束,由于能够控制放入列中的值。可是,它们在肯定有效值的方式上有所不一样;FOREIGN KEY约束从其余表得到有效值列表,而CHECK约束经过不基于其余列中的数据的逻辑表达式肯定有效值。
能够经过任何基于逻辑运算符返回True或Flase的逻辑(布尔)表达式建立CHECK约束。例如,能够经过建立CHECK约束将age列中值的范围限制为0~200之间的数据,以防止输入的年龄值超出正常的年龄范围。逻辑表达式为:
age >= 0 AND age <= 200
此博客就写到这里吧,下一篇博客将写如何在视图模式管理数据库和表以及使用T-SQL建立数据库及表。
———————— 本文至此结束,感谢阅读 ————————