《chSQLServer数据表管理实用教案》由会员分享,可在线阅读,更多相关《chSQLServer数据表管理实用教案(33页珍藏版)》请在金锄头文库上搜索。
1、第4章SQLServer2005数据表管理(gunl)4.1 表的基本概念和特点4.2 数据类型4.3 创建表 4.4 表的管理和维护4.5 表中数据的添加、修改(xigi)和删除4.6 数据完整性与使用约束 第1页/共32页第一页,共33页。4.1表的基本概念和特点(tdin)表是包含SQLServer2005数据(shj)库中的所有数据(shj)的对象。每个表代表一类对其用户有意义的对象,即关系数据(shj)库的一个关系。表具有以下特征:表用来代表一个实体,有一个用来确定该实体的唯一的表名。表中行的顺序是任意的。表中列的顺序是任意的。表中的行数据(shj)是唯一的,即在表中没有完全相同的两
2、行数据(shj)。表中列名有唯一性,即表中不允许有两列的列名相同。学号姓名性别出生日期家庭住址所在班级0502410101朱富宝女1986-3-14山东聊城241010502410102蔡志赫男1986-3-19内蒙古包头241010502410103曹洋园女1986-3-28山西太原241010502410104孟健笋男1986-4-2山东济南241010502410105董保燕男1986-4-8山东济宁241010502410106安洪壮男1986-1-29江苏徐州24101第2页/共32页第二页,共33页。4.2数据类型SQLServer2005中,每个列、局部变量、表达式和参数都具有一
3、个相关的数据类型。数据类型是一种(yzhn)属性,用于指定对象可保存的数据的类型有:整数数据、字符数据、货币数据、日期和时间数据、二进制字符串等。第3页/共32页第三页,共33页。4.2数据类型标准数据类型1精确(jngqu)数值类型类类 型型范范 围围存储存储bigint-2-26363(-9,223,372,036,854,775,808)(-9,223,372,036,854,775,808)到到2 26363- -1(9,223,372,036,854,775,807)1(9,223,372,036,854,775,807)的整型数字。的整型数字。8 字节字节intint-2-2313
4、1 (-2,147,483,648) (-2,147,483,648)到到2 23131-1 (2,147,483,647)-1 (2,147,483,647)的整型数字。的整型数字。4 4 字节字节smallintsmallint-2-21515 (-32,768) (-32,768) 到到 2 21515-1 (32,767)-1 (32,767) 的整型数字。的整型数字。2 2 字节字节tinyint0 0 到到 255255的整型数字。的整型数字。1 字节字节bit0或或1的整型数字的整型数字,字符串值,字符串值 TRUE TRUE 和和 FALSE FALSE 可以转换为以下可以转换
5、为以下 bit bit 值:值:TRUE TRUE 转换为转换为 1 1,FALSE FALSE 转换为转换为 0 0。 根据需要根据需要1-2字节字节decimal从从-1038+1到到1038-1的定精度与有效位数的数字。的定精度与有效位数的数字。5-17字节字节numericdecimal的同义词。的同义词。5-17字节字节money从从-922,337,203,685,477.5808到到922,337,203,685,477.5807的货币数的货币数据,精确到万分之一。据,精确到万分之一。8字节字节smallmoney从从-214,748.3648到到214,748.3647的货币数
6、据,精确到万分之一。的货币数据,精确到万分之一。4字节字节第4页/共32页第四页,共33页。4.2数据类型标准(biozhn)数据类型2近似浮点数值数据类型数据类型范 围存 储float-1.79E + 308 至 -2.23E - 308、0 以及 2.23E - 308 至 1.79E + 308取决于 n 的值real-3.40E + 38 至 -1.18E - 38、0 以及 1.18E - 38 至 3.40E + 384字节第5页/共32页第五页,共33页。4.2数据类型标准数据类型3日期(rq)时间数据类型数据类型范 围精确度datetime1753 年 1 月 1 日到 999
7、9 年 12 月 31 日3.33 毫秒smalldatetime1900 年 1 月 1 日到 2079 年 6 月 6 日1 分钟第6页/共32页第六页,共33页。4.2数据类型标准数据类型4字符数据类型char(n):固定长度,长度为n个字节。n的取值范围为1至8,000,存储大小是n个字节。varchar(n|max):可变长度,n的取值范围为1至8,000。max指示最大存储大小是231-1个字节。存储大小是输入数据的实际长度加2个字节。所输入数据的长度可以为0个字符。text:服务器代码页中长度可变的非Unicode数据,最大长度为231-1(2,147,483,647)个字符。当
8、服务器代码页使用(shyng)双字节字符时,存储仍是2,147,483,647字节。根据字符串,存储大小可能小于2,147,483,647字节。说明:如果列数据项的大小一致,则使用char。如果列数据项的大小差异相当大,则使用varchar。如果列数据项大小相差很大,而且大小可能超过(chogu)8,000字节,则使用varchar(max)。第7页/共32页第七页,共33页。4.2数据类型标准数据(shj)类型5Unicode字符串数据(shj)类型Unicode是双字节文字编码标准,与字符串数据(shj)类型相类似,但Unicode的一个字符用2字节存储。nchar(n):n个字符的固定长
9、度的Unicode字符数据(shj)。n值必须在1到4,000之间(含)。存储大小为两倍n字节。nvarchar(n|max):可变长度Unicode字符数据(shj)。n值在1到4,000之间(含)。max指示最大存储大小为231-1字节。存储大小是所输入字符个数的两倍+2个字节。所输入数据(shj)的长度可以为0个字符。ntext:长度可变的Unicode数据(shj),最大长度为230-1(1,073,741,823)个字符。存储大小是所输入字符个数的两倍(以字节为单位)。说明:如果没有在数据定义或变量声明语句中指定n,则默认(mrn)长度为1。如果没有使用CAST函数指定n,则默认(m
10、rn)长度为30。如果列数据项的大小可能相同,则使用 nchar。如果列数据项的大小可能差异很大,则使用 nvarchar。第8页/共32页第八页,共33页。4.2数据类型标准数据类型6二进制数据类型binary(n):长度为n字节的固定长度二进制数据,其中(qzhng)n是从1到8,000的值。存储大小为n字节。varbinary(n|max):可变长度二进制数据。n可以取从1到8,000的值。max指示最大的存储大小为231-1字节。存储大小为所输入数据的实际长度+2个字节。所输入数据的长度可以是0字节。image:长度可变的二进制数据,从0到231-1(2,147,483,647)个字节
11、。说明:如果未在数据定义或变量(binling)声明语句中指定n,则默认长度为 1。如果未使用CAST 函数指定n,则默认长度为30。如果列数据项的大小一致,则使用binary。如果列数据项的大小差异相当大,则使用varbinary。当列数据条目超出 8,000字节时,请使用varbinary(max)。第9页/共32页第九页,共33页。4.2数据类型标准数据类型7.其它数据类型cursor:这是变量或存储过程OUTPUT参数(cnsh)的一种数据类型,这些参数(cnsh)包含对游标的引用。timestamp:公开数据库中自动生成的唯一二进制数字的数据类型。通常用作给表行加版本戳的机制。存储大
12、小为8个字节。sql_variant:用于存储SQLServer2005支持的各种数据类型的一种数据类型(不包括text、ntext、image、timestamp和sql_variant)的值。uniqueidentifier:可存储16字节的二进制值,通常不将uniqueidentifier定义为常量,因为很难保证创建的uniqueidentifier确实具有唯一性。table:一种特殊的数据类型,用于存储结果集以进行后续处理。table主要用于临时存储一组行,这些行是作为表值函数的结果集返回的。XML:存储XML数据的数据类型。可以在列中或者xml类型的变量中存储xml实例。说明:如果列
13、数据项的大小一致(yzh),则使用char。如果列数据项的大小差异相当大,则使用varchar。如果列数据项大小相差很大,而且大小可能超过8,000字节,则使用varchar(max)。第10页/共32页第十页,共33页。4.2数据类型用户定义的数据类型用户定义的数据类型基于在SQLServer2005中提供的数据类型。1创建用户定义的数据类型系统存储过sp_addtype可以来创建用户定义的数据类型。其语法形式如下:sp_addtypetype,system_data_type,null_type2删除用户定义的数据类型当用户定义的数据类型不需要时,可删除。系统存储过程(guchng) sp
14、_droptype 可以删除用户定义的数据类型。其语法形式如下:sp_droptypetype。其中:type是用户定义的数据类型的名称。【例4-1】创建一个用户定义(dngy)的数据类型ssn,其基于的系统数据类型是变长为11的字符,不允许空。EXEC sp_addtype ssn, varchar(11) , not null是用户定义的数据类型的名称,在同一(tngy)数据库中唯一。是系统提供的数据类型,例如:decimal、int、char 等等。表示该数据类型是如何处理空值的,必须使用单引号引起来,例如:null、not null或者no null。【例4-2】创建一个用户定义的数据
15、类型 birthday,其基于的系统数据类型是datetime,允许空。EXEC sp_addtype birthday,datetime,null【例4-3】删除用户自定义类型ssn。EXEC sp_droptype ssn第11页/共32页第十一页,共33页。4.3创建(chungjin)表在SQLServer2005系统中,一张二维表对应一张数据表,即为表文件(Table)。一个数据库中最多可以(ky)创建200万张数据表。在创建表之前,首先应该定义表的结构,即根据二维表的定义来确定表的组织形式,包括定义表的列数、列名、列类型、列宽度及列属性等。在SQLServer2005系统中,一个表
16、最多可以(ky)定义1024列。例如:学生信息表(Student)学号姓名性别出生日期家庭住址所在班级0502410101朱富宝女1986-3-14山东聊城241010502410102蔡志赫男1986-3-19内蒙古包头241010502410103曹洋园女1986-3-28山西太原241010502410104孟健笋男1986-4-2山东济南241010502410105董保燕男1986-4-8山东济宁241010502410106安洪壮男1986-1-29江苏徐州24101第12页/共32页第十二页,共33页。4.3创建(chungjin)表在SQLServer2005系统中,一张二维表
17、对应一张数据表,即为表文件(Table)。一个数据库中最多可以创建200万张数据表。在创建表之前,首先应该定义表的结构,即根据二维表的定义来确定表的组织(zzh)形式,包括定义表的列数、列名、列类型、列宽度及列属性等。在SQLServer2005系统中,一个表最多可以定义1024列。表4-5 学生(xu sheng)信息表(Student)结构定义列名列类型(长度)列属性列描述StuIDChar(13)主键学号StuNameNvarchar(8)姓名StuSexNvarchar(8)性别StuBirsmalldatetime出生日期StuAddrNvarchar(30)家庭住址ClaIDCha
18、r(10)外键所在班级第13页/共32页第十三页,共33页。4.3创建(chungjin)表4.3.1用SQLServerManagementStudio创建表在SQLServerManagementStudio中建立如表4-5所示表结构,具体步骤如下:在对象资源管理器中,展开“数据库”项,展开要建立表的数据库,例如“Stud”。在“表”项上右击鼠标,执行“新建表”命令,如图4-1所示。进入设计表窗口(chungku),根据表4-5所示的学生信息表的数据结构,依次输入各个字段,如图4-2所示。然后用鼠标单击“stuID”列,右击鼠标,执行“设置主键”命令或点击工具栏上设置主键按钮,将可stuI
19、D设置为主键,此时列前有主键标志如图4-2所示。单击工具栏保存按钮,弹出“选择名称”对话框,如图4-3所示。在输入表名文本框中键入“Student”,点击“确定”按钮。关闭窗口(chungku),这样就完成了对表结构的设计,创建了一张空表。列名:指定(zhdng)字段(属性)的名称(表中唯一)。数据类型:指定(zhdng)字段的数据类型及长度。允许空:指定(zhdng)字段是否可以设定为空值(NULL)第14页/共32页第十四页,共33页。4.3创建(chungjin)表用CREATETABLE 语句创建表Transact-SQL语言中的CREATETABLE 语句被用来建立新的数据库表。CR
20、EATETABLE 语句语法格式如下:CREATETABLEtable_name(column1_namedata_type,column1_namedata_type,)如果用户希望在建立新表时规定(gudng)列的限制条件,可以使用可选的条件选项:CREATETABLEtable_name(column1_namedata_typeconstraint,column1_namedata_typeconstraint,)新表的名称。表名称必须符合标识符规则(guz)。table_name在数据库中必须是唯一的。table_name最多可包含128个字符。data_type 指定列的数据类型。
21、数据的完整性约束(详见4.6 )表中列的名称。列名称必须符合标识符规则,表中列的名称。列名称必须符合标识符规则,并且在表中必须是唯一的。并且在表中必须是唯一的。 【例4-3】 在学生数据库Stud中创建用于学生信息管理的表Student,具体信息如表4-5所示。USE StudCREATE TABLE Student(SduID char(13) PRIMARY KEY, SduName nvarchar(8), SduBir samlldatetime, SduSex nvarchar(2), SduAddr nvarchar(30), Cla_ID char(10) )第15页/共32页第
22、十五页,共33页。4.4表的管理(gunl)和维护4.4.1查看表的定义信息当在数据库中创建了表后,有时需要查看表的有关信息。比如表的属性、定义、数据、字段属性和索引等。尤其重要的是查看表内存放的数据,另外有时需要查看表与其他数据库对象之间的依赖关系(gunx)。1用SQLServerManagementStudio查看表定义信息(1)查看表的属性(2)查看表中数据(3)查看表的依赖关系(gunx)2使用系统存储过程查看表定义信息使用系统存储过程sp_help可以方便查看表的定义信息。sp_helptable_name其中:table_name要查看的表名。表的属性(shxng)信息包括常规的
23、表的连接属性(shxng)、表的存储属性(shxng)及权限等,查看表属性(shxng)的步骤如下: 在对象资源管理器中,展开“数据库”项,展开要查看表的数据库,例如“Stud”。 选择要查看的表,如“Student”后右击选择“属性(shxng)”命令,如图4-4所示。 打开属性(shxng)窗口如图4-5所示。查看表中的数据是最经常使用的操作之一,具体步骤如下: 在对象资源管理器中,打开要查看数据库,例如“Stud”。 展开表选择要查看的表,例如选择表“Student”后右击并选择“打开表”命令。 打开表student窗口如图4-6所示。某些数据库对象依赖于其他数据库对象的存在,例如,视图
24、或存储过程依赖于基础表提供数据;或为了保证数据完整性而存在的依赖关系,例如,成绩表中学生的学号依赖学生表中的学号。在更改或删除对象前,使用对象资源管理器查看依赖关系。使用SQL Server Management Studio查看表的依赖关系步骤如下: 在对象资源管理器中,打开要查看数据库,例如“Stud”。 展开表选择要查看的表,例如选择表“Student”后右击并选择“查看依赖关系”命令,如图4-7所示。 打开属性窗口如图4-8所示,可以选择查看依赖关系和被依赖关系。【例4-3】使用sp_help查看表Student的定义信息。在查询编辑器中输入下面命令并执行,结果如图4-9所示。USE
25、StudGOsp_help Student第16页/共32页第十六页,共33页。4.4表的管理(gunl)和维护4.4.2修改表在数据表建好之后,有时需要对表结构(jigu)进行修改,包括数据类型的修改和约束的修改等。1在SQLServerManagementStudio中修改表2使用ALTERTABLE命令修改数据表【例4-2】在Student表中增加一个备注列。USEStudALTERTABLEStudentADDCMemonvarchar(40)【例4-3】将Student表列SNO类型改为CHAR型,长度为8。USEStudALTERTABLEStudentALTERCOLUMNSNO
26、char(8)【例4-4】删除表Student备注列。USEStudALTERTABLEStudentDROPCMemo在SQL Server Management Studio中修改数据库Stud表步骤如下: 在对象资源管理器中,打开数据库“Stud”展开表选择要修改的表,例如选择表“Student”后右击并选择“修改”命令,如图4-10所示。 出现表设计对话框和新建表相同(xin tn),如图4-11所示,将学生家庭地址的长度修改为50。 修改完成后单击工具栏的“保存”按钮保存即可。使用命令修改数据表的语法格式为:ALTER TABLE table_namewith no check AL
27、TER COLUMN column_name new_date_type new constraintADD column_name data_type constraint DROP COLUMN column_name其中:table_name 要修改的表名,它必需存在于数据库中。 ADD 增加新列。 ALTER 修改已存在的列。 DROP 删除已存在的列。 column_name 在操作中要增加、修改或删除的列名。new_date_type 指定与该列相兼容的新数据类型。第17页/共32页第十七页,共33页。4.4表的管理(gunl)和维护4.4.3删除表当数据库中的某些表已不必保留,或
28、某些信息已经过时或创建新表代替旧表时,就可以对表进行删除,以节约存储空间。删除表一般有在SQLServerManagementStudio中删除和命令删除两种方法。1在SQLServerManagementStudio中删除表在SQLServerManagementStudio中删除表具体步骤如下: 在 资 源 管 理 器 中 打 开 要 删 除 表 的 数 据 库 , 例 如 打 开“stud”展开表选择要删除的表,例如“Student”后右击在弹出菜单选择“删除”命令,如图4-12所示。 出现删除对象对话框如图4-13所示,在删除表之前,首先(shuxin)显示该表的依赖关系,以确定即将发
29、生删除是否影响到别的表。确认后点击“确定”按钮即可完成删除。2使用DROPTABLE命令删除数据表。删除数据表的命令格式如下:DROPTABLEtable_name其中:table_name要删除的数据表的表名。【例4-5】删除表Student。USE StudDROP TABLE Student在数据库引擎查询窗口(chungku)执行该命令后,显示“命令已成功完成”信息。说明数据表Student被成功地删除。第18页/共32页第十八页,共33页。4.5表中数据的添加、修改(xigi)和删除一个(y)表是由表结构和表中的行(数据)两部分组成的。创建表及表结构的维护是有关列的操作,向表中输入数
30、据、修改表中的数据和删除表中的数据是有关行的操作,即是对表中数据的操作。表中数据的操作包括数据插入、数据删除、数据修改和数据查询,数据查询尤为重要,在第5章详细讲解,本节讲解数据的插入、删除和修改。4.5.1向表中添加数据数据表建好后,即可向表中添加数据了,即数据输入。可以使用SQLServerManagementStudio和INSERT命令来完成。1在SQLServerManagementStudio中向表中添加数据2使用INSERT语句向表中插入数据在SQL Server Management Studio中向表中添加数据步骤(bzhu)如下: 在对象资源管理器展开数据库“Stud”展开
31、表右击表“Student”选择“打开表”命令,打开表如图4-14所示。 此时可以根据表4-1所示内容依次向表中插入记录。 关闭窗口或点击工具栏“!”按钮,输入记录被保存。使用INSERT语句向表中插入数据基本语法如下:INSERT INTO table_name (column1,column2)VALUES (value1,value2)或 INSERT INTO table_name (column1,column2)SELECT column1,column2FROM another_tablenameWHERE searchcondition 另一张表的名称,可以从another_ta
32、blename所指定的表中取出一条或多条记录插入到table_name指定的表中。(关于SELECT语句,详见第5章)。 要插入字段的名称。 插入字段的值。 指定插入数据表名称。【例4-6】将表4-1所示的姓名为“曹洋园”的所有信息插入Student表。USE StudINSERT INTO Student VALUES(0502410103, 曹洋园, 女, 1986-3-28, 山西太原, 24101)【例4-7】将表4-1所示的姓名为“孟健笋”的学号、姓名、班级号插入表Student。USE StudINSERT INTO Sdudent (stuID,stuname,CLsID)VAL
33、UES (0502410104, 孟健笋, 24101)第19页/共32页第十九页,共33页。4.5表中数据的添加、修改(xigi)和删除4.5.2修改表中的数据向表中添加了记录后,用户就可以根据需要(xyo)修改表中的数据了。依据上面添加数据的方法打开表,选中要修改的数据项,直接修改即可。下面介绍使用UPDATA语句修改数据的方法。UPDATA语句语法格式:UPDATAtable_nameSETcolumn1=new_value1,column2=new_value2,WHEREcondition【例4-8】将学号为“0502410104”的学生的班级改为“24102”。USEStudUPD
34、ATEStudentSETClaID=24102WHERESno=2000012【例4-9】每个学生的家庭住址前面加上“中国”。USEStudUPDATEStudentSETStuaddr=中国+Stuaddr 指定要更新(gngxn)数据的表名。指定要更新的列及该列改变后的值。 指定要更新的列及该列改变后的值。 第20页/共32页第二十页,共33页。4.5表中数据(shj)的添加、修改和删除4.5.3删除表中的数据表中的某些数据可能会随着时间的推移而失效;或有时因操作不当时使数据出现错误;还有时因为数据的来源不正确,造成(zochn)表中数据不正确,这些有误的数据需要从表中删除。删除表中的数
35、据,可以使用SQL ServerManagement Studio和Transact-SQL命令来完成1利用SQLServerManagementStudio删除表中的数据2使用DELETE命令删除表中的数据【例4-10】从Student表中删除姓名为空的数据。USEStudDELETEStudentWHRERStunameISNULL在查询编辑器执行完删除记录命令后,消息栏显示多少条记录已成功地被删除。 依据上面添加数据的方法打开表,将鼠标移至表的左边行首位置,点击鼠标选中要删除的行(也可以鼠标和“Shift”键配合选中连续多行,鼠标和“Ctrl”配合选中不连续的多行)。 右击鼠标,在快捷菜
36、单中选择“删除”命令,如图4-15所示。或直接按键盘(jinpn)的“delete”键。 系统出现确认对话框如图4-16所示,点击“是”按钮将永久删除所选的行。DELETE语句语法格式如下:DELETE FROM table_name WHERE condition要删除数据的表名。要删除数据的条件 第21页/共32页第二十一页,共33页。4.6数据完整性与使用(shyng)约束4.6.1数据完整性概念数据完整性是指存储在数据库中数据的一致性和准确性。数据的完整性可能由于用户进行各种数据操作而遭受破坏。例如:当用户将一个学号为空的学生记录插入学生信息表时,就破坏了学生数据表数据的完整性。为了保
37、证数据库中数据的完整性,SQLserver2005设计了四种类型数据完整性。1实体完整性2域完整性3引用完整性4用户定义完整性在SQLServer中,对于表的约束分为列约束和表约束。列约束是对某一个特定列的约束,包含在列定义中,直接跟在该列的其他定义之后,用空格分隔,不必指定列名;表约束与列定义相互独立,不包括在列定义中,通常用于对多个列一起进行约束,与列定义用,分隔,定义表约束时必须(bx)指出要约束的那些列的名称。完整性约束的基本语法格式为:CONSTRAINT实体完整性将行定义为特定表的唯一实体。也就是说,表中不允许存在完全相同的两行记录(jl)。实体完整性通过索引、UNIQUE约束、P
38、RIMARY KEY约束或IDENTITY属性来实现。 域完整性指特定列的项的有效性。例如学生的成绩应在0到100之间。强制域完整性方法有限制类型(通过使用数据类型)、限制格式(通过使用CHECK约束和规则)或限制可能值的范围(通过使用FOREIGN KEY约束、CHECK约束、DEFAULT定义、NOT NULL定义和规则)。输入或删除记录时,引用完整性用来保持表之间已定义的关系。在 SQL Server 2005中,引用完整性通过FOREIGN KEY和CHECK约束,以外键与主键之间或外键与唯一键之间的关系为基础。引用完整性确保键值在所有表中一致。这类一致性要求不引用不存在的值,如果一个
39、键值发生更改,则整个数据库中,对该键值的所有引用要进行一致的更改。例如:学生所在班级应为存在的班级。定义引用完整性后,禁止用户进行以下操作:当主表没有关联记录时,将记录添加到相关表中。更改主表中的值导致相关记录独立。从主表中删除记录,但仍存在与该记录匹配的相关记录。用户定义完整性可以定义不属于其他任何完整性类别的特定业务规则。所有完整性类别都支持用户定义完整性。这包括CREATE TABLE中所有列约束和表约束、存储过程以及触发器。 约束不指定名称时,系统会给定一个名称。在定义完整性约束时必须指定完整性约束的类型。 第22页/共32页第二十二页,共33页。4.6数据完整性与使用(shyng)约
40、束4.6.2主键(PRIMARYKEY)约束表通常具有包含唯一标识表中每一行的值的一列或一组列。这样的列或多列称为表的主键(PK),用于强制表的实体完整性,在一个表中只能定义一个主键。PRIMARYKEY约束用于定义基本表的主键,起唯一标识作用,其值不能为NULL,也不能重复,以此来保证实体的完整性。PRIMARYKEY既可用于列约束,也可用于表约束.1PRIMARYKEY用于定义列约束PRIMARYKEY用于定义列约束时,其语法(yf)格式如下:CONSTRAINTPRIMARYKEY2PRIMARYKEY用于定义表约束PRIMARYKEY用于定义表约束时,即将某些列的组合定义为主键,其语法
41、(yf)格式如下:CONSTRAINT PRIMARY KEY(,)【例4-11】建立(jinl)一个Student表,定义StuID为主键。USE StudCREATE TABLE Student(StuID char(13) CONSTRAINT S_PRIM PRIMARY KEY,Stuname varchar(8),Stusex char(2)【例4-12】建立一个Result表,定义StuID+CouID为SC的主键。USE StudCREATE TABLE Result(StuID char(13) NOT NULL,CouID char(5) NOT NULL,Result n
42、umeric(3),CONSTRAINT SC_PRIM PRIMARY KEY(StuID, CouID)第23页/共32页第二十三页,共33页。4.6数据完整性与使用(shyng)约束4.6.3唯一性(UNIQUE)约束UNIQUE约束用于指明基本表在某一列(yli)或多个列的组合上的取值必须唯一。定义了UNIQUE约束的那些列称为唯一键,系统自动为唯一键建立唯一索引(关于索引,详见第6章),从而保证了唯一键的唯一性。唯一键允许为空,但系统为保证其唯一性,最多只可以出现一个NULL值。UNIQUE既可用于列约束,也可用于表约束。1UNIQUE用于定义列约束UNIQUE用于定义列约束时,其语
43、法格式如下:CONSTRAINTUNIQUE2UNIQUE用于定义表约束UNIQUE用于定义表约束时,其语法格式如下:CONSTRAINTUNIQUE(,)PRIMARYKEY与UNIQUE约束类似,通过建立唯一索引来保证基本表在主键列取值的唯一性,但它们之间存在着很大的区别:在一个基本表中只能定义一个PRIMARYKEY约束,但可定义多个UNIQUE约束。对于指定为PRIMARYKEY的一个列或多个列的组合,其中任何一个列都不能出现空值,而对于UNIQUE所约束的唯一键,则允许为空。【例4-13】建立一个Student1表,定义Stuname为唯一键。USE StudCREATE TABLE
44、 Student1(StuID char(13),Stuname varcahr(8) CONSTRAINT SN_UNIQ UNIQUE,Stusex char(2)其中:SN_UNIQ为指定的约束名称,约束名称可以省略(shngl),如下例:USE StudCREATE TABLE Student2(StuID char(13),Stuname varchar(8) UNIQUE,Stusex char(2)【例4-14】建立一个Student3表,定义Stuname+Stusex为唯一键。USE StudCREATE TABLE Student3(StuID char(13),Stuna
45、me varchar(8),Stusex char(2),CONSTRAINT S_UNIQ UNIQUE(Stuname, Stusex)系统为Stuname+Stusex建立唯一索引,确保同一性别的学生没有重名 第24页/共32页第二十四页,共33页。4.6数据完整性与使用(shyng)约束4.6.4检查(CHECK)约束(yush)CHECK约束(yush)可以强制域的完整性。CHECK约束(yush)用来检查字段值所允许的范围,如一个字段只能输入整数,而且限定在0-100的整数,以此来保证域的完整性。CHECK既可用于列约束(yush),也可用于表约束(yush)。其语法格式为:CON
46、STRAINTCHECK()【例4-15】建立一个Result表,定义该表Result列的取值范围为0到100之间。USEStudCREATETABLEResult(StuIDchar(13)NOTNULL,CouIDchar(5)NOTNULL,Resultnumeric(3)CONSTRAINTResult_CHKCHECK(Result=0ANDResult=100)第25页/共32页第二十五页,共33页。4.6数据完整性与使用(shyng)约束4.6.5默认值(DEFAULT)约束DEFAULT值表示某一字段的默认值,当没有输入数据(shj)时,则使用此默认的值。默认值只用于列约束。【
47、例4-16】建立一个表Student4,定义Stusex列默认为“男”。USEStudCREATETABLEStudent4(StuIDchar(13),Stunamevarchar(8),Stusexchar(2)DEFAULT 男,Deptchar(20)第26页/共32页第二十六页,共33页。4.6数据完整性与使用(shyng)约束4.6.6非空值(NOTNULL)约束NULL值不是0也不是空白,更不是填入字符串“NULL”,而是表示“不知道”、“不确定”或“没有数据”的意思。当某一字段的值一定要输入才有意义的时候,则可以设置为NOTNULL。如主键列就不允许出现空值,否则就失去了唯一标
48、识一条记录(jl)的作用,非空值(NOTNULL)约束只能用于定义列约束,其语法格式如下:CONSTRAINTNULL|NOTNULL【例4-17】建立一个(y )Student5表,对Stuname字段进行NOT NULL约束。USE StudCREATE TABLE Student5(StuID char(13),Stuname varchar(8) NOT NULL,Stusex char(2),Dept char(20)说明:当插入、修改记录时,若Stuname为空,系统给出错误信息,无NOT NULL约束时,系统缺省为NULL。第27页/共32页第二十七页,共33页。4.6数据完整性
49、与使用(shyng)约束4.6.7外键(FOREIGNKEY)约束FOREIGNKEY约束指定某一个列或一组列作为外键,其中,包含外键的表称为从表,包含外键所引用的主键或唯一键的表称主表。系统保证从表在外键上的取值要么是主表中某一个主键值或唯一键值,要么取空值,以此保证两个表之间的连接,确保了实体的参照完整性。例如表“Student”内的字段“ClaID”的值参照表“Class”中的字段“ClaID”,也就是说,学生的班级要么为空,语义表示未分配班级,要么分配的班级为存在的班级,不能把学生分配到不存在的班级中去。FOREIGNKEY既可用于列约束,也可用于表约束。在表级的FOREIGNKEY约
50、束中,FOREIGNKEY子句中指定的列数和每列的数据类型必须和REFERENCES子句中指定的相同;而对于列级FOREIGNKEY约束,由于参考(cnko)列是唯一确定的,所以可以省略。列级FOREIGN KEY约束语法(yf)格式为: CONSTRAINT FOREIGN KEY (列名) REFERENCES ()表级FOREIGN KEY约束语法格式为: CONSTRAINT FOREIGN KEY (,) REFERENCES (,)【例4-18】建立一个Result表,定义StuID、CouID为Result表的外键,分别参考表Student的StuID列和表Course的CouI
51、D列。USE StudCREATE TABLE Result (StuID char(13) NOT NULL CONSTRAINT S_FORE FOREIGN KEY REFERENCES Student(StuID),CouID char(10) NOT NULL CONSTRAINT C_FORE FOREIGN KEY REFERENCES Course(CouID),Result numeric (3),CONSTRAINT SC_PRIM PRIMARY KEY (StuID,CouID)第28页/共32页第二十八页,共33页。4.6数据完整性与使用(shyng)约束4.6.8标
52、识列IDENTITY通过使用IDENTITY属性可以实现标识列。标识列也叫自增列。通过IDENTITY修饰的字段其值在创建新记录时自动增长,保证数据的唯一性,通常字段的数据类型为int型。建立标识列语法格式如下:列名typeIDENTITY(seed,increment)说明:列的数据类型为不带小数的数值类型。在进行插入(INSERT)操作时,该列的值是由系统按一定规律生成,不允许空值,也不能包含DEFAULT定义。列值不重复,具有标识表中每一行的作用,每个表只能有一个标识列。在设置IDENTITY属性后,可以使用$IDENTITY关键字在选择列表中引用(ynyng)该列。还可以通过名称引用(
53、ynyng)该列。 相邻两个相邻两个(lin )标识值之标识值之间的增量,默认为间的增量,默认为1。 表示列类型,标识列类型必须是数值类型,如下:表示列类型,标识列类型必须是数值类型,如下:decimal、int、numeric、smallint、bigint、tinyint。标识列名,应为合法标识符,限标识列名,应为合法标识符,限制与字段名相同。制与字段名相同。 相邻两个标识值之间的增相邻两个标识值之间的增量,默认为量,默认为1。 【例4-19】建立一个student6表,标识列从1开始,增量为1。CREATE TABLE student6(ID int IDENTITY(1,1),Sno
54、char(8),.)【例4-20】建立包含完整性定义的学生表student。USE StudCREATE TABLE Student(SduID char(13) PRIMARY KEY, SduName varchar(8) NOT NULL, SduBir samlldatetime, SduSex char(2) DEFAULT 男, SduAddr varchar(30), Cla_ID char(10) REFERENCES class(class_ID)第29页/共32页第二十九页,共33页。4.6数据完整性与使用(shyng)约束4.6.9数据库关系图关系图是数据库的一个重要对象
55、,它可以(ky)将表和表间关系以图形方式表现出来。使用数据库关系图可以(ky)创建和修改表、列、关系和键。此外,还可以(ky)修改索引和约束。有关关系图的操作参考实训教材。第30页/共32页第三十页,共33页。本章(bnzhn)小结表是用来存储结构化数据的,各种各样的信息要存储在数据库中,他们都是以表为载体来存放的。数据是信息的数字表现形式,SQLServer提供系统数据类型和用户自定义数据类型,系统数据类型包括(boku)整数数据、字符数据、货币数据、日期和时间数据、二进制字符串等;用户自定义类型是在系统数据类型的基础上由用户根据需要自行定义。表的管理是针对表结构的创建、修改和删除。一般可以
56、采用SQLServerManagementStudio和Transact-SQL命令两种方法来完成。表数据的维护是对表中记录根据需求进行的插入、删除和修改操作,也可以使用SQLServerManagementStudio和Transact-SQL命令两种方法来完成,但命令形式尤为重要。数据完整性是数据库中的数据在逻辑上的一致性和准确性,在多用户共享数据时,数据完整性非常重要,只有确保数据库中的数据完整才能确保数据库的使用。第31页/共32页第三十一页,共33页。感谢您的观看(gunkn)!第32页/共32页第三十二页,共33页。内容(nirng)总结第4章 SQL Server 2005数据表管理。列名称必须符合(fh)标识符规则,并且在表中必须是唯一的。 修改完成后单击工具栏的“保存”按钮保存即可。向表中添加了记录后,用户就可以根据需要修改表中的数据了。实体完整性将行定义为特定表的唯一实体。当主表没有关联记录时,将记录添加到相关表中。【例4-15】建立一个Result表,定义该表Result列的取值范围为0到100之间。感谢您的观看第三十三页,共33页。