版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、优秀精品课件文档资料优秀精品课件文档资料sql serversql server第第4 4章章 表的存储原理及完整性创建管理表的存储原理及完整性创建管理第第4章章 表的存储原理及完整性创建管理表的存储原理及完整性创建管理 4.1 表的存储原理表的存储原理 4.2 sql server表的类型表的类型 4.3 sql server数据类型数据类型 4.4 数据表的创建和管理数据表的创建和管理 4.1 表的存储原理表的存储原理4.1.1 4.1.1 内部存储概述内部存储概述 4.1.2 4.1.2 数据行(记录)结数据行(记录)结构构 4.1.1 4.1.1 内部存储概述内部存储概述 表是有关某个
2、特定实例的数据集合,在关系数据库中表是有关某个特定实例的数据集合,在关系数据库中处于核心地位。处于核心地位。创建一个表,就会有一行或多行插入到用来管理这个创建一个表,就会有一行或多行插入到用来管理这个表的多个系统表里。例如要写信息到表的多个系统表里。例如要写信息到 sysobjectssysobjects、sysindexessysindexes和和syscolumnssyscolumns等系统表里。等系统表里。通过查询通过查询sys.tablessys.tables、sys.objectssys.objects、sys.indexessys.indexes、和和sys.columnssys.
3、columns等系统视图可以查看相关信息。等系统视图可以查看相关信息。 sysobjectssysobjects主要记录新对象的基本信息,如对象名、对主要记录新对象的基本信息,如对象名、对象象idid等等。等等。syscolumnssyscolumns主要记录新表列的信息,如列名、类型和长主要记录新表列的信息,如列名、类型和长度等。度等。 sysindexessysindexes系统表记录索引等相关信息。系统表记录索引等相关信息。注意:注意:当一个新表刚创建时,在插入第一行数据之前系统不当一个新表刚创建时,在插入第一行数据之前系统不会立即为其分配存储空间,因此会立即为其分配存储空间,因此sys
4、indexessysindexes表中指示表中指示页地址和预留存储空间的列将都是页地址和预留存储空间的列将都是0 0值。值。如果在该表上定义了如果在该表上定义了primary keyprimary key或或uniqueunique约束,而约束,而primary keyprimary key或或uniqueunique约束的背后是由簇集索引支持约束的背后是由簇集索引支持的,则该表在的,则该表在sysindexessysindexes中对应行的中对应行的index_idindex_id值为值为1 1。任何有非簇集索引支持的其他约束在任何有非簇集索引支持的其他约束在sysindexessysind
5、exes表中表中都有一行,而且该行的都有一行,而且该行的index_idindex_id值在值在2 2到到250250之间。之间。 4.1.2 4.1.2 数据行(记录)结构数据行(记录)结构 在在 sql server sql server 中,数据存储的基本单位是中,数据存储的基本单位是页页。紧跟着紧跟着页头页头的就是存储表的真正数据行区域。单个数的就是存储表的真正数据行区域。单个数据行的最大长度是据行的最大长度是80608060字节。字节。数据行不能跨页存储(文本和图像例外)。页内数据数据行不能跨页存储(文本和图像例外)。页内数据行的多少依赖于表的结构和要存储的数据。行的多少依赖于表的结
6、构和要存储的数据。如果一个表的所有列都是如果一个表的所有列都是定长定长,那么该表在每一页上,那么该表在每一页上存储相同数目的行。存储相同数目的行。如果一个表里有如果一个表里有变长列变长列,那么该表总是在每一页上存,那么该表总是在每一页上存储尽可能多的行。储尽可能多的行。4.1.2 4.1.2 数据行(记录)结构数据行(记录)结构1 1、定长记录、定长记录在定长记录里,每个字段都有固定的长度,而且字段数也是在定长记录里,每个字段都有固定的长度,而且字段数也是固定的。这种记录的字段能够连续存储,因此在给定记录地固定的。这种记录的字段能够连续存储,因此在给定记录地址的情况下,借助系统目录里有关字段的
7、长度信息就能计算址的情况下,借助系统目录里有关字段的长度信息就能计算出某个特殊字段的地址。出某个特殊字段的地址。2 2、变长记录、变长记录对于变长记录来说,一种可能的记录组织方式就是像定长记对于变长记录来说,一种可能的记录组织方式就是像定长记录一样连续地存放字段,字段之间通过分割符隔开。这种组录一样连续地存放字段,字段之间通过分割符隔开。这种组织方式需要扫描记录才能定位需要访问的字段。织方式需要扫描记录才能定位需要访问的字段。另一种方法是在记录开始处预留一些空间作为存放一个整数另一种方法是在记录开始处预留一些空间作为存放一个整数偏移量数组的空间,数组中的第偏移量数组的空间,数组中的第i i个整
8、数表示记录的第个整数表示记录的第i i个字个字段的其始地址,当然这个地址是相对于记录的起始地址的。段的其始地址,当然这个地址是相对于记录的起始地址的。另外在数组中也存储记录尾部的偏移量,这个偏移量用来识另外在数组中也存储记录尾部的偏移量,这个偏移量用来识别最后一个字段的结束位置。别最后一个字段的结束位置。 1 1、 sql serversql server定长记录的存储定长记录的存储首先来看最简单的情况,记录中所有字段都是定长的。首先来看最简单的情况,记录中所有字段都是定长的。create table fixedcreate table fixed( (col1 int not null,co
9、l1 int not null,col2 char(5) not null,col2 char(5) not null,col3 char(3) null,col3 char(3) null,col4 float not nullcol4 float not null) )当 这 个 表 被 创 建 以 后 , 就 有 一 个 记 录 被 插 入 到当 这 个 表 被 创 建 以 后 , 就 有 一 个 记 录 被 插 入 到systablessystables系统表中系统表中; ;而其各个字段则会被插入到而其各个字段则会被插入到syscolumnssyscolumns系统表中。系统表中。第一
10、个字节第一个字节是状态位是状态位a a,它的值是,它的值是0 x100 x10,表示只有位,表示只有位4 4是是1 1,其他位都,其他位都是是0 0,因此该记录没有变长字段(如果位,因此该记录没有变长字段(如果位5 5为为1 1说明存在变长字段)。说明存在变长字段)。 最后一个字节最后一个字节是是nullnull位图,其值位图,其值4 4意味只有第三位是意味只有第三位是1 1,表示第三个,表示第三个字段是字段是nullnull。1 1、 sql serversql server定长记录的存储定长记录的存储2 2、 sql serversql server变长记录的存储变长记录的存储 creat
11、e table variablecreate table variable( (col1 char(3) not null,col1 char(3) not null,col2 varchar(15) not null,col2 varchar(15) not null,col3 varchar(5) null,col3 varchar(5) null,col4 varchar(10) not null,col4 varchar(10) not null,col5 smallint not nullcol5 smallint not null) )当 这 个 表 被 创 建 以 后 , 就 有
12、 一 个 记 录 被 插 入 到当 这 个 表 被 创 建 以 后 , 就 有 一 个 记 录 被 插 入 到systablessystables系统表中系统表中; ;而其各个字段则会被插入到而其各个字段则会被插入到syscolumnssyscolumns系统表中。系统表中。2 2、 sql serversql server变长记录的存储变长记录的存储往往variablevariable表中插入一个记录数据时,例如:表中插入一个记录数据时,例如:insert into variable insert into variable values( values(xyzxyz, ,abcdeabcd
13、e,null, ,null, 123123,999),999)为了找到变长字段,首先要确定记录中列偏移数组的位置。在表示总字段数的为了找到变长字段,首先要确定记录中列偏移数组的位置。在表示总字段数的2 2个个字节(其值是字节(其值是05000500)和表示位图的)和表示位图的1 1字节(其值为字节(其值为0404)之后就是变长字段数的两个)之后就是变长字段数的两个字节,在本例中其值是字节,在本例中其值是03000300,换算成十进制是,换算成十进制是3 3,说明该记录有,说明该记录有3 3个变长字段存在。个变长字段存在。紧跟其后的字节就是变长字段偏移数组。该例变长字段偏移数组用三个紧跟其后的字
14、节就是变长字段偏移数组。该例变长字段偏移数组用三个2 2字节来表字节来表示示3 3个变长字段在记录中的结束位置。个变长字段在记录中的结束位置。19001900经过字节交换是经过字节交换是0 x00190 x0019,所以第一个变,所以第一个变长字段结束于长字段结束于2525字节处。接下来也是字节处。接下来也是0 x00190 x0019,所以第二个变长字段实际长度为,所以第二个变长字段实际长度为0 0,表明没有任何东西存储在变长数据区域。表明没有任何东西存储在变长数据区域。1c001c00经过字节交换是经过字节交换是0 x001c0 x001c,所以第三,所以第三个变长字段结束于个变长字段结束
15、于2828字节处,而且整个记录也结束于字节处,而且整个记录也结束于2828字节处,换句话说,目前字节处,换句话说,目前整个记录的实际长度是整个记录的实际长度是2828个字节长。个字节长。 4.2 sql server4.2 sql server表的类型表的类型 4.2.1 sql server4.2.1 sql server的临时表的临时表 4.2.2 sql server4.2.2 sql server的系统表的系统表 4.2 sql server4.2 sql server表的类型表的类型sql serversql server中的数据表分为:中的数据表分为:永久表永久表:创建后一直存储在
16、数据库文件中,直到用:创建后一直存储在数据库文件中,直到用户删除为止。户删除为止。临时表临时表:本地临时表和全局临时表:本地临时表和全局临时表系统根据表名前系统根据表名前有无有无# #符号符号确定创建的是临时表还是确定创建的是临时表还是永久表。永久表。4.2.1 sql server4.2.1 sql server的临时表的临时表临时表分两种:临时表分两种:本地临时表本地临时表:表名用:表名用# #开头。只能由创建它的用户使用,开头。只能由创建它的用户使用,在该用户连接断开时,它被自动删除。在该用户连接断开时,它被自动删除。全局临时表全局临时表:表名用:表名用#开头。当前所有连接用户都可以开头
17、。当前所有连接用户都可以使用,它在最后一个会话结束时被自动删除。使用,它在最后一个会话结束时被自动删除。4.2.2 sql server4.2.2 sql server的系统表的系统表 系统表中的数据组成了系统表中的数据组成了sql serversql server系统利用的数据字典,系统利用的数据字典,系统表记录所有服务器活动的信息,是维护所有存储在系统表记录所有服务器活动的信息,是维护所有存储在其中的所有对象、数据类型、约束、配置选项等可利用其中的所有对象、数据类型、约束、配置选项等可利用资源的相关信息。资源的相关信息。一些系统表只存在于一些系统表只存在于mastermaster数据库,它
18、们包含系统级信数据库,它们包含系统级信息。息。而一些系统表则存在于每一个数据库(包括而一些系统表则存在于每一个数据库(包括mastermaster数据数据库),它们包含属于这个特定数据库的对象和资源的相库),它们包含属于这个特定数据库的对象和资源的相关信息。关信息。注意:注意:不允许使用不允许使用sqlsql语句直接修改系统表中的内容;语句直接修改系统表中的内容;如果需要系统表信息,可以通过系统的存储过程和系统如果需要系统表信息,可以通过系统的存储过程和系统提供的函数进行。提供的函数进行。 4.3 sql server4.3 sql server数据类型数据类型 4.3.1 4.3.1 数值型
19、数据数值型数据 4.3.2 4.3.2 货币型数据货币型数据 4.3.3 4.3.3 字符型数据字符型数据 4.3.4 4.3.4 日期日期/ /时间数据类型时间数据类型 4.3.5 4.3.5 二进制数据类型二进制数据类型 4.3.5 4.3.5 双字节数据类型双字节数据类型 4.3.1 4.3.1 数值型数据数值型数据bigintbigint。可以存放从。可以存放从-2-26363到到2 26363-1-1范围内的整型数据。以范围内的整型数据。以bigintbigint数据类型数据类型存储的每个值占用存储的每个值占用8 8个字节个字节,共,共6464位,其中位,其中6363位用于存储数字,
20、位用于存储数字,1 1位用于表位用于表示正负。示正负。intint。也可以写作。也可以写作integerinteger,可以存储从,可以存储从-2-23131到到2 23131-1-1范围内的全部整数。范围内的全部整数。以以intint数据类型存储的每个值占用数据类型存储的每个值占用4 4个字节个字节,共,共3232位,其中位,其中3131位用于存储数位用于存储数字,字,1 1位用于表示正负的区别。位用于表示正负的区别。smallintsmallint。可以存储从。可以存储从-2-21515到到2 21515- 1- 1范围内的所有整数。以范围内的所有整数。以smallintsmallint数
21、数据类型存储的每个值占用据类型存储的每个值占用2 2个字节个字节,共,共1616位,其中位,其中1515位用于存储数字,位用于存储数字,1 1位位用于表示正负的区别。用于表示正负的区别。tinyinttinyint。可以存储。可以存储0 0到到255255范围内的所有整数。以范围内的所有整数。以tinyinttinyint数据类型存储数据类型存储的每个值占用的每个值占用1 1个字节个字节。decimaldecimal和和numericnumeric。在。在sql serversql server中,中,decimaldecimal和和numericnumeric型数据的最高型数据的最高精度的可
22、以达到精度的可以达到3838位,也就是说必须在位,也就是说必须在-10-103838-1-1到到10103838-1-1之间。格式为:之间。格式为:decimaldecimal(n,dn,d)或)或numericnumeric(n,dn,d),),其中其中n n为总的位数,为总的位数,d d为小数位数。为小数位数。floatfloat和和realreal。floatfloat型数据范围从型数据范围从-1.79e+38-1.79e+38到到1.79e+381.79e+38,realreal型数据型数据范围从范围从-3.40e+38-3.40e+38到到3.40e+383.40e+38。其中。其中
23、floatfloat可采用科学记数法表示,格式可采用科学记数法表示,格式为为 :floatfloat(n n),),n n必须在必须在153153之间。之间。 4.3.2 4.3.2 货币型数据货币型数据 moneymoney。它存储的货币值由。它存储的货币值由2 2个个4 4字节整数构成。前面的一个字节整数构成。前面的一个4 4字节表示货币值的整数部分,后面的一个字节表示货币值的整数部分,后面的一个4 4字节表示货币值字节表示货币值的小数部分。以的小数部分。以moneymoney存储的货币值的范围从存储的货币值的范围从-2-26363到到2 26363-1-1,可,可以精确到万分之一货币单位
24、。以精确到万分之一货币单位。smallmoneysmallmoney。它存储的货币值由。它存储的货币值由2 2个个2 2字节整数构成。前面字节整数构成。前面的一个的一个2 2字节表示货币值的整数部分,后面的一个字节表示货币值的整数部分,后面的一个2 2字节表示字节表示货币值的小数部分。以货币值的小数部分。以smallmoneysmallmoney存储的货币值的范围从存储的货币值的范围从- -214,748.3648214,748.3648到到+214,748.3647+214,748.3647,也可以精确到万分之一货币,也可以精确到万分之一货币单位。单位。 4.3.3 4.3.3 字符型数据字
25、符型数据 charchar。利用。利用charchar数据类型存储数据时,每个字符占用数据类型存储数据时,每个字符占用一个字节一个字节的存储空间。的存储空间。charchar数据类型使用数据类型使用固定长度固定长度来存储字符,最长可以来存储字符,最长可以容纳容纳80008000个字符。利用个字符。利用charchar数据类型来定义表列或者定义变量时,数据类型来定义表列或者定义变量时,应该给定数据的最大长度。如果实际数据的字符长度短于给定的应该给定数据的最大长度。如果实际数据的字符长度短于给定的最大长度,则多余的字节会用空格填充。如果实际数据的字符长最大长度,则多余的字节会用空格填充。如果实际数
26、据的字符长度超过了给定的最大长度,则超过的字符将会被截断。在使用字度超过了给定的最大长度,则超过的字符将会被截断。在使用字符型常量为字符数据类型赋值时,必须使用符型常量为字符数据类型赋值时,必须使用单引号单引号()将字)将字符型常量括起来。符型常量括起来。varcharvarchar。varcharvarchar数据类型的使用方式与数据类型的使用方式与charchar数据类型类似。数据类型类似。sql server sql server 利用利用varcharvarchar数据类型来存储最长可以达到数据类型来存储最长可以达到80008000字符字符的变长字符。与的变长字符。与char char
27、 数据类型不同,数据类型不同,varcharvarchar数据类型的存储空数据类型的存储空间随存储在表列中的每一个数据的字符数的不同而间随存储在表列中的每一个数据的字符数的不同而变化变化。texttext。当要存储的字符型数据非常庞大以至于。当要存储的字符型数据非常庞大以至于80008000字节完全不字节完全不够用时,够用时,charchar和和varcharvarchar数据类型都失去了作用。这时应该选择数据类型都失去了作用。这时应该选择texttext数据类型。数据类型。 texttext数据类型专门用于存储数据类型专门用于存储数量庞大的变长字符数量庞大的变长字符数据。最大长度可以达到数据
28、。最大长度可以达到2 23131-1-1个字符,约个字符,约2gb2gb。 4.3.4 4.3.4 日期日期/ /时间数据类型时间数据类型 datetimedatetime。datetimedatetime数据类型范围从数据类型范围从17531753年年1 1月月1 1日日到到99999999年年1212月月3131日,可以精确到千分之一秒。日,可以精确到千分之一秒。datetimedatetime数据类型的数据占用数据类型的数据占用8 8个字节个字节的存储空间。的存储空间。smalldatetimesmalldatetime。smalldatetimesmalldatetime数据范围从数据
29、范围从19001900年年1 1月月1 1日到日到20792079年年6 6月月6 6日,可以精确到分。日,可以精确到分。smalldatetimesmalldatetime数据类型占数据类型占4 4个字节个字节的存储空间。的存储空间。 4.3.5 4.3.5 二进制数据类型二进制数据类型 所谓二进制数据是一些用十六进制来表示的数据。例如,所谓二进制数据是一些用十六进制来表示的数据。例如,十进制数据十进制数据245245表示成十六进制数据就应该是表示成十六进制数据就应该是f5f5。(1 1)binarybinary。具有固定的长度,最大长度可以达到。具有固定的长度,最大长度可以达到8k8k字字
30、节。节。(2 2)varbinaryvarbinary。具有不固定的长度,其最大长度也不。具有不固定的长度,其最大长度也不得超过得超过8k8k字节。字节。(3 3)imageimage。该数据类型可用于存储字节数超过。该数据类型可用于存储字节数超过8k8k字节字节的数据,比如的数据,比如microsoft wordmicrosoft word文档、文档、microsoft excelmicrosoft excel图图表以及图像数据(包括表以及图像数据(包括.gif.gif、.bmp.bmp、.jpeg.jpeg文件)等。文件)等。 4.3.5 4.3.5 双字节数据类型双字节数据类型 (1 1
31、)nchar(n)nchar(n)。nchar(n)nchar(n)是固定长度的是固定长度的双字节双字节数据类数据类型,括号里的型,括号里的n n用来定义数据的最大长度。用来定义数据的最大长度。n n的取值范的取值范围是围是1400014000。(2 2)nvarchar(n)nvarchar(n)。nvarchar(n)nvarchar(n)数据类型存储可变长数据类型存储可变长度的度的双字节双字节数据类型,括号里的数据类型,括号里的n n用来定义数据的最大用来定义数据的最大长度。长度。n n的取值为的取值为0400004000。(3 3)ntext(n)ntext(n)。ntextntext
32、数据类型存储的是可变长度的双数据类型存储的是可变长度的双字节字符,字节字符,ntextntext数据类型突破了前数据类型突破了前2 2种双字节数据类种双字节数据类型不能超过型不能超过40004000字符的规定,最多可以存储多达字符的规定,最多可以存储多达2 23030-1-1个双字节字符。个双字节字符。 4.4 4.4 数据表的创建和管理数据表的创建和管理 4.4.1 4.4.1 数据表结构的创建数据表结构的创建 4.4.2 4.4.2 数据表结构的管理数据表结构的管理 4.4.1 数据表结构的创建数据表结构的创建 在在sql server sql server 中,每个数据库中最多可以创建中
33、,每个数据库中最多可以创建 20 20 亿个表,用户创建数据库表时,最多可以定义亿个表,用户创建数据库表时,最多可以定义10241024列,也就是可以定义列,也就是可以定义10241024个字段。个字段。 sql server sql server 提供了两种方法创建数据库表:提供了两种方法创建数据库表:第一种方法第一种方法是利用是利用ssmsssms创建表;创建表;另一种方法另一种方法是利用是利用transact-sqltransact-sql语句中的语句中的createcreate命令创建表。命令创建表。1. 1. 利用利用createcreate命令创建表命令创建表其语法形式如下:其语法
34、形式如下:create table ( 列级完整性约束条件列级完整性约束条件 , 列级完整性约束条件列级完整性约束条件 ,)1. 1. 利用利用createcreate命令创建表命令创建表参数说明:参数说明:(1 1) 是所要定义的基本表的名字。一个表它可以由一个或是所要定义的基本表的名字。一个表它可以由一个或多个属性组成。多个属性组成。(2 2) 一般取有实际意义的名字。一般取有实际意义的名字。(3 3) 可以是前面介绍的数据类型。可以是前面介绍的数据类型。(4 4)在)在sql server sql server 中有下面几种中有下面几种完整性约束条件完整性约束条件: 空值约束(空值约束(
35、null or not nullnull or not null);主键约束();主键约束(primary key primary key constraintconstraint);唯一性约束();唯一性约束(unique constraintunique constraint);检查约);检查约束(束(check constraintcheck constraint);缺省约束();缺省约束(default constraintdefault constraint););外部键约束(外部键约束(foreign key constraintforeign key constraint);规则
36、();规则(rulerule);缺);缺省值(省值(defaultdefault)。)。 2 2关于创建表时运用约束的说明关于创建表时运用约束的说明 (1 1)空值约束()空值约束(null or not nullnull or not null)空值空值nullnull约束决定属性值是否允许为空值(约束决定属性值是否允许为空值(nullnull)。)。nullnull表示没有输入任何内容,它不是零和空白,不允表示没有输入任何内容,它不是零和空白,不允许为空值则用许为空值则用not nullnot null表示。表示。例如:设置属性例如:设置属性teacherteacher允许为空值。允许为空
37、值。create table t( teacher char(8) null)2 2关于创建表时运用约束的说明关于创建表时运用约束的说明(2 2)主键约束()主键约束(primary key constraintprimary key constraint) 主健约束要求主健属性取值必须惟一,一个表只能包主健约束要求主健属性取值必须惟一,一个表只能包含一个主健约束。如果没有在主健约束中指定含一个主健约束。如果没有在主健约束中指定clusteredclustered或或nonclusterednonclustered,并且没有为,并且没有为uniqueunique约束指约束指定聚集索引,则将对该
38、主健约束用定聚集索引,则将对该主健约束用clusteredclustered。 主键约束主键约束sqlsql的语法形式如下:的语法形式如下:constraint 约束名约束名 primary key clustered|nonclustered(列名(列名,n) 例如:在执行创建产品信息表的操作时,指定产品编号为主键值。例如:在执行创建产品信息表的操作时,指定产品编号为主键值。create table products(id char(10) not null,name char(20) not null,price money,quantity smallint null,constrain
39、t pk_products primary key clustered (id)此例的主健名称是此例的主健名称是pk_productspk_products,在,在productsproducts表中关于表中关于idid建立了一个索建立了一个索引排序。引排序。2 2关于创建表时运用约束的说明关于创建表时运用约束的说明(3 3)唯一性约束()唯一性约束(unique constraintunique constraint)唯一性约束用于指定一个或者多个列的组合的值具有唯一性,以防唯一性约束用于指定一个或者多个列的组合的值具有唯一性,以防止在列中输入重复的值。止在列中输入重复的值。 创建唯一性约束
40、创建唯一性约束sqlsql语句:语句:constraint constraint 约束名约束名 unique clustered|nonclustered unique clustered|nonclustered(列名(列名,n,n) 例:例:create table student1(sno char(8),sname char(16),constraint pk_student primary key(sno),constraint uniq_student unique(sname) 2 2关于创建表时运用约束的说明关于创建表时运用约束的说明(4 4)检查约束()检查约束(check
41、constraintcheck constraint)使用检查约束时,应该注意以下几点:使用检查约束时,应该注意以下几点: 一个列级检查约束只能与限制的字段有关;一个表级检查约束一个列级检查约束只能与限制的字段有关;一个表级检查约束只能与限制的表中字段有关。只能与限制的表中字段有关。 一个表中可以定义多个检查约束。一个表中可以定义多个检查约束。在多个字段上定义检查约束,则必须将检查约束定义为表级约束。在多个字段上定义检查约束,则必须将检查约束定义为表级约束。检查约束中不能包含子查询。检查约束中不能包含子查询。创建检查约束创建检查约束sqlsql语法格式为:语法格式为:constraint co
42、nstraint_namecheck (logical_expression) check (logical_expression) 例如:创建一个职工信息表,其中输入性别字段值时,只能例如:创建一个职工信息表,其中输入性别字段值时,只能接受接受“f f”或者或者“m m”,并且为,并且为phonenumphonenum字段创建检查约束,字段创建检查约束,限制只能输入类似限制只能输入类似0108079865401080798654之类的数据,而不能随意输之类的数据,而不能随意输入其他数据。入其他数据。create table employee(create table employee( id
43、 char(8), id char(8), ename char(4) ename char(4) checkcheck(ename like a-c,a-ca-(ename like a-c,a-ca-z,a-za-za-z),z,a-za-za-z), sex char(2) default (f), sex char(2) default (f), phonenum char(15), phonenum char(15), constraint chk_sex constraint chk_sex checkcheck(sex in (f,m) ,(sex in (f,m) , cons
44、traint chk_phonenum constraint chk_phonenum checkcheck(phonenum like (phonenum like (010)8,90-90-90-90-90-90-90-(010)8,90-90-90-90-90-90-90-9)9)2 2关于创建表时运用约束的说明关于创建表时运用约束的说明(5 5)外部键约束)外部键约束外部键约束用于强制参照完整性,提供单个字段或者多个字段外部键约束用于强制参照完整性,提供单个字段或者多个字段的参照完整性。当使用外部键约束时,应该考虑以下几个因的参照完整性。当使用外部键约束时,应该考虑以下几个因素:素:
45、外部键约束提供了字段参照完整性。外部键约束提供了字段参照完整性。 外部键从句中的字段数目和每个字段指定的数据类型必须和外部键从句中的字段数目和每个字段指定的数据类型必须和referencesreferences从句中的字段相匹配。从句中的字段相匹配。 外部键约束不能自动创建索引,需要用户手动创建。外部键约束不能自动创建索引,需要用户手动创建。 一个表中最多可以有一个表中最多可以有3131个外部键约束。个外部键约束。 在临时表中,不能使用外部键约束。在临时表中,不能使用外部键约束。 主键和外部键的数据类型必须严格匹配。主键和外部键的数据类型必须严格匹配。外键约束外键约束sqlsql的语法形式如下
46、:的语法形式如下:constraint constraint 约束名约束名 foreign key foreign key (外键列名)(外键列名)references references 参照表(参照列名)参照表(参照列名) 外键约束主要用来维护两个表之间的一致性关系。外键约束主要用来维护两个表之间的一致性关系。 外键的建立主要是通过将一个表的主键所在列包含在另一外键的建立主要是通过将一个表的主键所在列包含在另一个表中,这些列就是另一个表的外键。个表中,这些列就是另一个表的外键。外键的作用外键的作用不只是对输入不只是对输入自身的数据进行限制,同自身的数据进行限制,同时也限制了对主键所在表时
47、也限制了对主键所在表的数据进行修改。的数据进行修改。用户无法对主键里的数据用户无法对主键里的数据进行修改和删除,除非事进行修改和删除,除非事先删除或修改外键引用的先删除或修改外键引用的数据。数据。 例如:学生表例如:学生表s s(snosno,snamesname,)中的,)中的snosno是是s s表的主健,课程表表的主健,课程表c c(cnocno,cnamecname,)中的,)中的cnocno是是c c表的主健,而学习表表的主健,而学习表scsc(snosno,cnocno,gradegrade)中的)中的snosno、cnocno是是scsc表的主健,并且表的主健,并且snosno和
48、和cnocno又分别相对于又分别相对于s s表和表和c c表是表是scsc表的外健。则创建表的外健。则创建scsc表的表的sqlsql语句如下:语句如下:create table sc (sno char(10) not null,cno char(6) not null,grade tinyint default null,constraint pk_sc primary key ( sno,cno ),constraint fk_sc foreign key ( sno ) references student(sno),foreign key ( cno ) references cou
49、rse(cno)3 3数据表结构创建实例数据表结构创建实例 【例例4-14-1】创建数据库创建数据库“教学管理教学管理”的数据表学生基本资的数据表学生基本资料表料表studentstudent,数据表结构如表,数据表结构如表0-30-3、表的完整性约束如、表的完整性约束如表表0-80-8、表、表0-90-9所示。所示。方法一:使用方法一:使用ssmsssms创建创建第一步设置第一步设置studentstudent数据表的结构数据表的结构,步骤如下:,步骤如下: 在树形目录中找到要建表的数据库。在树形目录中找到要建表的数据库。 展开该数据库,在展开该数据库,在“表表”上单击鼠标右键,在弹出的上单
50、击鼠标右键,在弹出的快捷菜单中选择快捷菜单中选择“新建表新建表”命令,出现创建数据表结构命令,出现创建数据表结构的窗口。的窗口。 3 3数据表结构创建实例数据表结构创建实例 图 利用表设计器创建表结构 3 3数据表结构创建实例数据表结构创建实例 表设计器的上半部分有一个表格,在这个表格中输入表设计器的上半部分有一个表格,在这个表格中输入列的属性,表格的每一行对应一列。对每一列都需要进列的属性,表格的每一行对应一列。对每一列都需要进行设置,其中前三项是必须在建表时给出的。行设置,其中前三项是必须在建表时给出的。 完成后,单击工具栏上的完成后,单击工具栏上的【保存保存】按钮。在出现的选按钮。在出现
51、的选择名称对话框中输入表名:择名称对话框中输入表名:studentstudent。 单击单击【确定确定】按钮退出。按钮退出。 3 3数据表结构创建实例数据表结构创建实例第二步设置第二步设置studentstudent表完整性约束表完整性约束,步骤如下:,步骤如下: 展开展开ssmsssms的数据库的数据库“教学管理教学管理”,单击,单击“表表”节节点,选定数据表点,选定数据表studentstudent,单击右键,在快捷菜单上,单击右键,在快捷菜单上,单击单击“设计表设计表”,出现设计表结构窗口。,出现设计表结构窗口。 设置主键约束(设置主键约束(primary keyprimary key)
52、,光标移到需要设),光标移到需要设置主键的字段置主键的字段snosno,单击工具栏上的主键按钮,单击工具栏上的主键按钮,snosno列名左侧出现列名左侧出现“钥匙钥匙”图标。图标。如果要设置多属性作为主键,可以通过按住如果要设置多属性作为主键,可以通过按住键,键,用鼠标左键依次单击要选定的列,选定多列后,单用鼠标左键依次单击要选定的列,选定多列后,单击工具栏上的主键按钮。取消主键设置的方法是,击工具栏上的主键按钮。取消主键设置的方法是,选定主键字段,单击主键按钮即可。选定主键字段,单击主键按钮即可。设置主键后,系统自动建立了一个索引。设置主键后,系统自动建立了一个索引。3 3数据表结构创建实例
53、数据表结构创建实例 在表设计器上右击,出现快捷菜单,在上面单击在表设计器上右击,出现快捷菜单,在上面单击“属性属性”,出现,出现属性对话框,在属性对话框,在“表表”选项中,可以输入表的名称、所有者、表文选项中,可以输入表的名称、所有者、表文件组等信息。件组等信息。 在属性对话框中选择在属性对话框中选择“索引索引/ /键键”选项,系统设置表选项,系统设置表student.snostudent.sno属性为主键,因此自动在表中建立一个根据属性为主键,因此自动在表中建立一个根据snosno的值的大小升序排的值的大小升序排列的索引。由于主键要求属性取值惟一,所以复选框列的索引。由于主键要求属性取值惟一
54、,所以复选框“创建创建unique”unique”被选上。被选上。 设置检查约束(设置检查约束(checkcheck),),studentstudent表定义了三个表定义了三个checkcheck约束,第一约束,第一个约束是学号个约束是学号snosno,只能有,只能有7 7个字符构成,其中第一个必须是个字符构成,其中第一个必须是s s,后,后面全部是数字,逻辑表达式为面全部是数字,逻辑表达式为“(sno like sno like s0-90-90-s0-90-90-90-90-90-990-90-90-9)”。单击单击“checkcheck约束约束”选项卡,在选项卡,在“checkcheck
55、约束约束”对话框中新建约束。对话框中新建约束。 3 3数据表结构创建实例数据表结构创建实例建立建立学号的约束学号的约束:单击:单击【新建新建】,系统自动给定一个约,系统自动给定一个约束名,可在束名,可在“约束名约束名”处改名为处改名为“ck_snock_sno”,然后在,然后在约束表达式文本框中输入(约束表达式文本框中输入(sno like sno like s0-90-s0-90-90-90-90-90-990-90-90-90-9)。)。建立建立身份证约束身份证约束:单击:单击【新建新建】,系统自动给定一个约,系统自动给定一个约束名,然后在约束表达式文本框中输入(束名,然后在约束表达式文本
56、框中输入(sssn like sssn like 0-90-90-90-90-90-9 0-90-90-0-90-90-90-90-90-9 0-90-90-90-90-90-9 0-90-90-90-90-90-90-90-90-9 0-90-90-90-90-90-99),最后在),最后在“约束名约束名”处改名为处改名为“ck_sssn”ck_sssn”。 3 3数据表结构创建实例数据表结构创建实例方法二:使用方法二:使用sqlsql命令创建命令创建(1 1)创建表并包含完整性约束定义,但不带约束名。)创建表并包含完整性约束定义,但不带约束名。 创建课程表创建课程表coursecourse
57、的语句如下:的语句如下:create table course( cno char(6) not null, cname varchar(30) not null, cbname varchar(30), cedi char(8) cpup varchar(20), cisbn varchar(20), cprice momey, primary key(cno), check(cno like c0-9 0-9 0-9 0-9 0-9),) 3 3数据表结构创建实例数据表结构创建实例方法二:使用方法二:使用sqlsql命令创建命令创建(2 2)创建表并包含完整性约束定义,)创建表并包含完整性约束定义,同时定义各个约束名同时定义各个约束名。create table course( cno char(6) not null, cname varchar(30) not null, cbname varchar
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农村自建房防火施工方案
- 脚手架搭设安全管理规程
- 隧道工程防火施工方案
- 猕猴桃果酒加工项目可行性研究报告
- 烟气余热回收工程设备采购招标方案
- 砖混结构改造施工组织设计编制规范
- 土石方工程渣土运输应急处置方案
- 老旧厂区绿色低碳改造项目可行性研究报告
- 小学科学探索基地应急处置预案
- 数控加工车间管理制度
- 外研版(2024)八年级上册英语Unit 1-Unit 6全册课文+翻译
- 消防水泵使用教程课件
- 2025湖北日报传媒集团招聘45人笔试参考题库附带答案详解
- GB/T 21499-2024粮油检验稻谷和糙米潜在出米率测定方法
- 航天科工测评题库
- 出疹性疾病的护理
- TCACM 1603-2024 手法通乳中医技术操作规范
- 地方病患者个人信息表
- RB/T 114-2023能源管理体系纯碱、焦化、橡塑制品、制药等化工企业认证要求
- DZ∕T 0033-2020 固体矿产地质勘查报告编写规范(正式版)
- 思念混声合唱简谱
评论
0/150
提交评论