数据库管理系统---SQL Server系别计算机与通信工程学院专业名称计算机科学与技术班级学号学生姓名成绩2014年 6 月18日一、内容简介1、版本SQL Server 20082、特点保护信息。
SQL Server 2008 利用全面审核功能、透明数据加密和外围应用配置器(仅启用所需服务最大限度地减少安全攻击)来提高符合性和安全性。
确保业务连续性。
SQL Server 2008 附带提供的数据库镜像可提高应用程序的可靠性,简化发生存储失败后的恢复过程。
提供可预测响应。
SQL Server 2008 提供更广泛的性能数据收集、新的中央数据存储库(存储性能数据),以及改进的数据压缩(使您可以更有效地存储数据)。
最大限度地减少管理监视。
Declarative Management Framework (DMF) 是SQL Server 2008 中一个基于策略的新型管理框架,它通过为大多数数据库操作定义一组通用策略来简化日常维护操作,降低总拥有成本。
集成任何数据。
SQL Server 2008 提供改进的查询性能和高效且具成本效益的数据存储,允许您管理和扩展数量庞大的用户和数据。
提供相关信息。
SQL Server 2008 使用户可以在Microsoft Office Word 和Microsoft Office Excel 中创建复杂报表,并在内部和外部分享那些报表。
即时访问相关信息使员工可以做出更好、更快和更多相关决策。
二、结构组成1、系统架构架构可以对数据库对象进行分组。
分组的目的可能是为了易于管理,这样可对架构中的所有对象应用安全策略。
使用架构组织对象的另一个原因是使用者可以很容易地发现所需的对象。
例如,可创建一个名为HumanResource的架构,并将雇员表和存储过程放入该架构。
然后可对该架构应用安全策略,允许对其中包含的对象作适当的访问。
在引用对象时,应使用两部分名称。
dbo架构是数据库的默认架构。
dbo架构中的Employee 表称为dbo.Employee。
表名必须是架构中唯一的。
也可在HumanResources架构中创建另一个名为Employee的表。
它被称为HumanResources.Employee。
该表实际位于SQL Server 2008的AdventureWorks2008示例数据库中(所有的SQL Server 2008示例必须单独下载和安装)。
例如,使用两部分名称的示例查询如下所示。
SELECT BusinessEntityID, JobTitleFROM HumanResources.Employee在SQL 2005之前,两部分名称的第一部分是对象所有者的用户名。
实施问题与维护有关。
如果拥有对象的用户要离开公司,就不能从SQL Server中删除该用户登录,除非确保已将该用户拥有的所有对象改为另一个所有者所有。
引用该对象的所有代码必须改为引用这个新所有者。
通过将所有关系与架构名分离,SQL 2005和2008消除了这一维护问题。
2、数据类型在创建表时,必须为表中的每列指派一种数据类型。
即使创建自定义数据类型,它也必须基于一种标准的SQL Server数据类型。
例如,可以使用如下语法创建一种自定义数据类型(Address),但要注意,它基于SQL Server标准的varchar数据类型。
CREATE TYPE AddressFROM varchar(35) NOT NULL如果在SQL Server Management Studio的表设计界面中更改一个大型表中某列的数据类型,那么该操作可能需要很长时间。
可以通过在Management Studio界面中脚本化这种改变来观察其原因。
Management Studio再创建一个临时表,采用像tmpTableName这样的名称,然后将数据复制到该表中。
最后,界面删除旧表并用新的数据类型重命名新表。
当然,此过程中还涉及其他一些用于处理表中索引和其他任何关系的步骤。
如果有一个包含数百万条记录的大型表,则该过程可能需要花费十分钟,有时可能是数小时。
为避免这种情况,可在查询窗口中使用简单的单行T-SQL语句来更改该列的数据类型。
例如,要将Employees表中JobTitle列的数据类型改为varchar(70),可以使用如下语法。
ALTER TABLE HumanResources.Employee ALTER COLUMN JobTitle Varchar(70)说明:在转换为与当前数据不兼容的数据类型时,可能丢失重要数据。
例如,如果要将包含一些数据(如15.415)的numeric数据类型转换为integer数据类型,那么15.415这个数据将四舍五入为整数。
对SQL Server表编写一个报表,显示表中每列的数据类型。
完成这项任务的方法有很多种,但最常见的一种方法是连接sys.objects表和sys.columns表。
SELECT AS ObjectNam AS ColumnName,TYPE_NAME(er_type_id) as DataTypeFROM sys.objects o JOIN sys.columns cON o.object_id = c.object_idWHERE ='Department'and o.Schema_ID = SCHEMA_ID('HumanResources')该代码返回如下结果(注意,Name是一种用户定义的数据类型)。
ObjectName ColumnName DataType---------------------------------------------------Department DepartmentID smallintDepartment Name Name Department GroupName NameDepartment ModifiedDate datetime1. 字符数据类型字符数据类型包括varchar、char、nvarchar、nchar、text以及ntext。
这些数据类型用于存储字符数据。
varchar和char类型的主要区别是数据填充。
如果有一表列名为FirstName且数据类型为varchar(20),同时将值Brian存储到该列中,则物理上只存储5个字节。
但如果在数据类型为char(20)的列中存储相同的值,将使用全部20个字节。
SQL将插入拖尾空格来填满20个字符。
如果要节省空间,那么为什么还使用char数据类型呢?使用varchar数据类型会稍增加一些系统开销。
例如,如果要存储两字母形式的州名缩写,则最好使用char(2)列。
尽管有些DBA 认为应最大可能地节省空间,但一般来说,好的做法是在组织中找到一个合适的阈值,并指定低于该值的采用char数据类型,反之则采用varchar数据类型。
通常的原则是,任何小于或等于5个字节的列应存储为char数据类型,而不是varchar数据类型。
如果超过这个长度,使用varchar数据类型的好处将超过其额外开销。
nvarchar数据类型和nchar数据类型的工作方式与对等的varchar数据类型和char数据类型相同,但这两种数据类型可以处理国际性的Unicode字符。
它们需要一些额外开销。
以Unicode形式存储的数据为一个字符占两个字节。
如果要将值Brian存储到nvarchar列,它将使用10个字节;而如果将它存储为nchar(20),则需要使用40字节。
由于这些额外开销和增加的空间,应该避免使用Unicode列,除非确实有需要使用它们的业务或语言需求。
接下来要提的数据类型是text和ntext。
text数据类型用于在数据页内外存储大型字符数据。
应尽可能少地使用这两种数据类型,因为可能影响性能但可在单行的列中存储多达2GB的数据。
与text数据类型相比,更好的选择是使用varchar(max)类型,因为将获得更好的性能。
另外,text和ntext数据类型在SQL Server的一些未来版本中将不可用,因此现在开始还是最好使用varchar(max)和nvarchar(max)而不是text和ntext数据类型。
表1-1列出了这些类型,对其作了简单描述,并说明了要求的存储空间。
2. 精确数值数据类型数值数据类型包括bit、tinyint、smallint、int、bigint、numeric、decimal、money、float以及real。
这些数据类型都用于存储不同类型的数字值。
第一种数据类型bit只存储0或1,在大多数应用程序中被转换为true或false。
bit数据类型非常适合用于开关标记,且它只占据一个字节空间。
其他常见的数值数据类型如表1-2所示。
表1-2如decimal和numeric等数值数据类型可存储小数点右边或左边的变长位数。
Scale是小数点右边的位数。
精度(Precision)定义了总位数,包括小数点右边的位数。
例如,由于14.88531可为numeric(7,5)或decimal(7,5)。
如果将14.25插入到numeric(5,1)列中,它将被舍入为14.3。
3. 近似数值数据类型这个分类中包括数据类型float和real。
它们用于表示浮点数据。
但是,由于它们是近似的,因此不能精确地表示所有值。
float(n)中的n是用于存储该数尾数(mantissa)的位数。
SQL Server对此只使用两个值。
如果指定位于1~24之间,SQL就使用24。
如果指定25~53之间,SQL就使用53。
当指定float()时(括号中为空),默认为53。
表1-3列出了近似数值数据类型,对其进行简单描述,并说明了要求的存储空间。
注意:real的同义词为float(24)。
4. 二进制数据类型如varbinary、binary、varbinary(max)或image等二进制数据类型用于存储二进制数据,如图形文件、Word文档或MP3文件。
其值为十六进制的0x0~0xf。
image数据类型可在数据页外部存储最多2GB的文件。
image数据类型的首选替代数据类型是varbinary(max),可保存最多8KB的二进制数据,其性能通常比image数据类型好。
SQL Server 2008的新功能是可以在操作系统文件中通过FileStream存储选项存储varbinary(max)对象。
这个选项将数据存储为文件,同时不受varbinary(max)的2GB大小的限制。
表1-4列出了二进制数据类型,对其作了简单描述,并说明了要求的存储空间。
5. 日期和时间数据类型datetime和smalldatetime数据类型用于存储日期和时间数据。