第3章 数据表和索引_第1页
第3章 数据表和索引_第2页
第3章 数据表和索引_第3页
第3章 数据表和索引_第4页
第3章 数据表和索引_第5页
已阅读5页,还剩150页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第3 3章章 数据表和索引数据表和索引 本章主要内容:本章主要内容: SQL Server SQL Server数据表数据表 1 1创建数据表创建数据表 2 2对数据表的操作对数据表的操作 3 3索引索引 4 4创建和管理索引创建和管理索引 5 53.1 SQL Server 3.1 SQL Server 数据表数据表3.1.1 3.1.1 数据表数据表表的特点:表的特点:表是一个存储数据的实体,具有唯一的名称。表是一个存储数据的实体,具有唯一的名称。表由行和列组成。表由行和列组成。行和列的顺序是任意的。行和列的顺序是任意的。列名在表中的唯一性由列名在表中的唯一性由SQL ServerSQL

2、 Server强制实现,行在表中的强制实现,行在表中的唯一性通过增加列的关键字来实现,在一个表中,没有相唯一性通过增加列的关键字来实现,在一个表中,没有相同的两行。同的两行。 在在SQL Server 2000SQL Server 2000中,一个数据库中最多可以创中,一个数据库中最多可以创建建200200万万个表,用户创建数据库表时,一个表至少有一个表,用户创建数据库表时,一个表至少有一列,最多不超过列,最多不超过10241024个列。个列。 在一个表中,列名是唯一的,但一个数据库中的不在一个表中,列名是唯一的,但一个数据库中的不同表可以有相同名称的列。同表可以有相同名称的列。 在一个数据库

3、中,可能有由不同用户创建的表,由在一个数据库中,可能有由不同用户创建的表,由不同用户创建的表可以具有相同的名称。不同用户创建的表可以具有相同的名称。 在同一个数据库的不同表中,可以有相同的字段,在同一个数据库的不同表中,可以有相同的字段,但在同一个表中不允许有相同的字段,而且每个字段但在同一个表中不允许有相同的字段,而且每个字段都要求数据类型相同。都要求数据类型相同。 表的列名在同一个表中具有唯一性,同一列的数据表的列名在同一个表中具有唯一性,同一列的数据都属于同一种数据类型。除了用列名和数据类型来指都属于同一种数据类型。除了用列名和数据类型来指定列的属性外,还可以定义其他属性:定列的属性外,

4、还可以定义其他属性:NULLNULL、NOT NULLNOT NULL和和IDENTITYIDENTITY属性。属性。SQL Server 2000SQL Server 2000表的类型表的类型 l系统表系统表 同数据库一样,同数据库一样,SQL Server2000SQL Server2000中的表也分为中的表也分为系统表系统表和用户表和用户表。系统表存储有关系统表存储有关SQL ServerSQL Server系统行为信息的数据,无系统行为信息的数据,无论是系统数据库还是用户数据库,都包含系统表。论是系统数据库还是用户数据库,都包含系统表。用户数据库里的系统表是在创建数据库时从用户数据库里

5、的系统表是在创建数据库时从ModelModel系统系统数据库中复制而来的。数据库中复制而来的。系统表的表名都以系统表的表名都以“sys”sys”作前缀,且在企业管理器中作前缀,且在企业管理器中显示时类型都标有显示时类型都标有“系统系统”二字。二字。 l用户表用户表 用户表是数据库中真正存放用户数据的用户表是数据库中真正存放用户数据的“容器容器”,是数,是数据库设计的关键。据库设计的关键。 SQL ServerSQL Server中的资料表分为中的资料表分为永久表和临时表永久表和临时表两种。两种。 永久表在创建后一直存储在数据库文件中,直至用永久表在创建后一直存储在数据库文件中,直至用户删除为止

6、。户删除为止。 而临时表则在用户退出或系统修复时被自动删除。而临时表则在用户退出或系统修复时被自动删除。 临时表又分为临时表又分为局部临时表和全局临时表局部临时表和全局临时表两种;两种;l 局部临时表只能由创建它的用户使用,在该用户局部临时表只能由创建它的用户使用,在该用户连接断开时,它被自动删除。连接断开时,它被自动删除。l 全局临时表对系统当前的所有连接用户来说都是全局临时表对系统当前的所有连接用户来说都是可用的,在使用它的最后一个会话结束时它被自动删可用的,在使用它的最后一个会话结束时它被自动删除。除。l 在创建表时,系统根据当前表名来确定是创建临在创建表时,系统根据当前表名来确定是创建

7、临时表还是永久表,临时表的表名以时表还是永久表,临时表的表名以# #开头,除此之外开头,除此之外为永久表。为永久表。局部临时表表名开头包含一个局部临时表表名开头包含一个# #号,而全号,而全局临时表的表名开头包含两个局临时表的表名开头包含两个# #号。号。3.1.2 3.1.2 表的设计表的设计设计数据库时,应先确定需要什么样的数据表、各数据设计数据库时,应先确定需要什么样的数据表、各数据表中都有哪些数据、各个表之间的关系以及用户对各个表数表中都有哪些数据、各个表之间的关系以及用户对各个表数据的存取权限等。据的存取权限等。在创建和操作数据表的过程中,将对数据表进行更为细在创建和操作数据表的过程

8、中,将对数据表进行更为细致的设计。致的设计。 设计时应注意以下内容设计时应注意以下内容: : 表所包含的数据类型。表所包含的数据类型。 表的各列及每一列的数据类型。表的各列及每一列的数据类型。哪一列或哪几列的组合为主键。哪一列或哪几列的组合为主键。 哪些列允许空值。哪些列允许空值。 是否要使用约束、默认设置等来限制列。是否要使用约束、默认设置等来限制列。 是否要设置外键约束表与表之间的联系。是否要设置外键约束表与表之间的联系。 哪里需要索引,所需索引的类型。哪里需要索引,所需索引的类型。 3.1.3 3.1.3 数据类型数据类型SQL Server 2000 SQL Server 2000 的

9、数据类型分为基本数据类型和用户定的数据类型分为基本数据类型和用户定义数据类型二种。义数据类型二种。系统数据类型是系统数据类型是SQL ServerSQL Server系统固有的,可直接使用的数系统固有的,可直接使用的数据类型据类型; ;用户定义数据类型是基于系统数据类型和有关参数修改整用户定义数据类型是基于系统数据类型和有关参数修改整合而来,用于增强基本数据类型的功能,或方便用户在多合而来,用于增强基本数据类型的功能,或方便用户在多个列中设置的数据类型和参数保持一致。个列中设置的数据类型和参数保持一致。1.1.常用系统数据类型常用系统数据类型 (1 1)数字类型)数字类型 数字类型数据只包含数

10、字类型数据只包含数字和正负号数字和正负号(对非整型还有小(对非整型还有小数点),可进行算术运算或直接放入表达式中。数点),可进行算术运算或直接放入表达式中。数字类型数据包括数字类型数据包括整型数据、小数数据和浮点数据整型数据、小数数据和浮点数据三种。三种。l整型数据整型数据 整型数据由负整数或正整数组成,如整型数据由负整数或正整数组成,如 -15 -15、0 0、5 5 和和 2509 2509。在在SQL Server 2000 SQL Server 2000 中,整型数据使用中,整型数据使用 bigintbigint、intint、smallintsmallint、tinyinttinyi

11、nt 和和bitbit数据类型存储。数据类型存储。存储数据大小依次为:存储数据大小依次为:bigintbigint数据类型数据类型 intint数据类型数据类型 smallintsmallint数据类型数据类型 tinyinttinyint数据类型数据类型bit bit 数据类型只能包括数据类型只能包括 0 0 或或 1 1。可以用。可以用 bit bit 数据类数据类型表示型表示TRUETRUE或或FALSEFALSE、YESYES或或NONO这样的逻辑数据。这样的逻辑数据。l小数数据小数数据 在在 SQL ServerSQL Server中,带小数的数据使用中,带小数的数据使用 decim

12、al decimal 或或 numericnumeric 数据类型存储。数据类型存储。这种数字类型的描述,一般要用圆括号内的数字指出这种数字类型的描述,一般要用圆括号内的数字指出精度和小数位数。如需要一个精度为精度和小数位数。如需要一个精度为7 7,小数位数为,小数位数为3 3的带小数类型,可描述为的带小数类型,可描述为 dicimal(7,3) dicimal(7,3) 或或 numeric(7,3) numeric(7,3) 。在在 SQL ServerSQL Server中,中,numericnumeric 数据类数据类型等价于型等价于 decimal decimal 数据类型。数据类型

13、。l浮点数据浮点数据 浮点数据包括按二进制计数系统所能提供的最大精度浮点数据包括按二进制计数系统所能提供的最大精度保留的数据。保留的数据。在在 SQL Server SQL Server 中,浮点数据以中,浮点数据以 floatfloat(双精度)和双精度)和realreal(单精度)数据类型存储。单精度)数据类型存储。由于在实际使用中,对大多数使用浮点数据类型的应由于在实际使用中,对大多数使用浮点数据类型的应用程序,指定的精确值与近似值之间的差异并不明显,用程序,指定的精确值与近似值之间的差异并不明显,且浮点类型的字段不适宜进行大小比较,所以应尽可且浮点类型的字段不适宜进行大小比较,所以应尽

14、可能使用能使用decimaldecimal或或numericnumeric类型而避免用浮点数据类型类型而避免用浮点数据类型。(2 2)货币类型)货币类型 在在SQL Server 2000 SQL Server 2000 中使用中使用 money money 和和 smallmoneysmallmoney 数数据类型存储货币数据。据类型存储货币数据。货币数据存储的精确度为四位小数。货币数据存储的精确度为四位小数。如果数值超过了上述范围(或需超过如果数值超过了上述范围(或需超过4 4位小数的精度),位小数的精度),则可使用则可使用 decimal decimal 数据类型代替。数据类型代替。(3

15、 3)字符类型)字符类型 字符类型数据由字符类型数据由字母、数字和符号字母、数字和符号组成。组成。例如,例如,“928”“928”、“张三张三”、“(0“(0* *&(%&(%B99nhB99nh jkJjkJ”等。等。在在SQL Server 2000 SQL Server 2000 中,字符数据类型分为中,字符数据类型分为单字符串单字符串数据类型和双字符串数据类型数据类型和双字符串数据类型。 l单字节字符串单字节字符串数据类型:一个字符一个字节数据类型:一个字符一个字节定长定长charchar:空间不足截断尾部,空间多余空格填充;:空间不足截断尾部,空间多余空格填充;变长变长varchar

16、varchar:空间不足截断尾部,多余空间不填空格;:空间不足截断尾部,多余空间不填空格;l双字节字符串双字节字符串数据类型,数据类型,unicodeunicode字符类型字符类型(N(N代表国际代表国际语言语言National Language)National Language)一个字符一个字符/ /汉字占两个字节。汉字占两个字节。定长字符串定长字符串( (ncharnchar) ):空间不足截断尾部,空间多:空间不足截断尾部,空间多余空格填充;余空格填充;变长字符串变长字符串( (nvarcharnvarchar) ):空间不足截断尾部,多余:空间不足截断尾部,多余空间不填空格;空间不填

17、空格;变长字符串变长字符串( (ntextntext) ):存储大小是所输入字符:存储大小是所输入字符/ /汉字汉字个数的两倍个数的两倍( (以字节为单位以字节为单位) )。(4 4)日期时间类型)日期时间类型默认时间是默认时间是“00:00:00.000”“00:00:00.000”,默认的日期是,默认的日期是“1899-12-“1899-12-30”30”。在在SQL Server 2000 SQL Server 2000 中,日期和时间数据使用中,日期和时间数据使用 datetimedatetime 和和 smalldatetimesmalldatetime 数据类型:数据类型: dat

18、etimedatetime 类型存储从类型存储从17531753年年1 1月月1 1日至日至99999999年年1212月月3131日日的日期(每个数值要求的日期(每个数值要求8 8个字节的存储空间)。个字节的存储空间)。 smalldatetimesmalldatetime类型存储从类型存储从19001900年年1 1月月1 1日至日至20792079年年6 6月月6 6日的日期(每个数值要求日的日期(每个数值要求4 4个字节的存储空间)。个字节的存储空间)。(5 5)二进制类型)二进制类型在在SQL Server 2000SQL Server 2000中,二进制数据使用中,二进制数据使用b

19、inarybinary、varbinaryvarbinary和和imageimage数据类型存储。数据类型存储。binarybinary数据类型的列在每行中都是固定的长度(最多数据类型的列在每行中都是固定的长度(最多为为8 8KBKB)。)。varbinaryvarbinary类型的列所包含的位数可以根据实际存储而类型的列所包含的位数可以根据实际存储而变化(最多为变化(最多为8 8KBKB)。)。ImageImage类型的数据列可以用来存储超过类型的数据列可以用来存储超过8 8KBKB的二进制数的二进制数据,如据,如Microsoft WordMicrosoft Word文档、文档、Micro

20、soft ExcelMicrosoft Excel电子表电子表格、包含位图的图像、图形交换格式格、包含位图的图像、图形交换格式( (GIF)GIF)文件和联合文件和联合图像专家组图像专家组( (JPEG)JPEG)文件等。文件等。类型类型名称名称取值范围取值范围整数整数bigintbigint、intint、smallintsmallint、tinyinttinyint( (922922亿亿亿亿) 8) 8( (2121亿亿) 4) 4( (32768) 232768) 2(0-255) 1(0-255) 1位型位型BitBit由由0 0和和1 1表示真、假。表示真、假。货币型货币型money

21、money、smallmoneysmallmoney( (922922万亿万亿) )( (2121万万) ),精确到万分之一。,精确到万分之一。十进制十进制DecimalDecimal、NumericNumeric10103838-1-1,最大位数,最大位数3838位位浮点数浮点数floatfloat、realreal( (1.79E+308) (1.79E+308) (3.40E+38)3.40E+38)类型类型名称名称取值范围取值范围日期日期时间时间DatetimeDatetime、smalldatetimesmalldatetime1753.1.11753.1.1- -9999.12.3

22、19999.12.31, ,精确精确到到3.333.33毫秒毫秒1900.1.11900.1.1- -2079.12.312079.12.31,精确,精确到分钟到分钟单字节单字节字符字符char / char / varcharvarchar / / texttext定定/ /变长单字节字符变长单字节字符, ,最长最长80008000; UnicodeUnicode字符字符ncharnchar / / nvarcharnvarchar / / ntextntext定定/ /变长双字节字符,最长变长双字节字符,最长40004000; 二进制二进制数据数据Binary / Binary / var

23、binaryvarbinary / image/ image定定/ /变长二进制数据,最长变长二进制数据,最长80008000;变长二进制数据;变长二进制数据特殊特殊类型类型timestamptimestampSQL SQL 活动的先后顺序。活动的先后顺序。uniqueidentifieruniqueidentifier全局唯一标识全局唯一标识 2.几个特殊的系统数据类型几个特殊的系统数据类型UniqueidentifierUniqueidentifier uniqueidentifieruniqueidentifier数据类型存储数据类型存储1616字节的二进制值,字节的二进制值,该值的使用

24、与全局唯一标识符该值的使用与全局唯一标识符 ( (GUID)GUID)一样。一样。GUIDGUID是一个唯一的二进制数字,世界上的任何两台是一个唯一的二进制数字,世界上的任何两台计算机都不会生成重复的计算机都不会生成重复的GUIDGUID值。值。timestamptimestamp 这种数据类型表现为自动生成的二进制数,确保这些这种数据类型表现为自动生成的二进制数,确保这些数在数据库中是唯一的。存储大小为数在数据库中是唯一的。存储大小为8 8字节。字节。每次插入或更新包含每次插入或更新包含timestamptimestamp列的行时,列的行时,timestamptimestamp列中的值均会更

25、新。这一属性使我们可以依据该列的列中的值均会更新。这一属性使我们可以依据该列的值判断原数据是否已被改动过。值判断原数据是否已被改动过。一个表只能有一个一个表只能有一个timestamptimestamp列。列。sql_variantsql_variant sql_variantsql_variant是一种可混合存储是一种可混合存储SQL ServerSQL Server支持的各种支持的各种数据类型(除数据类型(除texttext、ntextntext、imageimage、timestamptimestamp和和sql_variantsql_variant之外)数值的数据类型。之外)数值的数据

26、类型。一个数据表可以有任意多个一个数据表可以有任意多个sql_variantsql_variant列。列。sql_variantsql_variant的最大长度可达的最大长度可达80168016字节。字节。 3.用户定义数据类型用户定义数据类型 创建用户定义的数据类型时必须提供以下三个参数:创建用户定义的数据类型时必须提供以下三个参数:名称、新数据类型所依据的系统数据类型和允许为空名称、新数据类型所依据的系统数据类型和允许为空性性(数据类型是否允许空值)。(数据类型是否允许空值)。如果为空性未明确定义,系统将依据数据库默认设置如果为空性未明确定义,系统将依据数据库默认设置进行指派。进行指派。

27、用企业管理器创建用企业管理器创建-用户定义数据类型用户定义数据类型 启动企业管理器。启动企业管理器。 在树状结构窗口中选择要创建用户定义数据类型的数在树状结构窗口中选择要创建用户定义数据类型的数据库,如据库,如“teachdbteachdb”。在指定数据库上单击鼠标右键,在指定数据库上单击鼠标右键,在弹出的快捷菜单上,选择在弹出的快捷菜单上,选择“新建新建”命令中的命令中的“用户用户定义的数据类型(定义的数据类型(Y Y)”选项。选项。 3.3.2 2 创建数据表创建数据表3.2.1 3.2.1 准备工作准备工作创建用户表的过程实际上是定义创建用户表的过程实际上是定义表的结构表的结构和和表内部

28、约束表内部约束关系关系的过程。的过程。 表结构包括表结构包括表的名称表的名称,表中各字段的名称、数据类型及,表中各字段的名称、数据类型及其他其他属性属性。如该列是否允许为空(如该列是否允许为空(NULLNULL);是否有默认值;是否有默认值;是否是标识(自动编号)字段;是否是标识(自动编号)字段;是否是计算字段等;是否是计算字段等;除此之外的一个重要内容是除此之外的一个重要内容是实施数据完整性约束实施数据完整性约束(如设(如设置主键、外键、唯一性约束、检查约束等),其中主键置主键、外键、唯一性约束、检查约束等),其中主键和外键的设置也建立了表与表之间的联系。和外键的设置也建立了表与表之间的联系

29、。3.2.2 3.2.2 用企业管理器创建数据表用企业管理器创建数据表 1.1.表设计器表设计器2.2.建立数据表建立数据表见课本见课本P61P61页表页表3.1-3.1-表表3.5 3.5 ,分别为,分别为教学数据库教学数据库的的5 5个表结构。个表结构。3.3.标识字段和计算字段标识字段和计算字段 (1 1)标识字段)标识字段 每个表中可以有一个标识字段,该字段的值是在插入每个表中可以有一个标识字段,该字段的值是在插入记录时由系统自动生成的序列数字(如:记录时由系统自动生成的序列数字(如:1 1、2 2、3 3、4 4、或或100100、150150、200200、250250、),可以用

30、来标),可以用来标识表中每一行,或者说给每一行自动编号。识表中每一行,或者说给每一行自动编号。 SQL ServerSQL Server能够在标识字段自动插入唯一值的序列数能够在标识字段自动插入唯一值的序列数字。字。 将一个字段设置为标识(将一个字段设置为标识(IDENTITYIDENTITY)字段,该字段必字段,该字段必须是以下数据类型之一:须是以下数据类型之一: intint、bigintbigint、smallintsmallint、tinyinttinyint或小数位数为或小数位数为0 0的的 decimaldecimal、numericnumeric字段字段。标识字段不允许为空,且不

31、能有默认值。标识字段不允许为空,且不能有默认值。 在计算字段的公式中的表达式可以是非计算列的列名、在计算字段的公式中的表达式可以是非计算列的列名、常量、函数、变量,也可以是用一个或多个运算符连常量、函数、变量,也可以是用一个或多个运算符连接的上述元素的任意组合。接的上述元素的任意组合。图3-7 设置计算字段(2)(2)计算字段计算字段 计算字段实际上是一个虚拟的字段,它并未将计算结计算字段实际上是一个虚拟的字段,它并未将计算结果实际存储在表中,而只是在果实际存储在表中,而只是在运行运行时才立即计算出结时才立即计算出结果。在设置计算字段时,不需指定该字段的数据类型,果。在设置计算字段时,不需指定

32、该字段的数据类型,保存表结构时,保存表结构时,SQL ServerSQL Server会自动决定计算字段的数会自动决定计算字段的数据类型。据类型。 由于计算字段的特性,决定了我们不可以直接向计算由于计算字段的特性,决定了我们不可以直接向计算字段中输入数据,也不能直接修改其中的数值。字段中输入数据,也不能直接修改其中的数值。4.4.设置约束设置约束l在创建表时的一项重要工作是为字段设置在创建表时的一项重要工作是为字段设置约束条件约束条件,从而保证数据完整性。从而保证数据完整性。 l实施数据完整性的主要工具是添加各种约束,除了规实施数据完整性的主要工具是添加各种约束,除了规定表中字段定表中字段是否

33、允许为空是否允许为空(NULLNULL)和和有无默认值有无默认值外,外,还包括以下几种约束:还包括以下几种约束: 主键约束主键约束 唯一性约束唯一性约束 检查约束检查约束 外键约束外键约束 (1 1)主键约束)主键约束(2)(2)设置唯一性约束设置唯一性约束 唯一性约束可保证非主键列(或几个列的组合)的数据不唯一性约束可保证非主键列(或几个列的组合)的数据不重复。重复。 (3)(3)设置设置CHECKCHECK约束约束在数据库中设置检查约束(在数据库中设置检查约束(CHECKCHECK约束)以限制输入到列约束)以限制输入到列中的值中的值. .CHECKCHECK约束通过逻辑表达式来判断并控制列

34、中数据的有效约束通过逻辑表达式来判断并控制列中数据的有效性。性。在表设计器中,选取要建立约束的列,这里选取在表设计器中,选取要建立约束的列,这里选取“score”score”(成绩)列。成绩)列。 在在“约束表达式约束表达式”文本框中输入该列的约束条件,这是输文本框中输入该列的约束条件,这是输入入score=0 and score=0 and score= 1980-01-01 and = 1980-01-01 and 出生日期出生日期 = = getdategetdate()()绑定规则绑定规则规则绑定到用户的规则绑定到用户的自定义类型自定义类型规 则 绑 定规 则 绑 定到表的列到表的列解

35、除绑定解除绑定删除规则:删除规则:drop rule drop rule 删除规则之前,应该首先解除该规则的所用绑定关系。删除规则之前,应该首先解除该规则的所用绑定关系。注意:注意:规则只允许在当前数据库中创建。规则只允许在当前数据库中创建。规则不能绑定到系统数据类型,如规则不能绑定到系统数据类型,如charchar和和intint等。等。规则不能绑定到数据类型为规则不能绑定到数据类型为imageimage、texttext或或timestamptimestamp的列。的列。use use 学生课程数据库学生课程数据库 gogo drop rule drop rule score_rulesc

36、ore_rule 注注: : 使用规则的限制条件使用规则的限制条件l 规则只能处理常量、函数,不能用来查找表,也不能规则只能处理常量、函数,不能用来查找表,也不能用来比较表中的列。用来比较表中的列。l 表中的每列只能与一条规则绑定。如果某列已经绑定表中的每列只能与一条规则绑定。如果某列已经绑定了一条规则,而又为该列绑定了一条新规则,那么旧规则了一条规则,而又为该列绑定了一条新规则,那么旧规则将被新规则代替。将被新规则代替。l 如果规则与某列绑定,那么规则不能被直接删除,须如果规则与某列绑定,那么规则不能被直接删除,须先解除规则与所有的列和数据库类型绑定关系,然后才能先解除规则与所有的列和数据库

37、类型绑定关系,然后才能用用drop ruledrop rule命令删除。命令删除。l 向系统中大量拷贝数据时,规则不起作用。向系统中大量拷贝数据时,规则不起作用。l 在使用规则时,要确保规则中的值与其绑定列的数据在使用规则时,要确保规则中的值与其绑定列的数据类型相一致。类型相一致。默认默认是一种数据库对象,它与默认值约束的功能一样。是一种数据库对象,它与默认值约束的功能一样。和规则一样,默认在创建后和规则一样,默认在创建后, ,必须和某一列绑定才能必须和某一列绑定才能生效生效。功能功能: : 创建称为默认值的对象。创建称为默认值的对象。 默认值定义是限制列数据的首选,也是标准的方法,默认值定义

38、是限制列数据的首选,也是标准的方法,因为定义和表存储在一起,当除去表时,将自动除去因为定义和表存储在一起,当除去表时,将自动除去默认值定义。默认值定义。 常量表达式只包含常量值的表达式,不能包含任何常量表达式只包含常量值的表达式,不能包含任何或其他数据库对象的名称。或其他数据库对象的名称。 可以使用任何常量、内可以使用任何常量、内建函数或数学表达式。建函数或数学表达式。2.2.默认默认(1 1)使用企业管理器创建默认)使用企业管理器创建默认 create defaultcreate default as as 例:例: 创建默认创建默认 use use 学生信息学生信息 gogo create

39、 default create default time_defaulttime_default asas getdategetdate()()(2 2)使用)使用create defaultcreate default语句创建默认语句创建默认绑定默认绑定默认解除绑定解除绑定删除绑定:删除绑定:Drop default use use 学生学生信息信息 gogo drop default drop default 1 13.2.4 3.2.4 用用Transact-SQLTransact-SQL语句创建数据表语句创建数据表 一、创建数据表的一、创建数据表的Transact-SQLTransac

40、t-SQL语句语句: :CREATE TABLECREATE TABLE 数据库名数据库名. . 所有者所有者.| .| 所有者所有者. . 表名表名 ( ( ,. ,.n n ) ) 列名列名 列数据类型列数据类型 列宽度列宽度 DEFAULT DEFAULT 默认值默认值 , . .n n 的格式如下:的格式如下:用用CREATE TABLECREATE TABLE语句创建数据表语句创建数据表 【例【例3.3.1 1】用用CREATE TABLECREATE TABLE语句创建教师表语句创建教师表teacherteacher。USE USE teachdbteachdb / /* *打开数

41、据库打开数据库* */ /CREATE TABLE teacherCREATE TABLE teacher( t_no char (4) NOT NULL PRIMARY KEY, ( t_no char (4) NOT NULL PRIMARY KEY, / /* *用列约束将职工号定义为非空,主键用列约束将职工号定义为非空,主键* */ / t_name char (10),t_name char (10), t_sex char (2) DEFAULT t_sex char (2) DEFAULT 男男, /, /* *定义默认值定义默认值* */ / t_duty char (10)t

42、_duty char (10) )注意:在列定义时,同一列的列名、数据类型和约束之间注意:在列定义时,同一列的列名、数据类型和约束之间用空格分隔,但各列之间要用逗号用空格分隔,但各列之间要用逗号“,”分隔。分隔。 约束类型约束类型功功 能能 说说 明明primary keyprimary key保证主键的实体完整性保证主键的实体完整性主键的值不能有重复值,主键的值不能有重复值,且不为且不为nullnull。使用时,。使用时,往往在其上建立索引,往往在其上建立索引,以提高数据库的性能。以提高数据库的性能。uniqueunique保证非主键的实体完整保证非主键的实体完整性性非主键非主键( (即非主

43、关键字即非主关键字) )的值不能有重复值。的值不能有重复值。foreign keyforeign key保证参照完整性保证参照完整性一个表中的值,须参照一个表中的值,须参照另外一个表中的主键值。另外一个表中的主键值。checkcheck域完整性域完整性字段可以取值的范围。字段可以取值的范围。defaultdefault域完整性域完整性为字段赋予特定的值。为字段赋予特定的值。Not nullNot null实体完整性实体完整性非空约束。非空约束。二、二、 约束约束1 1、约束的定义、约束的定义 在在SQL ServerSQL Server系统中,约束的定义主要是通过系统中,约束的定义主要是通过c

44、reate create tabletable语句语句或或alter tablealter table语句来实现的。语句来实现的。 使用使用create tablecreate table语句,是在建立新表的同时定义了约语句,是在建立新表的同时定义了约束。束。 使用使用alter tablealter table语句,是向已经存在的表中添加约束。语句,是向已经存在的表中添加约束。 约束可以是约束可以是字段级字段级约束,也可以是约束,也可以是表级表级约束。约束。l 字段级约束是把约束放在某个字段列上的,字段级约束是把约束放在某个字段列上的,且约束仅对该字段列起作用;且约束仅对该字段列起作用;l

45、表级约束是把约束放在表中的多个字段列上。表级约束是把约束放在表中的多个字段列上。由列约束和表约束的格式来看,它们的功能是基本相同的。由列约束和表约束的格式来看,它们的功能是基本相同的。区别是区别是列约束在定义完指定列后直接定义列约束在定义完指定列后直接定义,而,而表约束是在表约束是在定义完所有列之后定义定义完所有列之后定义。使用使用create tablecreate table语句创建约束语句创建约束其语法形式为:其语法形式为:CREATE TABLE CREATE TABLE table_nametable_name( ( column_namecolumn_name data_typed

46、ata_type CONSTRAINT CONSTRAINT constraint_nameconstraint_name constraint_typeconstraint_type , ,n )n ) constraint_nameconstraint_name:要创建的约束的名字。若缺省约束名,要创建的约束的名字。若缺省约束名,则则SQL ServerSQL Server会自动为约束提供一个名字。会自动为约束提供一个名字。 constraint_typeconstraint_type:要创建的约束类型。要创建的约束类型。 使用使用alter tablealter table语句创建约束语

47、句创建约束 其语法形式为:其语法形式为:ALTER TABLE ALTER TABLE table_nametable_name WITH CHECK | WITH NOCHECK WITH CHECK | WITH NOCHECK ADD CONSTRAINT ADD CONSTRAINT constraint_nameconstraint_name constraint_typeconstraint_typeDrop constraint Drop constraint constraint_name WITH CHECK | WITH NOCHECK WITH CHECK | WITH

48、NOCHECK:新加入的约束对表中现有的:新加入的约束对表中现有的数据是否进行检查。数据是否进行检查。 CONSTRAINT CONSTRAINT constraint_nameconstraint_name:强制起索引文件名:强制起索引文件名 例例1 1:创建列级主键约束,:创建列级主键约束,。 use use 学生管理数据库学生管理数据库 gogo create table create table 学生表学生表1 1 ( ( 学号学号 varcharvarchar(9) not null (9) not null primary keyprimary key, , 姓名姓名 varcha

49、rvarchar(8),(8), 性别性别 varcharvarchar(2),(2), 年龄年龄 tinyinttinyint, , 所在院系所在院系 varcharvarchar(10),(10), 班级名班级名 varcharvarchar(10),(10), 入学年份入学年份 datetimedatetime ) )Primary keyPrimary key约束约束例例2 2:创建列级主键约束,:创建列级主键约束,。 use use 学生管理数据库学生管理数据库 gogo create table create table 学生表学生表2 2 ( (学号学号 varchar(9) v

50、archar(9) constraint constraint pk_pk_学号学号 not null primary key, not null primary key, 姓名姓名 varchar(8), varchar(8), 性别性别 varchar(2), varchar(2), 年龄年龄 tinyinttinyint, , 所在院系所在院系 varchar(10), varchar(10), 班级名班级名 varchar(10), varchar(10), 入学年份入学年份 datetimedatetime, , ) )Primary keyPrimary key约束约束例例3 3:

51、创建列级主键约束,有约束名。:创建列级主键约束,有约束名。 use use 学生管理数据库学生管理数据库 gogo create table create table 选课表选课表 ( (学号学号 varchar(9), varchar(9), 课程号课程号 varcharvarchar( (1010),), 学分学分 tinyinttinyint, ,constraint constraint pk_pk_学号学号课程号课程号 not null primary key( not null primary key(学号学号,课程号课程号) ) ) )Primary keyPrimary key

52、约束约束例例4:课程表以创建,但没有设置主键,请将:课程表以创建,但没有设置主键,请将课程号设置为主键。课程号设置为主键。ALTER TABLE ALTER TABLE 课程表课程表ADD PRIMARY KEY(ADD PRIMARY KEY(课程号课程号) )ALTER TABLE ALTER TABLE 课程表课程表ADD CONSTRANT PK_ADD CONSTRANT PK_课程号课程号 PRIMARY KEY(PRIMARY KEY(课程号课程号) )Primary keyPrimary key约束约束uniqueunique约束约束例:创建列级唯一约束,无约束名。例:创建列级

53、唯一约束,无约束名。 use use 学生管理数据库学生管理数据库gogocreate table create table 课程表课程表3 3 ( ( 课程号课程号 varchar(4) not null primary key,varchar(4) not null primary key, 课程名课程名 varchar(12) varchar(12) uniqueunique, , 选修课选修课 varchar(4) ,varchar(4) , ) )例:创建列级唯一约束,有约束名。例:创建列级唯一约束,有约束名。 use use 学生管理数据库学生管理数据库 gogo create t

54、able create table 课程表课程表3 3 ( ( 课程号课程号 varcharvarchar(4) not null primary key,(4) not null primary key, 课程名课程名 varcharvarchar(12),(12), 选修课选修课 varcharvarchar(4) ,(4) , constraint u_constraint u_课程名课程名 unique(unique(课程名课程名) ) ) )uniqueunique约束约束例:向表添加列级唯一约束,有约束名。例:向表添加列级唯一约束,有约束名。 use use 学生管理数据库学生管理

55、数据库 gogo alter alter table table 课程表课程表3 3 add constraint add constraint u_ u_课程名课程名 unique(unique(课程名课程名) )foreign key foreign key 约束约束use use 学生管理数据学生管理数据gogocreate table create table 成绩表成绩表 ( ( 学号学号 varchar(9) varchar(9)constraint constraint fk_fk_学号学号 not null foreign key references not null for

56、eign key references 学生表学生表 ( (学号学号) ), , 课程号课程号 varchar(4) varchar(4) constraint constraint fk_fk_课程号课程号 not null foreign key references not null foreign key references 课程表课程表( (课程号课程号) ), ,constraint constraint pk_pk_学号学号_ _课程号课程号 primary key( primary key(学号学号, ,课程号课程号),), 成绩成绩 tinyinttinyint ) )例:

57、向表添加列级外键约束,有约束名。例:向表添加列级外键约束,有约束名。 use use 学生管理数据库学生管理数据库 gogo alter table alter table 成绩表成绩表1 1 with checkwith check add constraint add constraint fk_fk_课程号课程号1 foreign key(1 foreign key(课程号课程号) ) references references 课程表课程表1(1(课程号课程号) )default default 约束约束 当用户没有为定义为当用户没有为定义为defaultdefault约束的字段输入数

58、据时约束的字段输入数据时, , 由由default default 约束提约束提供默认的值。供默认的值。 例:例:use use 学生数据库学生数据库gogocreate table create table 成绩表成绩表 ( (学号学号 varchar(9) varchar(9)constraint constraint fk_fk_学号学号 not null foreign key references not null foreign key references 学生表学生表( (学号学号),), 课程号课程号 varchar(4) varchar(4) constraint cons

59、traint fk_fk_课程号课程号 not null foreign key references not null foreign key references 课程表课程表( (课程号课程号),),constraint constraint pk_pk_学号学号_ _课程号课程号 primary key( primary key(学号学号, ,课程号课程号),), 成绩成绩 tinyinttinyintconstraint constraint d_d_成绩成绩 default 0 default 0 ) ) 例:创建列级核查约束,无约束名。例:创建列级核查约束,无约束名。use us

60、e 学生管理数据库学生管理数据库gogocreate table create table 成绩表成绩表1 1 ( ( 学号学号 varchar(9) varchar(9), , 课程号课程号 varchar(4), varchar(4), 成绩成绩 tinyinttinyint check(check(成绩成绩 between 0 and 100) between 0 and 100) ) ) checkcheck约束约束例:向表添加列级核查约束,有约束名。例:向表添加列级核查约束,有约束名。 use use 学生管理数据库学生管理数据库 gogo alter table alter tab

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论