




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第6章 表的创建与管理6.1 数据类型 6.2 表的创建6.3 表构造的修正6.4 表的重命名与删除6.5 向表中添加、更新、删除数据6.6 数据完好性的概念与实施方法上一章前往目录.1.表的概念:表是数据库的数据对象,用于存储和操作数据的一种逻辑构造,是一系列列的集合。2.表的构成:表由表头和假设干行数据构成。3.表的特性:表中每一行代表一个独一的记录,每列代表一个域。教学过程:.例1:学生成果表表名表头数据行列.4.对表的操作:填表:将数据写入表中。修正:矫正表中的数据信息。删除:删除表中记录信息。查询:在表中按某些条件查找记录信息。5.留意:在SQL Server2005中,每个数据库最
2、多可存储20亿个表,每个表可以有1024列,每行最多可以存储8060字节。SQL Server中表分为:永久表和暂时表。其中永久表在创建后,除非用户删除否那么将不断存放在数据库文件中;而暂时表那么会在用户退出或进展系统修复时被自动删除。.6.数据类型:1相关概念:概念:定义每个列所能存放的数据值和存储格式。精度:指数值数据中所存储的十进制数据的总位数。例如:tinyint类型可以表示范围是0255,其精度为3。小数位数:指数值数据中小数点右边可以有的数字位数的最大值。例:89.658,其精度为5,小数位数为3。长度:存储数据所用的字节数。例:tinyint所用长度为1字节。2种类:系统数据类型
3、和用户自定义数据类型。SQL Server2005中列的数据类型既可以是系统数据类型也可以是用户自定义数据类型。.6.1 数据类型 6.1.1 系统数据类型6.1.2 自定义数据类型 .6.1.1 系统数据类型 1. 整型数据类型2. 浮点数据类型 3. 字符数据类型 4. 日期和时间数据类型 5. 文本和图形数据类型 6. 货币数据类型 7. 位数据类型 8. 二进制数据类型 9. 特殊数据类型 10. 新增数据类型.详细种类:类型精度小数位数长度(字节)范围字符型char(n)N固定varchar(n) n为实际输入字符数unicodeNchar(n)2N固定Nvarchar(n)2n为实
4、际输入字符数文本型Text2311为实际输入字符数(ASCII)Ntext2301为实际输入字符数(Unicode).类型精度小数位数长度( 字节)范围整数型bigint19082632631Int1004231231-1smallint5022152151tinyint3010255精确数值型Decimal(p,s)ps5171038+110381Numeric(p,s)ps5171038+110381.类型精度小数位数长度( 字节)范围浮点型货币型Float(n)1581.79E3081.79E+308real743.40E+383.40E+38money19482632631smallm
5、oney10442312311位型图像型bit10或1image02311.类型精度小数位数长度(字节)范围二进制型Binary(n)N+4固定Varbinary(n) 18000为实际输入长度+4日期型datetime81753年1月1日到9999年12月31smalldatetime41900年1月1日到2079年12月31时间戳型timetamp8自动增长.1. 整型数据类型整型数据类型是最常用的数据类型之一,它主要用来存储数值,可以直接进展数据运算,而不用运用函数转换。 intinteger:int或integer数据类型可以存储从-231-2,147,483,648到231-12,1
6、47,483,647范围之间的一切正负整数。 Smallint:可以存储从-215-32,768到215-1范围之间的一切正负整数 。Tinyint:可以存储从0到255范围之间的一切正整数。 .2. 浮点数据类型 浮点数据类型用于存储十进制小数。浮点数值的数据在SQL Server中采用只入不舍的方式进展存储 。Real:可以存储正的或者负的十进制数值,最大可以有7位准确位数。 Float:可以准确到第15位小数,其范围从-1.79E-308到1.79E+308。 Decimal和numeric:Decimal数据类型和numeric数据类型完全一样,它们可以提供小数所需求的实践存储空间,但
7、也有一定的限制,可以用2到17个字节来存储从-1038-1到1038-1之间的数值。 .3. 字符数据类型 字符数据类型可以用来存储各种字母、数字符号和特殊符号。 Char:其定义方式为charn,每个字符和符号占用一个字节的存储空间。 Varchar:其定义方式为varcharn。用char数据类型可以存储长达255个字符的可变长度字符串 。Nchar:其定义方式为ncharn。 Nvarchar:其定义方式为nvarcharn。 .4. 日期和时间数据类型 Datetime:用于存储日期和时间的结合体 。它可以存储从公元1753年1月1日零时起到公元9999年12月31日23时59分59秒
8、之间的一切日期和时间 。Smalldatetime:与datetime数据类型类似,但其日期时间范围较小,它存储从1900年1月1日到2079年6月6日内的日期。 .5. 文本和图形数据类型 Text:用于存储大量文本数据,其容量实际上为1到231-12,147,483,647个字节,但实践运用时要根据硬盘的存储空间而定。 Ntext:与text数据类型类似,存储在其中的数据通常是直接能输出到显示设备上的字符,显示设备可以是显示器、窗口或者打印机。Image:用于存储照片、目录图片或者图画,其实际容量为231-12,147,483,647个字节。.6. 货币数据类型 Money:用于存储货币值
9、,存储在money数据类型中的数值以一个正数部分和一个小数部分存储在两个4字节的整型值中,存储范围为-922337285477.5808到922337285477.5808,精度为货币单位的万分之一。Smallmoney:与money数据类型类似,但其存储的货币值范围比money数据类型小,其存储范围为-214748.3468到214748.3467。.7. 位数据类型 Bit:称为位数据类型,其数据有两种取值:0和1,长度为1字节。 .8. 二进制数据类型Binary:其定义方式为binary(n),数据的存储长度是固定的,即n+4字节,当输入的二进制数据长度小于n时,余下部分填充0。 Va
10、rbinary:其定义方式为varbinary(n),数据的存储长度是变化的,它为实践所输入数据的长度加上4字节。其它含义同binary。.9. 特殊数据类型 Timestamp:亦称时间戳数据类型,它提供数据库范围内的独一值,反响数据库中数据修正的相对顺序,相当于一个单调上升的计数器。 Uniqueidentifier:用于存储一个16字节长的二进制数据类型,它是SQL Server根据计算机网络适配器地址和CPU时钟产生的独一号码而生成的全局独一标识符代码Globally Unique Identifier,简写为GUID。.10. 新增数据类型 Bigint:用于存储从-263-9,22
11、3,372,036,854,775,807到263-19,223,372,036,854,775,807之间的一切正负整数。 sql_variant:用于存储除文本、图形数据和timestamp类型数据外的其它任何合法的SQL Server数据。table:用于存储对表或者视图处置后的结果集。这种新的数据类型使得变量可以存储一个表,从而使函数或过程前往查询结果更加方便、快捷。.6.1.2 自定义数据类型 创建用户定义类型要提供三个参数:称号、系统数据类型、能否允许为空。创建方法:1. 运用企业管理器Enterprise Manager创建用户自定义数据类型。.删除数据类型:.2. 利用系统存储
12、过程创建用户自定义数据类型 。系统存储过程sp_addtype为用户提供了T_SQL语句创建自定义数据类型的途径,其语法方式如下:sp_addtype typename= type,phystype= system_data_type, nulltype= null_type, owner= owner_name.运用Tranact-SQL创建用户定义数据类型:格式:sp_addtype 类型名, 系统数据类型 ,能否为空例:sp_addtype wx , int , not null运用Tranact-SQL删除用户定义数据类型:格式:sp_droptype 类型名 例:sp_addtype
13、 wx.例子6-1:自定义一个地址数据类型。 exec sp_addtype address, varchar(80), not null其运转结果如下:1 row(s) affectedtype added.例子6-2:删除自定义的生日数据类型。 exec sp_droptype birthday其运转结果如下:1 row(s) affected0 row(s) affectedType has been dropped.例:在XK数据库中创建一个名为TEL(号码)的用户自定义数据类型,定义为VARCHAR数据类型,长度为3,且不能为NULLUSE XkGOEXEC sp_addtype ,
14、VARCHAR(30),NOT NULLGO.例:删除刚建立的用户自定义数据类型USE XkGOEXEC sp_droptype GO.6.2 表的创建在SQL Server 2005中,每个数据库中最多可以创建200万个表,用户创建数据库表时,最多可以定义1024列,也就是可以定义1024个字段。 SQL Server 2005提供了两种方法创建数据库表,第一种方法是利用企业管理器Enterprise Manager创建表;另一种方法是利用Transact-SQL语句中的create命令创建表。.1. 利用Enterprise Manager创建表 在Enterprise Manager中,
15、展开指定的效力器和数据库,翻开想要创建新表的数据库,用右键单击表对象,从弹出的快捷菜单中选择新建表选项,或者在工具栏中选择图标,就会出现新建表对话框,在该对话框中,可以定义列的以下属性:列称号、数据类型、长度、精度、小数位数、能否允许为空、缺省值、标识列、标识列的初始值、标识列的增量值和能否有行的标识。 然后根据提示进展设置。.2. 利用create命令创建表 其语法方式如下:CREATE TABLE database_name. owner .| owner. table_name( | column_name AS computed_column_expression| ,n) ON fi
16、legroup | DEFAULT .创建表的各参数的阐明如下: database_name:用于指定在其中创建表的数据库称号。 owner:用于指定新建表的一切者的用户名 。table_name:用于指定新建的表的称号。 column_name:用于指定新建表的列的称号。 computed_column_expression:用于指定计算列的列值的表达式。 ON filegroup | DEFAULT:用于指定存储表的文件组名。 TEXTIMAGE_ON:用于指定 text、ntext 和 image 列的数据存储的文件组。 data_type:用于指定列的数据类型 。DEFAULT:用于指
17、定列的缺省值。 .constant_expression:用于指定列的缺省值的常量表达式 。IDENTITY:用于指定列为标识列。 Seed:用于指定标识列的初始值。Increment:用于指定标识列的增量值。 NOT FOR REPLICATION:用于指定列的IDENTITY属性在把从其它表中复制的数据插入到表中时不发生作用,即缺乏的生成列值,使得复制的数据行坚持原来的列值。ROWGUIDCOL:用于指定列为全球独一鉴别行号列 。COLLATE:用于指定表运用的校验方式。 column_constraint和table_constraint:用于指定列约束和表约束。 .例子6-3:创建了一
18、个雇员信息表 其SQL语句的程序清单如下: CREATE TABLE employee ( number int not null, name varchar(20) NOT NULL, sex char(2) NULL, birthday datetime null, hire_date datetime NOT NULL DEFAULT (getdate(), professional_title varchar(10) null, salary money null, memo ntext null).例子6-4USE XkGO-创建班级信息表ClassCREATE TABLE Clas
19、s( ClassNo char (8) NOT NULL, DepartNo char (2) NOT NULL, ClassName char (20) NOT NULL )GO.-创建学生信息表StudentCREATE TABLE Student( StuNo char (8) NOT NULL, ClassNo char (8) NOT NULL, StuName char (8) NOT NULL, Pwd char (8) NOT NULL)GO.-创建学生选课表StuCouCREATE TABLE StuCou( StuNo char (8) NOT NULL , CouNo c
20、har (3) NOT NULL , WillOrder smallint NOT NULL , State char (4) NOT NULL , RandomNum varchar (50) NULL )GO.6.3 表构造的修正6.3.1 运用T-SQL的ALTER TABLE 语句修正表 ALTER TABLE database_name . owner.table_name WITH NOCHECK ADD column_name datatype column_constraints | , table_constraint , next_col_name | next_table
21、_constraint | DROP CONSTRAINT constraint_name| COLUMN column,n .其中:l database_name:将要修正的表所在的数据库。 owner:表对象的一切者。 table_name:将要修正的表的称号。 WITH NOCHECK:允许check或者foreign key约束加到一个表,而不验证现有的数据能否违反约束。假设没有指定这个选项,添加的任何约束都要对现有数据进展检查,假设有任何约束违反,ALTER TABLE语句将被终止。 ADD:在现有表中添加一个新的数据项或一个约束。 column_name:添加的字段称号。 data
22、type:新增字段的数据类型。 DROP:删除现有表中的一个字段或约束。 CONSTRAINT:删除数据库中的约束。 COLUMN:指定删除数据库中的列。.例子6-5:创建了一个雇员信息表 其SQL语句的程序清单如下:create table employees(id char(8) primary keyname char(20) not null,department char(20) null,memo char(30) nullage int null,)alter table employees add salary int null drop column agealter col
23、umn memo varchar(200) null.例子6-6 为XK数据库中的CLASS表创建基于CLASSNO,列名为PK_CLASS的主键,再将其删除USE XkGO-添加主键约束ALTER TABLE ClassADD CONSTRAINT PK_ClassPRIMARY KEY CLUSTERED (ClassNo) GO-删除主键约束ALTER TABLE ClassDROP CONSTRAINT PK_ClassGO.6.3.2 运用SQL Server 企业管理器修正表 利用企业管理器添加、删除和修正字段 。在企业管理器中,翻开指定的效力器中要修正表的数据库,用右键单击要进展
24、修正的表,从弹出的快捷菜单中选择设计表选项,那么会出现设计表对话框,在该对话框中,可以利用图形化工具完成添加、删除和修正字段的操作。.例子6-7 修正XK数据库中的表STUDENT将STUNO设置为主键.6.4 表的重命名与删除重命名:1.运用T-SQL言语进展例:USE XkGoEXEC sp_rename Depart, DepartmentGO2.运用企业管理器.删除表1. 利用企业管理器删除表在企业管理器中,展开指定的数据库和表格项,用右键单击要删除的表,从快捷菜单中选择“除去表选项,那么会出现除去对象对话框。单击“全部删除按钮,即可删除表。 2. 利用DROP TABLE语句删除表D
25、ROP TABLE语句可以删除一个表和表中的数据及其与表有关的一切索引、触发器、约束、答应对象。DROP TABLE语句的语法方式如下:DROP TABLE table_name.例子6-8 删除数据库XK中的表CLASSUSE XkGoDROP TABLE ClassGO.6.5 表的数据操作 6.5.1 向表中插入数据在企业管理器中向表中插入数据 用INSERT语句向表中插入数据 INSERT INTO table_name WITH ( .n )| view_name| rowset_function_limited ( column_list ) VALUES( DEFAULT | N
26、ULL | expression ,.n ) | derived_table| execute_statement .其中:l INTO:一个可选的关键字,可以将它用在 INSERT 和目的表之间。l table_name:将要接纳数据的表或 table 变量的称号。l WITH ( .n):指定目的表所允许的一个或多个表提示。需求有 WITH 关键字和圆括号。不允许有 READPAST、NOLOCK 和 READUNCOMMITTED。l view_name:视图的称号及可选的别名。经过 view_name 来援用的视图必需是可更新的。由 INSERT 语句所做的修正不能影响视图的 FROM
27、 子句中援用的多个基表。例如,在多表视图中的 INSERT 必需运用 column_list,column_list 是指援用来自一个基表的列。l rowset_function_limited:是 OPENQUERY 或 OPENROWSET 函数。l column_list:要在其中插入数据的一列或多列的列表。必需用圆括号将 column_list 括起来,并且用逗号进展分隔。.lVALUES:引入要插入的数据值的列表。对于 column_list假设已指定中或者表中的每个列,都必需有一个数据值。必需用圆括号将值列表括起来。假设 VALUES 列表中的值与表中列的顺序不一样,或者未包含表中
28、一切列的值,那么必需运用 column_list 明确地指定存储每个传入值的列。l DEFAULT:强迫 SQL Server 装载为列定义的默许值。假设对于某列并不存在默许值,并且该列允许 NULL,那么就插入 NULL。对于运用 timestamp 数据类型定义的列,插入下一个时间戳值。DEFAULT 对标识列无效。l Expression:一个常量、变量或表达式。表达式不能包含 SELECT 或 EXECUTE 语句。l derived_table:任何有效的 SELECT 语句,它前往将装载到表中的数据行。lexecute_statement:任何有效的 EXECUTE 语句,它运用
29、SELECT 或 READTEXT 语句前往数据。.6.5.2 修正表中数据 在企业管理器中修正表数据 用UPDATE语句修正表数据 UPDATE table_name WITH ( .n )SET column_name = expression | DEFAULT | NULL WHERE .其中:l table_name:需求更新的表的称号。假设该表不在当前效力器或数据库中,或不为当前用户一切,这个称号可用链接效力器、数据库和一切者称号来限定。l WITH ( .n ):指定目的表所允许的一个或多个表提示,需求有 WITH 关键字和圆括号。l SET:指定要更新的列或变量称号的列表。l
30、column_name:含有要更改数据的列的称号。column_name 必需驻留于 UPDATE 子句中所指定的表或视图中。标识列不能进展更新。 l expression:变量、字面值、表达式或加上括弧的前往单个值的 subSELECT 语句。l DEFAULT:指定运用对列定义的默许值交换列中的现有值。假设该列没有默许值并且定义为允许空值,这也可用来将列更改为 NULL。l WHERE:指定条件来限定所更新的行。.6.5.3 删除表中数据 在企业管理器中删除表中数据 用DELETE语句删除表中数据 DELETE FROM table_name WITH ( .n ) | view_name
31、| rowset_function_limited FROM ,.n WHERE .其中:l FROM:是可选的关键字,可用在 DELETE 关键字与目的 table_name、view_name 或 rowset_function_limited 之间。l table_name:是要从其中删除行的表的称号。在其作用域内的 table 变量、或是将 OPENDATASOURCE 函数作为效力器称号的由四部分组成的表名或视图称号还可以在 DELETE 语句中作为表源运用。l WITH ( .n):指定目的表所允许的一个或多个表提示。需求有 WITH 关键字和圆括号。不允许有 READPAST、N
32、OLOCK 和 READUNCOMMITTED。l view_name:是视图称号。在视图的 FROM 子句中,view_name 援用的视图必需可更新且正确援用一个基表。l FROM :指定附加的 FROM 子句。这个对 DELETE 的 Transact-SQL 扩展运用户得以从 指定数据,并从第一个 FROM 子句内的表中删除相应的行。l WHERE:指定用于限制删除行的条件。假设没有提供 WHERE 子句,那么 DELETE 删除表中的一切行。.6.6数据完好性的概念与实施方法数据库运用程序开发中的一个重要步骤就是设计和实施数据的完好性,并确定实施数据完好性的最正确方案。数据完好性是指
33、数据库中数据的正确性和一致性,是衡量数据库质量的一个重要规范。在运用INSERT、UPDATE和DELETE命令修正数据库中的数据时,数据的完好性能够被破坏,如插入了一个不存在学生的成果,或将学生的班号修正为一个不存在的班级等。经过定义数据完好性规那么,SQL Server可以经过本身提供的完好性规那么有效地管理数据的输入,而不用运用额外的运用程序来协助管理,这样一方面可以节省系统开销,另一方面将使数据库中的数据独立于运用程序,使创建开放式数据库系统成为能够。 .实现数据完好性与业务规那么数据完好性的落实可为数据库中的数据质量提供保证。在对数据表进展规划时的两个重要步骤就是对数据列的有效数值加
34、以识别,并决议如何落实列内数据的完好性。数据完好性分为四种类型,并可经过多种方式得到落实。.1.域完好性域完好性是指给定列的输入有效性。强迫域有效性的方法有:经过限制数据类型(包括自定义数据类型)、格式CHECK约束和规那么或能够的取值范围FOREIGN KEY约束、CHECK约束、DEFAULT定义、NOT NULL定义和规那么来实现。如:性别字段只能取“男或“女;课程成果取值范围为0100;姓名字段不能为空;性别字段的默许值为“男等等。.2.实体完好性实体完好性是指表中的每一行必需是独一的。实体完好性强迫表中的一切记录都有一个独一的标识列,这个独一标识列能够是一列,也能够有假设干列的组合。
35、强迫实体完好性的方法有:UNIQUE约束、PRIMARY KEY约束或IDENTITY属性。如:在学生情况表中,学生的学号是独一的,它与每个学生一一对应;成果表中,学号+课程号是独一的,它与每个学生的每门课相对应。 .对于实体完好性,有如下规那么: 实体完好性规那么针对根本关系。一个根本关系表通常对应一个实体集,例如,学生关系对应学生集合。 现实世界中的实体是可以区分的,它们具有一种独一性质的标识。例如,学生的学号,教师的职工号等。在关系模型中,主关键字作为独一的标识,且不能为空。 .3.参照完好性援用完好性参照完好性确保数据库中数据的一致性。在SQL Server中,参照完好性基于外键援用表
36、与主键被援用表之间或外键与独一键之间的关系经过FOREIGN KEY和 CHECK约束。经过外键将援用表和被援用表关联起来。参照完好性经过已定义的表间关系,确保键值在一切表中都必需一致,因此不能援用不存在的值即指向不存在的行。假设在被援用的表中,某一记录被外部键援用,那么该记录就不能删除;假设需求更改键值,那么在整个数据库中,对该键值的一切援用都要进展一致的更改,以保证数据的参照完好性。 .建立外键约束.用来控制数据库相关表之间的主关键字和外部关键字之间数据一致性的规那么。相关表之间的数据一致性要求: 有子必有父 子表中的每一个记录在对应的主表中必需有一父记录。插子必有父 在父表中修正记录时,
37、假设修正了主关键字的值,那么子表中相关记录的外部关键字值必需同样修正 父删子必删 在父表中删除记录时,与该记录相关的子表中的记录必需全部删除。注:参照完好性是建立在库表之间永久关系根底之上的。 .4.用户定义完好性用户可以根据需求,可以在SQL Server中定义不属于上述规范类别的特定规那么的用户完好性定义。一切的完好性类型都支持用户自定义完好性CREATE TABLE中的一切列级和表级约束、存储过程和触发器。.6.5.2 数据完好性实施方法目前有许多关系的DBMS提供了多种定义完好性约束条件的功能和检查能否违背完好性约束条件的方法。DBMS假设发现了用户的操作使数据库违背了完好性约束条件,
38、将采取一定的措施,回绝用户执行此操作。约束分为列级约束和表级约束。假设约束只对一列起作用,应定义为列级约束;假设约束对多列起作用,应定义为表级约束。 .常用的关系数据库实现完好性约束的方法有:1声明型数据完好性。作为数据库定义或阐明的一部分在语法中实现,是SQL言语的参饰,在Create Table和Alter Table定义中运用constraint和default语句限制表中数据的值。 运用这种方法实现数据完好性简单且不容易出错,系统将直接实现数据完好性的要求定义在表和列上。 .在运用create table和alter table语句中,进展完好性限定的子句有:缺省约束default c
39、onstraints: 当向数据库中的表中插入数据时,假设用户没有明确给出某列的值,那么系统自动为该字段输入指定的值。检查约束check constraints:限制插入列中的值, 如性别字段输入时只允许出现男或女,其他值一概不许出现。主键约束primary key constraints: 要求表中在指定的列上没有两行具有一样的值,且不允许为空值。独一约束unique constraints:要求表中在指定的列上没有两行具有一样的值,允许为空值。参照约束reference constraints外键约束foreign key constraints:要求指定列或者外键中正被插入或者更新的新值
40、, 必需在主表的相应主键中曾经存在。.(2) 过程型数据完好性普通先写出实施数据完好性的条件,然后再写出强迫该条件所执行的用于保证数据完好性的脚本。通常由触发器和存储过程实现.6.6.3 约束 建立和运用约束的目的在于保证数据的完好性,设计表时需求定义列的有效值并经过列中数据、行中数据及表间数据决议如何强迫保证数据的完好性,约束定义关于列中允许值的规那么,是强迫完好性的首选方法。 约束是独立于表构造的,它作为数据库定义的一部分在创建表时声明,可以经过企业管理器或ALTER TABLE语句添加或删除。当表被删除时,表所附带的一切约束同时被删除。.1 约束的类型在SQL Server 2005中有
41、5种约束:主键约束primary key constraint独一性约束unique constraint检查约束check constraint缺省约束default constraint外部键约束foreign key constraint.NOT NULL约束NOT NULL约束又称非空约束,表示运用该约束的列不允许运用空值。假设该列是主键,那么系统强迫主键列为非空约束,而其它列的非空约束必需根据需求加以设置。非空约束可以在CREATE TABLE建表时实现,在表创建完成后,也可以运用修正列属性的T-SQL语句完成:ALTER TABLE table_nameALTER COLUMN c
42、olumn_namenew_data_type NULL | NOT NULL 【例5-1】 将学生信息表Student中的学生姓名列强迫非空约束。可以经过修正列属性的方法完成:ALTER TABLE StudentALTER COLUMN StudentName VARCHAR(10) NOT NULL.2、运用T-SQL言语创建、管理约束(1).运用CREATE TABLE语句创建约束的普通语法CREATE TABLE table_name(column_name data_type CONSTRAINT constraint_namePRIMARY KEYCLUSTERED|NONCLU
43、STERED|UNIQUECLUSTERED|NONCLUSTERED|FOREIGN KEY REFERENCES ref_table(ref_column)|DEFAULT constraint_expression|CHECK(logical_expression),).(2). 缺省约束当表中的某列必需有值,并且当运用INSERT命令向数据表插入记录数据时,假设用户没有明确指定该列的值,该列也需求有一个明确值的情况下,就需求运用DEFAULT约束。运用了DEFAULT约束的列,SQL Server将根据用户的插入数据,自动维护域完好性:当用户插入时该列有指定值,那么该列运用该值插入,否
44、那么运用DEFAULT约束中指定的默许值。DEFAULT约束可以运用以下方法实现:l作为表定义的一部分在创建表时创建。l添加到现有表中;l删除现有的 DEFAULT 定义。ALTER TABLE Student/* 添加DEFAULT约束 */ ADD CONSTRAINT Default_Sex DEFAULT 男 FOR Sex.运用缺省约束时,应该留意以下几点:每个字段只能定义一个缺省约束。假设定义的缺省值长于其对应字段的允许长度,那么输入到表中的缺省值将被截断。不能参与到带有IDENTITY属性或者数据类型为timestamp的字段上。假设字段定义为用户定义的数据类型,而且有一个缺省绑
45、定到这个数据类型上,那么不允许该字段有缺省约束。.例 为数据库JWGL中表teacher的SEX性别字段创建一个缺省约束,缺省值为1男USE JWGLGOALTER TABLE teacherADD CONSTRAINT default_sex DEFAULT 1 FOR SEX.【例】在XK数据库中为StuCOU表创建名为DF_ StuCOU_State的DEFAULT约束,该约束使State列的值默以为报名USE XkGOALTER TABLE StuCouADD CONSTRAINT DF_StuCou_State DEFAULT (报名) FOR StateGO.【例】删除刚建立的名为
46、StuCOU_State的DEFAULT约束USE XkGOALTER TABLE StuCouDROP CONSTRAINT DF_StuCou_StateGO.(3) 检查约束 CHECK约束用于限制输入到列中的值的范围,从而强迫数据库中数据的域完好性。它与FOREIGN KEY约束控制列中数值类似。区别在于它们判别值有效的方法不同:FOREIGN KEY约束从另一个表中获得有效数值列表,而CHECK约束经过逻辑表达式的成立与否加以判别。.一个列级检查约束只能与限制的字段有关;一个表级检查约束只能与限制的表中字段有关。一个表中可以定义多个检查约束。每个CREATE TABLE语句中每个字段
47、只能定义一个检查约束。在多个字段上定义检查约束,那么必需将检查约束定义为表级约束。当执行INSERT语句或者UPDATE语句时,检查约束将验证数据。检查约束中不能包含子查询。.创建检查约束常用的操作方法有两种:1.企业管理器操作法。运用企业管理器创建检查约束,与创建独一性约束类似 。2.Transact-SQL语句操作法。检查约束的Transact-SQL语句操作法,其语法方式如下:CONSTRAINT constraint_name CHECK NOT FOR REPLICATION (logical_expression).【例】 为数据库JWGL中表student_course 的GRA
48、DE成果字段创建一个检查约束,使得GRADE的值在0-100之间。USE JWGLGOALTER TABLE student_courseADD CONSTRAINT check_grade CHECK (grade=0 and grade=1 AND WillOrder=5)GO.(4) 主键约束 在一个表中,存在着这样的字段,它在每个记录中的值都是独一的,因此可以用来标识表中的各个不同记录。这样的字段被称为关键字,关键字可以是列或列的组合。例如学生情况表中的StudentID列就是一个关键字,由于每个学生的学号必需是独一的。 当表中有两个或两个以上的列或列的组合满足以上条件时,称这些列或列
49、的组合为候选关键字。 当表的关键字多于一个时,可以将其中的一个关键字作为主键(PRIMARY KEY)。 .主键的添加、删除和修正操作方法有两种:一企业管理器操作法,在企业管理器中,用右键单击要操作的数据库表,从弹出的快捷菜单中选择设计表选项 ,然后根据提示操作。二Transact-SQL语句操作法。 其语法方式如下:CONSTRAINT constraint_name PRIMARY KEY CLUSTERED|NONCLUSTERED column_name,n.主键约束各参数的阐明如下 constraint_name:用于指定约束的称号,约束的称号在数据库中应该是独一的。假设不指定,那么
50、系统会自动生成一个约束名。LUSTERED|NONCLUSTERED:用于指定索引的类型,即聚簇索引或者非聚簇索引,CLUSTERED为默许值。column_name:用于指定主键的列名。主键最多由16个列组成。.【例】 将数据库JWGL中teacher表的teacher_id教师号字段设为主键。 USE JWGLGOALTER TABLE teacher ADD CONSTRAINT PK_teacher_id PRIMARY KEY clustered (teacher_id).【例】在XK数据库中为STUCOU表中的StuNo和CouNo列的组合创建名为IX_StuNoCouNo的PRI
51、MARY KEY约束USE XkGOALTER TABLE StuCouADD CONSTRAINT IX_StuNoCouNo PRIMARY KEY (StuNo,CouNo)GO.【例】删除刚建立的名为IX_StuNoCouNo的PRIMARY KEY约束USE XkGOALTER TABLE StuCouDROP CONSTRAINT IX_StuNoCouNoGO.(5) 独一性约束独一性约束用于指定一个或者多个列的组合的值具有独一性,以防止在列中输入反复的值。当运用独一性约束时,需求思索以下几个要素: 运用独一性约束的字段允许为空值。一个表中可以允许有多个独一性约束。可以把独一性约
52、束定义在多个字段上。独一性约束用于强迫在指定字段上创建一个独一性索引。 缺省情况下,创建的索引类型为非聚簇索引。.创建和修正独一性约束的操作方法创建和修正独一性约束的操作方法有两种:一企业管理器操作法,经过企业管理器可以完成创建和修正独一性约束的操作。 二Transact-SQL语句操作法。CONSTRAINT constraint_name UNIQUE CLUSTERED|NONCLUSTEREDcolumn_name,n.【例】 将数据库JWGL中teacher表的teacher_id教师号字段设为独一约束。 USE JWGLGOALTER TABLE department ADD CO
53、NSTRAINT unique_department_name UNIQUE nonclustered (department_name).【例】在XK数据库中为Student表上创建名为IX_PWD的、独一索引,该索引基于密码PWD列,以保证学生密码不反复。USE XkGOCREATE UNIQUE INDEX IX_Pwd ON Student (Pwd)GO.【例】 为系情况表(Department)中的系名列(DepartmentName添加一个UNIQUE约束。ALTER TABLE Department ADD CONSTRAINT UNIQUE_DepartmentName UN
54、IQUE (DepartmentName );.独一约束和主键约束的区别独一约束与主键约束都为指定的列建立独一索引,即不允许独一索引的列上有一样的值。主键约束限制更严厉,不但不允许有反复值,而且也不允许有空值。 独一约束与主键约束产生的索引可以是聚簇索引也可以是非聚簇索引,但在缺省情况下独一约束产生非聚簇索引,主键约束产生聚簇索引。.(6) 外部键约束假设列或列的组合不是本表的关键字,而是另一个表的关键字,那么称这些列或列的组合是外键(FOREIGN KEY)。普通表与表之间经过主键和外键进展衔接,经过它可以强迫表与表之间的参照完好性。FOREIGN KEY约束要求列中的每个值在被援用表中对应
55、的被援用列中都存在。如学生情况表(Student)表中的所在班级(ClassID)就是一个外键,它与班级情况表(Class)表中的主键班号(ClassID)进展关联。 .经过外键约束强迫参照完好性。SQL Server提供了外键/主键值约束。即满足以下两点: 存在外键时,被参照表中这一行不能删除。 向子表插入记录或更新子表中外键值的前提是,必需保证这个外键值与主表中主键的某个值相等或者该外键值为空,否那么不允许插入或修正外键值。.创建FOREIGN KEY约束时应思索以下要素:它提供一列或多列数据的参照完好性。FOREIGN KEY约束不自动创建索引。但假设思索数据库的多表衔接,建议为外键创建
56、一个索引,以提高衔接性能主键与外键的数据类型和长度必需一致,或系统可转换【例】为表teacher创建外键department_id,外键department_id参考表department中的主键department_id。USE JWGLGOALTER TABLE teacher ADD CONSTRAINT FK_department_id FOREIGN KEY (department_id)REFERENCES department(department_id)GO.l 行级FOREIGN KEY约束,其定义格式为: CONSTRAINT constraint_name FOREIGN
57、 KEY( column ,n ) /* 援用表中的列名或列名的组合 */REFERENCES ref_table(ref_column,n ) /* 被援用表及其列名 */ ON DELETE CASCADE | NO ACTION /* 能否级联删除相关的记录 */ ON UPDATE CASCADE | NO ACTION /* 能否级联更新相关的记录 */ NOT FOR REPLICATION .【例】在XK数据库中为StuNO 表创建名为StuNO _FK的FOREIGN KEY约束,该约束限制StuNO列的数据只能是student表的StuNO列存在的数据USE XkGOALTE
58、R TABLE StuCouADD CONSTRAINT StuNo_FK FOREIGN KEY (StuNo)REFERENCES Student (StuNo)GO.【例】删除刚建立的名为StuNO _FK的FOREIGN KEY约束USE XkGOALTER TABLE StuCouDROP CONSTRAINT STuNo_FK GO.【例】 为Student表中的所在班级列(ClassID)添加一个FOREIGN KEY约束。ALTER TABLE Student ADD CONSTRAINT FK_Student_ClassFOREIGN KEY( ClassID )REFERE
59、NCES Class( ClassID )ON UPDATE CASCADE.外部键约束用于强迫参照完好性,提供单个字段或者多个字段的参照完好性。当运用外部键约束时,应该思索以下几个要素:外部键约束提供了字段参照完好性。外部键从句中的字段数目和每个字段指定的数据类型必需和REFERENCES从句中的字段相匹配。外部键约束不能自动创建索引,需求用户手动创建。 .用户想要修正外部键约束的数据,必需有对外部键约束所参考表的SELECT权限或者REFERENCES权限。参考同一表中的字段时,必需只运用REFERENCES子句,不能运用外部键子句。一个表中最多可以有31个外部键约束。在暂时表中,不能运用
60、外部键约束。主键和外部键的数据类型必需严厉匹配。.3. 运用企业管理器管理约束1管理NOT NULL、DEFAULT约束1启动企业管理器,展开效力器组,再展开要操作的效力器。2展开“数据库文件夹,再展开要操作的数据库Educational。3单击展开的“表项,在右边的“表列表框中显示出所选数据库中的一切表。4右击要在其中设置NOT NULL、DEFAULT约束的数据表Student,在弹出的快捷菜单中选择“设计表菜单项,出现 “设计表Student对话框。5中间列表中的一行为一列的定义,选中要设置NOT NULL约束的StudentName列,单击行尾“允许空列,将其中的“去掉即可实现NOT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 有机合成原料在绿色建筑材料的创新开发趋势预测分析预测考核试卷
- 冷冻饮品企业的品牌维权与法律事务考核试卷
- 木质素在土壤改良剂中的作用考核试卷
- 外贸生鲜类合同范本
- 梁板安装合同范本
- 档案提成合同范本
- 外墙水性氟碳漆合同范本
- 金融门面转让合同范本
- 水管改造施工合同
- 公司与供应商合作协议
- 国有土地上房屋征收与补偿条例 课件
- 安全文明施工管理(EHS)方案(24页)
- 水厂项目基于BIM技术全生命周期解决方案-城市智慧水务讲座课件
- 幼儿园绘本:《闪闪的红星》 红色故事
- 三年级学而思奥数讲义.doc
- 投标人基本情况一览表格
- 铁路建设项目施工企业信用评价办法(铁总建设〔2018〕124号)
- 叉形件加工设计与分析论文
- 高强螺栓质保书
- 市政工程施工进度网络图
- 邹县1000MW#7机组最大出力试验报告
评论
0/150
提交评论