工程数据库——SQLServer2008机电信息学院软件系:朱晓晶第四章管理表本章主要内容本章学习目标熟练掌握数据表的创建、修改和删除方法;熟练数据表的约束及其使用。4.1表概述数据库是保存数据的集合,其目的在于存储和返回数据。如果没有数据库的表所提供的结构,这些任务是不可能完成的。数据库中包含一个或多个表,表是数据库的基本构造块。同时,表是数据的集合,是用来存储数据和操作数据的逻辑结构。表是由行和列所构成,行被称为记录,是组织数据的单位;列被称为字段,每一列表示记录的一个属性。4.1.1什么是表在SQLServer2008中,数据表分为4种类型,即普通表、分区表、临时表和系统表。下面介绍数据表中的临时表和系统表。临时表是临时创建的不能永久保存的表。分为本地临时表和全局临时表。本地临时表的名称以单个符号#作为首字符,只对当前连接的用户可见,用户退出时被自动删除;全局临时表的名称以两个符号##作为首字符,对任何用户都是可见的,当所有引用该表的用户断开连接时被删除。系统表存储有关SQLServer2008服务器的配置、数据库设置、用户和表对象的描述等系统信息。一般只能由DBA来使用该表。4.1.2临时表和系统表4.2创建表4.2.1数据类型在数据表中的每一个数据列都会有特定的属性,而这些属性中最重要的就是数据类型(DataType),数据类型是用来定义储存在数据列中的数据,其限制了一个列中可以存储的数据的类型,在某些情况下甚至限制了该列中的可能值的取值范围。在SQLServer中,数据类型可以是系统提供的数据类型,也可以是用户自定义的数据类型。1.系统数据类型(1)整数数据类型整数数据类型是最常用的数据类型之一,可以直接进行数据运算。分为以下4种:INT(INTEGER)SMALLINTTINYINTBIGINT(2)浮点数据类型浮点数据类型用于存储十进制小数,分为以下4种类型:REALFLOATDECIMALNUMERIC(3)字符数据类型字符数据类型是使用最多的数据类型。它可以用来存储各种字母、数字符号、特殊符号。一般情况下,使用字符类型数据时须在其前后加上单引号’或双引号”。字符数据类型分为以下6种:CHARNCHARVARCHARNVARCHARTEXTNTEXT(4)日期和时间数据类型在以往的MicrosoftSQLServer中,日期和时间数据类型包括Datetime和Smalldatetime两种类型,所存储的日期范围是从1753年1月1日开始,到9999年12月31日结束(每一个值要求8个存储字节)。在原有两种数据类型的基础上又引入了4种日期和时间数据类型。介绍如下:DATETIMEDATETIME2DATETIMEOFFSET(5)二进制数据类型BINARYVARBINARYIMAGE(6)位数据类型BIT(7)货币数据类型MoneySmallmoney(8)空间数据类型geography数据类型geometry数据类型(9)其他数据类型sql_variantTimestampUniqueidentifier2.用户自定义数据类型在系统数据类型的基础上,用户可以根据需要定制数据,称之为用户自定义数据类型。当用户自定义数据类型时,需要指定该类型的名称、建立在其上的系统数据类型以及是否允许空值(NULL)等特性。利用“SQLServerManagementStudio”创建用户自定义数据类型:(1)选择“开始”→“程序”→“MicrosoftSQLServer2008”→“SQLServerManagementStudio”,打开“MicrosoftSQLServerManagementStudio”窗口,并使用Windows身份验证或者SQLServer身份验证连接到数据库实例。(2)展开需要创建用户自定义数据类型的数据库students,选择“可编程性”→“类型”,在“用户定义数据类型”节点上单击鼠标右键,然后从弹出的快捷菜单中选择“新建用户定义数据类型”命令,打开“新建用户定义数据类型”对话框(3)在“新建用户定义数据类型”对话框中,输入自定义类型的架构、名称、数据类型、精度、允许为空值等。(4)完成设置后,单击“确定”按钮使用系统存储过程sp_addtype创建用户自定义数据类型需要提供以下3个参数:名称,新数据类型所依据的系统数据类型、数据类型是否允许为空。其语法格式如下:sp_addtype{type}[,system_data_type][,'null_type']参数说明:type是用户定义的数据类型的名称,必须遵循标识符命名规则,并且在每个数据库中必须是惟一的。system_data_type是自定义数据类型所依据的系统数据类型,例如Decimal、Int、Char等等,如果参数中有空格或者标点符号则必须用引号将该参数引起来。null_type表示该数据类型是如何处理空值的,必须使用单引号引起来,取值有'NULL'、'NOTNULL'或者'NONULL'。4.2.2创建表创建数据表的一般步骤为:首先定义表结构,即给表的每一列取列名,并确定每一列的数据类型、数据长度、列数据是否可以为空等;然后,为了限制某列数据的取值范围,以保证输入数据的正确性和一致性而设置约束;当表结构和约束建立完成之后,最后就可以向表中输入数据了。创建数据表的关键是定义表的结构,通常创建表之前的重要工作是设计表结构,即确定表的名字、表中各个数据项的列名、数据类型和长度、是否为空值等。在SQLServer2008中,创建表可以使用两种方法:一种是通过图形化界面创建即使用“SQLServerManagementStudio”创建表,另一种是可以利用T-SQL语句来实现。1.利用图形化界面创建表在SQLServerManagementStudio中,提供一个前端的、填充式的表设计器以简化表的设计工作,利用图形化的方法可以非常方便地创建数据表。2.利用T-SQL语句创建数据表语法格式:CREATETABLE[database_name.[owner].|owner.]table_name({column_definition|table_constraint|column_nameAScomputed_column_expression}[,…n])[ON{filegroup|DEFAULT}][TEXTIMAGE_ON{filegroup|DEFAULT}]其中:column_definition::={column_namedata_type}[[DEFAULTconstant_expression]|[IDENTITY[(seed,increment)]]][column_constraint][,...n]4.3管理表4.3.1修改表1.利用表设计器修改数据表(1)启动SQLServerManagementStudio。(2)展开SQLServer实例,右击要修改的表,然后从弹出的快捷菜单中选择“设计”命令。(3)在“表设计器”中,可以新增列、删除列和修改列的名称、数据类型、长度、是否允许为空等属性。(4)当完成修改表的操作后,单击工具栏上的“保存”按钮。2.利用T-SQL语句修改数据表修改数据表的语法格式如下:ALTERTABLEtable_name{ALTERCOLUMNcolumn_namenewdatatype[(precision[,scale])][NULL|NOTNULL]|ADD{[column_definition][,...n]}|DROP{[CONSTRAINT]constraint_name|COLUMNcolumn_name}[,...n]}参数说明如下table_name:所要修改的表的名称。ALTERCOLUMN:修改列的定义。ADD:增加新列或约束。DROP:删除列或约束。4.3.2删除表1.利用对象资源管理器删除数据表(1)启动SQLServerManagementStudio。(2)展开SQLServer实例,右击需要删除的表,从弹出的快捷菜单中选择“删除”,打开“删除对象”对话框。(3)在“删除对象”对话框中,显示出删除对象的属性信息,单击“确定”按钮。2.利用T-SQL语句删除数据表删除数据表的语法格式如下:DROPTABLEtable_name[,...n]其中,table_name为所要删除的表的名称。删除表只能够删除用户表,不能够删除系统表。删除表一旦操作完成,表中数据也一并被删除,而且是无法恢复的。4.4完整性与约束4.4.1完整性数据完整性是数据库设计方面一个非常重要的问题,数据完整性代表数据的正确性、一致性与可靠性,实施完整性的目的在于确保数据的质量。在SQLServer中,根据数据完整性措施所作用的数据库对象和范围不同,可以将数据完整性分类为实体完整性、域完整性和参照完整性等。1.实体完整性实体完整性把数据表中的每行看作一个实体,它要求所有行都具有唯一标识。在SQLServer中,可以通过建立PRIMARYKEY约束、UNIQUE约束、唯一索引,以及列IDENTITY属性等措施来实施实体完整性。2.域完整性域完整性要求数据表中指定列的数据具有正确的数据类型、格式和有效的数据范围。域完整性通过默认值、FOREIGNKEY、CHECK等约束,以及默认、规则等数据库对象来实现。3.参照完整性参照完整性维持被参照表和参照表之间的数据一致性。在SQLServer中,参照完整性通过主键与外键或唯一键与外键之间的关系来实现,通过建立FOREIGNKEY约束来实施。在被参照表中,当其主键值被其他表所参照时,该行不能被删除,也不允许改变。在参照表中,不允许参照不存在的主键值。4.4.2约束约束是数据库中的数据完整性实现的具体方法。在SQLServer中,包括5种约束类型:PRIMARYKEY约束、FOREIGNKEY约束、UNIQUE约束、CHECK约束和DEFAULT约束。在SQLServer中,约束作为数据表定义的一部分,在CREATETABLE语句中定义声明。同时,约束独立于数据表的结构,可以在不改变数据表结构的情况下,使用ALTERTABLE语句来添加或删除。1.PRIMARYKEY约束表中经常有一列或多列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键(PrimaryKey),通过它可以强制表的实体完整性。一个表只能有一个主键,而且主键约束中的列不能为空值。如果主键约束定义在不止一列上,则一列中的值可以重复,但主键约束定义中的所有列的组合值必须唯一,因为该组合列将成为表的主键。1)使用表设计器创建PRIMARYKEY约束在表设计器中可以创建、修改和删除PRIMARYKEY约束。操作步骤如下:在表设计器中,选择需要设置主键的列(如需要设置多个列为主键,则选中所有需要设置为主键的所有列),单击鼠标右键,然后从弹出的快捷菜单中选择“设置主键”命令,完成主键设置,这时主键列的左边会显示“黄色钥匙”图标启动。2)使用T-SQL语句创建PRIMARYKEY约束创建主键约束的语法形式如下:[CONSTRAINTconstraint_name]PRIMARYKEY[CLUSTERED|NONCLUSTERED](column_name[,…n])其中,CLUSTERED|NONCLUSTERED表示所创建的UNIQUE约束是聚集索引还是非聚集索引,默认为CLUSTERED聚集索引。2.FOREIGNKEY约束外键(FOREIGNKEY)用于建立和加强两个表(主表与从表)的一列或多列数据之间的链接,当数据添加、修改或删除时,通过外键约束保证它们之间数据的一致性。定义表之间的参照完整性是先定义主表的主键,再对从表定义外键约束。FOREIGNKEY约束要求列中的每个值在所引用的表中对应的被引用列中都存在。1)使用表设计器创建FOREIGNKEY在表设计器的空白处单击鼠标右键选择“关系”,弹出“外键关系”对话框单击“添加”按钮可以添加外键,单击“表和列