数据库-表和数据的管理

上传人:hs****ma 文档编号:567631617 上传时间:2024-07-21 格式:PPT 页数:83 大小:602.50KB
返回 下载 相关 举报
数据库-表和数据的管理_第1页
第1页 / 共83页
数据库-表和数据的管理_第2页
第2页 / 共83页
数据库-表和数据的管理_第3页
第3页 / 共83页
数据库-表和数据的管理_第4页
第4页 / 共83页
数据库-表和数据的管理_第5页
第5页 / 共83页
点击查看更多>>
资源描述

《数据库-表和数据的管理》由会员分享,可在线阅读,更多相关《数据库-表和数据的管理(83页珍藏版)》请在金锄头文库上搜索。

1、第五章 表和数据的管理学习要点表和数据的管理SQLServer2005的数据类型的数据类型创建表创建表修改表修改表数据管理数据管理插入数据插入数据修改数据修改数据删除数据删除数据删除表删除表数据的完整性数据的完整性数据完整性类型数据完整性类型约束约束默认默认规则规则SQLServer2005的数据类型SQLServer2005的数据类型数据库中的所有数据都存放在按行与列格式组织数据库中的所有数据都存放在按行与列格式组织的表中,数据类型是数据的一种属性,决定数据的表中,数据类型是数据的一种属性,决定数据存储的空间和格式。存储的空间和格式。数据类型可以为对象定义数据类型可以为对象定义4个属性:个属

2、性:对象包含的数据种类。对象包含的数据种类。所存储值占有的空间(字节数)和数值范围。所存储值占有的空间(字节数)和数值范围。数值的精度(仅适用于数值类型)。数值的精度(仅适用于数值类型)。数值的小数位数(仅适用于数值类型)。数值的小数位数(仅适用于数值类型)。SQLserver2005提供的数据类型可以归纳为:提供的数据类型可以归纳为:数值类型、字符类型、日期时间类型、货币类型数值类型、字符类型、日期时间类型、货币类型和其他数据类型。和其他数据类型。SQLServer2005的数据类型数值类型数值类型根据其所存储数据的精确与否,分为精数值类型根据其所存储数据的精确与否,分为精确数值类型和近似数

3、值类型。确数值类型和近似数值类型。1.精确数值类型精确数值类型精确数值类型用来存储没有小数位的整数或定精确数值类型用来存储没有小数位的整数或定点小数。点小数。类别数据类型字节数取值范围Integerbigint8-263263-1int4-231231-1smallint2-3276832767tinyint10255Exactnumricdecimal(p,s)517-1038+11038-1numeric(p,s)517-1038+11038-1SQLServer2005的数据类型数值类型定义定义decimal和和numeric数据类型时需要提供两个数据类型时需要提供两个参数,第参数,第1

4、个参数说明数据类型的精度,即数字的个参数说明数据类型的精度,即数字的个数,第个数,第2个参数说明数据类型的小数位数,例如个参数说明数据类型的小数位数,例如decimal(12,4),定义一个数据类型,其中可以存,定义一个数据类型,其中可以存放放12位数字,其中小数点后面有位数字,其中小数点后面有4位数字。位数字。在在SQLServer中中decimal和和numeric两者唯一的两者唯一的区别在于区别在于decimal不能用于带有不能用于带有identity关键字的关键字的列。列。数据类型数据类型bigint,int,smallint和和tinyint数据类型数据类型只能用于存储整数。只能用于

5、存储整数。decimal和和numeric数据类型数据类型既可以存放小数数值,也可以存放整数,当参数既可以存放小数数值,也可以存放整数,当参数s的值取的值取0时,表示这两种数据类型中存放的是整数时,表示这两种数据类型中存放的是整数。SQLServer2005的数据类型数值类型2.近似数值类型近似数值类型近似数字数据类型可以存储十进制值,用于表示浮点数近似数字数据类型可以存储十进制值,用于表示浮点数据。此类型的数据不一定有精确的表示。据。此类型的数据不一定有精确的表示。SQLServer2005存储数据时对小数点右边的数进行四存储数据时对小数点右边的数进行四舍五入。只有在精确数据类型不够大,不能

6、存储数值时,舍五入。只有在精确数据类型不够大,不能存储数值时,才考虑使用才考虑使用float。float(n)中中n的取值范围为的取值范围为153。当。当1n24时,占用时,占用4字节,精度为字节,精度为7;当;当25n53时,占用时,占用8字节,精度为字节,精度为15。数据类型字节数取值范围float(n)4或8-2.23E3082.23E308real4-3.4E383.4E38SQLServer2005的数据类型字符类型字符类型是用于存储字符型数据的。该数据类型字符类型是用于存储字符型数据的。该数据类型可以使用可以使用ASCII编码或编码或Unicode编码。编码。ASCII编码要求用编

7、码要求用8个二进制位来表示字母的范围。具体个二进制位来表示字母的范围。具体分为分为char、varchar、text等等3种,其中种,其中char为固定长度。为固定长度。Unicode标准使用标准使用2个字节来表示每个字符。在个字节来表示每个字符。在Unicode标准中,包括了以各种字符集定义的全部字符。标准中,包括了以各种字符集定义的全部字符。在在SQLserver2005中,中,Unicode数据以数据以nchar、nvarchar和和ntext数据类型存储。定义一个字符数据类型存储。定义一个字符数据类型时,指定该列允许存储的最大字节数。数据类型时,指定该列允许存储的最大字节数。字符类型常

8、量应该用单引号括起来。字符类型常量应该用单引号括起来。下表列出了下表列出了SQLServer支持的字符数据类型。支持的字符数据类型。数据数据类型型字字节数数字符数字符数作用作用char(n)18000最多最多8000个字符个字符固定宽度的固定宽度的ASCII数据类型数据类型varchar(n)18000最多最多8000个字符个字符可变宽度的可变宽度的ASCII数据类型数据类型varchar(max)最大最大2G最多最多1073741824个字符个字符可变宽度的可变宽度的ASCII数据类型数据类型text最大最大2G最多最多1073741824个字符个字符可变宽度的可变宽度的ASCII数据类型数

9、据类型nchar(n)28000最多最多4000个字符个字符固定宽度的固定宽度的Unicode数据类型数据类型nvarchar(n)28000最多最多4000个字符个字符可变宽度的可变宽度的Unicode数据类型数据类型nvarchar(max)最大最大2G最多最多536870912个字符个字符固定宽度的固定宽度的Unicode数据类型数据类型ntext最大最大2G最多最多536870912个字符个字符固定宽度的固定宽度的Unicode数据类型数据类型SQLServer2005的数据类型日期时间类型日期时间类型数据,可具体分为日期时间类型数据,可具体分为datetime与与smalldatet

10、ime两种类型。两种类型。datetime和和smalldatetime数据类型在计算机内部是作为整数数据类型在计算机内部是作为整数存储的。存储的。datetime类型存储为类型存储为1对对4字节整数,前字节整数,前4字节存储字节存储日期值,后日期值,后4字节存储时间值。它们一起表示自字节存储时间值。它们一起表示自1753年年1月月1日午夜日午夜12点钟经过的毫秒数。点钟经过的毫秒数。smalldatetime类型存储为一对类型存储为一对2字节整数,前字节整数,前2字字节存储日期值,后节存储日期值,后2字节存储时间值,它们一起表字节存储时间值,它们一起表示自示自1900年年1月月1日午夜日午夜

11、12点钟经过的分钟数。点钟经过的分钟数。SQLServer2005的数据类型日期时间类型日期时间数据类型由有效的日期和时间组成。如日期时间数据类型由有效的日期和时间组成。如有下列日期和时间数据有下列日期和时间数据“12/05/9812:26:00:00:00PM”和和“2:38:29:15:01AM6/15/98”。前一个数据是日期在前,时间在后。前一个数据是日期在前,时间在后。SQLServer中常用的日期和时间表示格式如下:中常用的日期和时间表示格式如下:分隔符可用分隔符可用/、-或或.,例如,例如4/15/2005、4-15-05或或4.15.2005;字母日期格式:字母日期格式:Apr

12、il15,2005;不用分隔符:不用分隔符:20050501;时时:分分:秒秒:毫秒:毫秒:08:05:25:28时时:分分AM|PM:05:08AM、08:05PM日期类型字节数取值范围datetime8从1753-1-1到9999-12-31,精度为3.33毫秒smalldatetime4从1900-1-1到2079-12-31,精度为1分钟日期时间类型SQLServer2005的数据类型货币类型货币数据类型可用于存储精确到小数点后货币数据类型可用于存储精确到小数点后4个小数个小数位的货币值。位的货币值。货币数据类型的特点是小数点后存储货币数据类型的特点是小数点后存储4位小数,所位小数,所

13、以在金融应用程序中很少使用这种数据类型。通常以在金融应用程序中很少使用这种数据类型。通常使用使用decimal数据类型代替货币数据类型,因为使用数据类型代替货币数据类型,因为使用decimal数据类型可以更灵活地指定小数点后多位数。数据类型可以更灵活地指定小数点后多位数。货币类型常量应以货币单位符号做前缀,默认货币类型常量应以货币单位符号做前缀,默认“¥”数据类型字节数取值范围money8-922337203685477.5808922337203685477.5807smallmoney4-214748.3648214748.3647SQLServer2005的数据类型二进制数据类型SQLS

14、erver2005提供了提供了3种二进制数据类型,允种二进制数据类型,允许在一个表中存储各种数量的二进制数据。许在一个表中存储各种数量的二进制数据。数据数据类型型字字节数数作用作用binary(n)18000存储固定大小的二进制数据存储固定大小的二进制数据varbinary(n)18000存储可变大小的二进制数据存储可变大小的二进制数据varbinary(max)最多最多2G存储可变大小的二进制数据存储可变大小的二进制数据image最多最多2G存储可变大小的二进制数据存储可变大小的二进制数据SQLServer2005的数据类型二进制数据类型二进制数据类型用于存储二进制数据类型用于存储SQLSe

15、rver中的文件,中的文件,如如Word、Excel、PDF、Visio以及图像等文件。以及图像等文件。image数据类型除了可以存储图像文件以外,也数据类型除了可以存储图像文件以外,也可以存储其他二进制文件。可以存储其他二进制文件。varbinary(max)数据数据类型是类型是SQLServer2005新增的一种数据类型,新增的一种数据类型,它可以存储与它可以存储与image数据类型相同大小的数据,数据类型相同大小的数据,并且所有能够在并且所有能够在binary/varbinary数据类型上执数据类型上执行的操作和函数都可以在行的操作和函数都可以在varbinary(max)数据类数据类型

16、上使用,这是型上使用,这是image数据类型不能做到的。数据类型不能做到的。二进制类型常量应以二进制类型常量应以0x作前缀。作前缀。创建表创建表在数据库中,表是由数据按一定的顺序和格式构在数据库中,表是由数据按一定的顺序和格式构成的数据集合,是数据库的主要对象。每一行代成的数据集合,是数据库的主要对象。每一行代表一条记录,每一列代表记录的一个字段。表一条记录,每一列代表记录的一个字段。没有记录的表称为空表。没有记录的表称为空表。在在SQLServer2005中,每个数据库最多可包含中,每个数据库最多可包含20亿个表,每个表可包含亿个表,每个表可包含1,024个字段。每个表个字段。每个表通常都有

17、一个主关键字(又称为主码),用于唯通常都有一个主关键字(又称为主码),用于唯一地确定一条记录。在同一个表中不允许有相同一地确定一条记录。在同一个表中不允许有相同名称的字段。名称的字段。创建表创建表对于具体的某一个表,在创建之前,需要确定表对于具体的某一个表,在创建之前,需要确定表的下列特征:的下列特征:表要包含的数据的类型;表要包含的数据的类型;表中的列数,每一列中数据的类型和长度(如果必要);表中的列数,每一列中数据的类型和长度(如果必要);哪些列允许空值;哪些列允许空值;是否要使用以及何处使用约束、默认设置和规则;是否要使用以及何处使用约束、默认设置和规则;所需索引的类型,哪里需要索引,哪

18、些列是主键,哪些所需索引的类型,哪里需要索引,哪些列是主键,哪些是外键。是外键。创建表有两种方法:一种是在创建表有两种方法:一种是在SQLServerManagementStudio中创建表,另一种是利用中创建表,另一种是利用Transact-SQL语句创建表。语句创建表。创建表利用SQLServerManagementStudio创建表以下表所示的学生信息表结构为例,说明如何利用以下表所示的学生信息表结构为例,说明如何利用SSMS在数据库在数据库TEACHINGDB中创建表。中创建表。列名数据类型长度是否为空说明学号char10否主码姓名char8否性别char2否出生日期datetime是

19、专业varchar30是电话char15是电子邮箱varchar30是创建表利用SQLServerManagementStudio创建表(1)启动启动SQLServerManagementStudio,连接到服,连接到服务器。在务器。在“对象资源管理器对象资源管理器”中,展开要新建表的数据中,展开要新建表的数据库库TEACHINGDB。(2)右击右击“表表”项,在快捷菜单里选择项,在快捷菜单里选择“新建表新建表”命令。命令。创建表利用SQLServerManagementStudio创建表(3)弹出如图弹出如图5.1所示的所示的“表设计器表设计器”窗口。在其上半部分窗口。在其上半部分对每一列依

20、次输入列名、数据类型对每一列依次输入列名、数据类型(包括列长包括列长)及允许空否及允许空否等基本属性,在表设计器窗口下半部分的列属性,指定列等基本属性,在表设计器窗口下半部分的列属性,指定列的详细属性。的详细属性。(4)选中要设置为主键的列选中要设置为主键的列(如学号如学号),右击。在弹出的快捷,右击。在弹出的快捷菜单中选择菜单中选择“设置主键设置主键”命令,或单击表设计工具栏上的命令,或单击表设计工具栏上的“设置主键设置主键”按钮按钮,或执行,或执行“表设计器表设计器”菜单下的菜单下的“设置主键设置主键”命令,将其设置为主键。命令,将其设置为主键。(5)定义好表中的所有列后,单击保存按钮或定

21、义好表中的所有列后,单击保存按钮或“文件文件”菜单菜单中的中的“保存表名保存表名”命令,在弹出的命令,在弹出的“选择名称选择名称”对话框中,对话框中,为该表键入一个名称,单击为该表键入一个名称,单击“确定确定”按钮。按钮。图5.1表设计器创建表利用Transact-SQL语句创建数据表CREATETABLE的语法格式如下:的语法格式如下:CREATETABLEdatabase_name.owner.|owner.table_name(|column_nameAScomputed_column_expression|,n)ONfilegroup|“default”TEXTIMAGE_ONfile

22、group|“default”创建表利用Transact-SQL语句创建数据表参数说明:参数说明:database_name:用于指定所创建表的数据库名称。:用于指定所创建表的数据库名称。database_name必须是现有数据库的名称。如果不指定数据必须是现有数据库的名称。如果不指定数据库,库,database_name默认为当前数据库。默认为当前数据库。owner:用于指定新建表的所有者的用户名,:用于指定新建表的所有者的用户名,owner必须是必须是database_name所指定的数据库中的现有用户名,所指定的数据库中的现有用户名,owner默默认为当前注册用户名。认为当前注册用户名。

23、table_name:用于指定新建表的名称。表名必须符合标识符:用于指定新建表的名称。表名必须符合标识符规则。表名最多不能超过规则。表名最多不能超过128个字符。个字符。column_name:用于指定新建表的列名。:用于指定新建表的列名。computed_column_expression:用于指定计算列的列值表:用于指定计算列的列值表达式。表达式可以是列名、常量、变量、函数等或它们的组合,达式。表达式可以是列名、常量、变量、函数等或它们的组合,所谓计算列是一个虚拟的列它的值并不实际存储在表中而是通所谓计算列是一个虚拟的列它的值并不实际存储在表中而是通过对同一个表中其它列进行某种计算而得到的

24、结果。过对同一个表中其它列进行某种计算而得到的结果。创建表利用Transact-SQL语句创建数据表ONfilegroup|“default”:用于指定存储表的文件组:用于指定存储表的文件组名。如果指定名。如果指定filegroup,则表将存储在指定的文件组中,则表将存储在指定的文件组中。数据库中必须存在该文件组。如果使用了。数据库中必须存在该文件组。如果使用了DEFAULT选选项,或者省略了项,或者省略了ON子句,则新建的表会存储在默认的文子句,则新建的表会存储在默认的文件组中。件组中。TEXTIMAGE_ON:用于指定:用于指定text、ntext和和image列的列的数据存储的文件组。如

25、果表中没有数据存储的文件组。如果表中没有text、ntext或或image列,则不能使用列,则不能使用TEXTIMAGE_ON。如果没有指定。如果没有指定TEXTIMAGE_ON子句,则子句,则text、ntext和和image列的数列的数据将与数据表存储在相同的文件组中。据将与数据表存储在相同的文件组中。创建表利用Transact-SQL语句创建数据表包含的内容如下:包含的内容如下::=column_namedata_typeCONSTRAINTconstraint_nameNULL|NOTNULLPRIMARYKEY|UNIQUEFOREIGNKEY(column)REFERENCESre

26、f_table(ref_column)DEFAULTconstant_expression|IDENTITY(seed,increment)CHECK(check_expression)n创建表利用Transact-SQL语句创建数据表包含的内容如下:包含的内容如下::=CONSTRAINTconstraint_namePRIMARYKEY|UNIQUE(columnASC|DESC,.n)|FOREIGNKEY(column)REFERENCESref_table(ref_column),n注意:使用Transact-SQL语句创建表时,如果不在语句中指明owner,应先打开其所在的数据库。

27、打开方式如下:USE数据库名称创建表利用Transact-SQL语句创建数据表【例【例5-2】在】在TEACHINGDB数据库中建立数据库中建立“课程课程”表,表结构如下表所示。表,表结构如下表所示。列名数据类型长度是否为空说明课号char8否主码课程名varchar30否类别char8否先行课char8是学时tinyint是创建表利用Transact-SQL语句创建数据表CREATETABLETEACHINGDB.DBO.课程课程(课号课号CHAR(8)CONSTRAINTC1PRIMARYKEY,课程名课程名VARCHAR(30)CONSTRAINTC2NOTNULL,类别类别CHAR(8

28、)NOTNULL,先行课先行课CHAR(8)CONSTRAINTC3REFERENCES课程课程(课号课号),学时学时TINYINTCONSTRAINTC4check(学时学时=100)GO说明说明:“TEACHINGDB.DBO.课程课程”可以写成:可以写成:TEACHINGDB.课程。课程。如果表名前不加数据库名限定,则需要用如果表名前不加数据库名限定,则需要用USE将数据库将数据库TEACHINGDB指定为当前数据库。如下所示:指定为当前数据库。如下所示:创建表利用Transact-SQL语句创建数据表USETEACHINGDBGOCREATETABLE课程课程(课号课号CHAR(8)P

29、RIMARYKEY,课程名课程名VARCHAR(30)NOTNULL,类别类别CHAR(8)NOTNULL,先行课先行课CHAR(8)REFERENCES课程课程(课号课号),学时学时TINYINTcheck(学时学时=100)GO修改表修改表当数据表的结构创建完成后,用户还可以根据实当数据表的结构创建完成后,用户还可以根据实际需要随时更改表结构。用户可以增加、删除和际需要随时更改表结构。用户可以增加、删除和修改字段,更改数据表名称等。修改字段,更改数据表名称等。修改表结构有两种方法:一是在修改表结构有两种方法:一是在SQLServerManagementStudio中进行修改,另一种是利用中

30、进行修改,另一种是利用T-SQL语句进行表结构修改。语句进行表结构修改。修改表在SQLServerManagementStudio中修改表(1)启动启动SQLServerManagementStudio后,在对象资后,在对象资源管理器中展开其中的树形目录,找到要修改结构的数源管理器中展开其中的树形目录,找到要修改结构的数据表。据表。(2)若要修改数据表名,可右击数据表,在弹出的快捷菜若要修改数据表名,可右击数据表,在弹出的快捷菜单中选择单中选择“重命名重命名”命令。如图命令。如图5.2所示。所示。(3)若要对表中的列进行插入、删除等操作,右击数据表若要对表中的列进行插入、删除等操作,右击数据表

31、的快捷菜单中选择的快捷菜单中选择“修改修改”命令,打开表设计器窗口。命令,打开表设计器窗口。(4)用表设计器向表中添加列、修改列的数据类型、列的用表设计器向表中添加列、修改列的数据类型、列的数据长度、列的精度、列的小数位数、列是否可为空。数据长度、列的精度、列的小数位数、列是否可为空。与创建表时相同。与创建表时相同。(5)若要修改数据表属性,可以执行若要修改数据表属性,可以执行“视图视图”菜单下的菜单下的“属性窗口属性窗口”命令,在打开的属性窗口中进行修改。命令,在打开的属性窗口中进行修改。图5.2右击数据表快捷菜单图5.3修改表结构和属性修改表使用T-SQL语句修改表利用利用Transact

32、-SQL语句语句ALTERTABLE的命令,的命令,可以更改、添加或删除列和约束,从而修改表的可以更改、添加或删除列和约束,从而修改表的定义。语法格式如下:定义。语法格式如下:ALTERTABLEtable_nameALTERCOLUMNcolumn_name -修改已有列的属性new_data_type(precision,scale)NULL|NOTNULL|ADD-增加新列|,n|DROPCONSTRAINTconstraint_name-删除约束|COLUMNcolumn_name-删除列,n修改表使用T-SQL语句修改表【例【例5-4】修改学生表的】修改学生表的“姓名姓名”字段,使该

33、字段的数据类字段,使该字段的数据类型为型为char(10),允许为空。,允许为空。ALTERTABLE学生学生ALTERCOLUMN姓名姓名CHAR(10)NULLGO【例【例5-5】给学生表增加年龄列,其为一计算列,】给学生表增加年龄列,其为一计算列,值为当前年份减去出生日期年份。值为当前年份减去出生日期年份。ALTERTABLE学生学生ADD年龄年龄ASYEAR(GETDATE()-YEAR(出生日期出生日期)GO【例【例5-6】删除课程表中学时的】删除课程表中学时的CHECK约束。约束。ALTERTABLE课程课程DROPchk_hours修改表使用T-SQL语句修改表【例【例5-7】给

34、课程表中的学时添加】给课程表中的学时添加CHECK约束。约束。ALTERTABLE课程课程ADDCONSTRAINTchk_hoursCHECK(学时学时BETWEEN0AND100)数据管理数据管理表的基本结构建好后,表内没有数据。可以在表的基本结构建好后,表内没有数据。可以在SQLServerManagementStudio中给表输入数中给表输入数据、修改和删除数据,也可以利用据、修改和删除数据,也可以利用T-SQL语句完语句完成相应功能。成相应功能。数据管理在SQLServerManagementStudio中管理数据(1)在在“对象资源管理器对象资源管理器”窗口中,展开数据库和表,右窗

35、口中,展开数据库和表,右键单击表名,在弹出的快捷菜单中选择键单击表名,在弹出的快捷菜单中选择“打开表打开表”命令,命令,打开如图打开如图5.4所示的数据表窗口。所示的数据表窗口。(2)在数据表窗口,依次按照表结构的要求为每一列输入在数据表窗口,依次按照表结构的要求为每一列输入数据。每输入完一行,系统会自动进入下一行的输入状数据。每输入完一行,系统会自动进入下一行的输入状态。在输入过程中,要针对不同的数据类型输入合法的态。在输入过程中,要针对不同的数据类型输入合法的数据。如果输入不合规则的数据,系统不接受。需要重数据。如果输入不合规则的数据,系统不接受。需要重新输入该列数据。新输入该列数据。(3

36、)输入数据完毕,单击输入数据完毕,单击“关闭关闭”按钮,如果是第一次输按钮,如果是第一次输入数据,系统提示保存数据。入数据,系统提示保存数据。(4)修改数据在窗口中直接修改。修改数据在窗口中直接修改。(5)若删除一行,右击删除行左侧灰色按钮,在快捷菜单若删除一行,右击删除行左侧灰色按钮,在快捷菜单中选中选“删除删除”命令。命令。(6)重复上述过程完成数据输入、修改、删除等管理。重复上述过程完成数据输入、修改、删除等管理。图5.4数据输入窗口数据管理利用Transact-SQL命令插入数据T-SQL语句语句INSERT用于向表中插入数据。语法格式如下:用于向表中插入数据。语法格式如下:INSER

37、TINTO表名(列名列表)VALUES(值列表)语法注释:语法注释:INTO:一个可选的关键字,可以将它用在:一个可选的关键字,可以将它用在INSERT和目标表和目标表之间。之间。如果如果“值列表值列表”中给出了表中所有列的值且顺序与表中列的顺中给出了表中所有列的值且顺序与表中列的顺序相同,则序相同,则“列名列表列名列表”可以省略。可以省略。若只需要插入某条记录的部分列值,则必须在若只需要插入某条记录的部分列值,则必须在“列名列表列名列表”中中给出列名,且给出列名,且“列名列表列名列表”中的每个列都必须在中的每个列都必须在“值列表值列表”中中给出值。没有在给出值。没有在“列名列表列名列表”中出

38、现的列取默认值中出现的列取默认值(如果为列如果为列定义了定义了DEFAULT)或或NULL,若该列定义为,若该列定义为NOTNULL则出错。则出错。“值列表值列表”中的值可以是表达式。中的值可以是表达式。具有缺省值的列,具有缺省值的列,可以使用可以使用DEFAULT(缺省)关键字来代替(缺省)关键字来代替插入的数值。插入的数值。数据管理利用Transact-SQL命令插入数据【例【例5-8】向学生表中插入一条记录】向学生表中插入一条记录(0920910201,曹洋宇曹洋宇,男男,19900820,电子电子INSERT学生学生(学号学号,姓名姓名,性别性别,出生日期出生日期,专业专业,电话电话,

39、电子邮箱电子邮箱)VALUES(0920910201,曹洋宇曹洋宇,男男,19900820,电子电子或或INSERT学生学生VALUES(0920910201,曹洋宇曹洋宇,男男,19900820,电子电子【例【例5-9】向学生表中插入一条记录】向学生表中插入一条记录(0820910204,李显李显,男男,075185345428),此记录的其他列值为,此记录的其他列值为NULL。INSERT学生学生(学号学号,姓名姓名,性别性别,电话电话)VALUES(0820910204,李显李显,男男,075185345428);数据管理利用Transact-SQL命令插入数据INSERT语句的第二种语

40、法格式为:语句的第二种语法格式为:INSERTINTO目标表名目标表名(列名列表列名列表1)SELECTFROMWHERE说明:该语句将说明:该语句将SELECT查询的结果插入到目标表中。查询的结果插入到目标表中。其中,其中,“列名列表列名列表1”中的列名与中的列名与“列名列表列名列表2”中的列名中的列名必须数据类型和个数一一对应,如果必须数据类型和个数一一对应,如果“列名列表列名列表2”包含包含了了“列名列表列名列表1”中的所有列的数据,则中的所有列的数据,则“列名列表列名列表1”可可以省略。以省略。【例【例5-10】新建一个】新建一个“学习成绩学习成绩”表,并将所有成绩大表,并将所有成绩大

41、于等于于等于80分的记录插入分的记录插入“学习成绩学习成绩”表中。表中。数据管理利用Transact-SQL命令插入数据【例【例5-10】新建一个】新建一个“学习成绩学习成绩”表,并将所有表,并将所有成绩大于等于成绩大于等于80分的记录插入分的记录插入“学习成绩学习成绩”表中。表中。CREATETABLE学习成绩学习成绩(学号学号CHAR(10),姓名姓名CHAR(10),课程名课程名VARCHAR(30),成绩成绩tinyint)INSERTINTO学习成绩学习成绩(学号学号,姓名姓名,课程名课程名,成绩成绩)SELECT学生学生.学号学号,姓名姓名,课程名课程名,成绩成绩FROM学生学生,

42、课程课程,选课选课WHERE学生学生.学号学号=选课选课.学号学号AND课程课程.课号课号=选课选课.课号课号AND成绩成绩=80数据管理利用Transact-SQL命令修改数据T-SQL中提供中提供UPDATE语句修改表中数据。语句修改表中数据。UPDATE语句的语法格式如下:语句的语法格式如下:UPDATESET,.nwhere说明:说明:(1)如果没有如果没有WHERE子句,则子句,则UPDATE将会修改表中的将会修改表中的每一行数据。每一行数据。(2)一次可以修改多个列的值。一次可以修改多个列的值。【例【例5-11】将】将“选课选课”表中课程号表中课程号“10910143”的成绩加上的

43、成绩加上5分。分。UPDATE选课选课SET成绩成绩=成绩成绩+5WHERE课号课号=10910143数据管理利用Transact-SQL命令修改数据【例【例5-12】将】将“学生学生”表中学号为表中学号为“0810910216”的学生的姓名更改为的学生的姓名更改为“史鹏飞史鹏飞”,电话修改为电话修改为“。UPDATE学生学生SET姓名姓名=史鹏飞史鹏飞,电话学号电话学号=0810910216【例【例5-13】将】将“课程课程”表中所有课程的表中所有课程的“学时学时”都增都增加加10。UPDATE课程课程SET学时学时=学时学时+10数据管理利用Transact-SQL命令修改数据UPDATE

44、语句的另一种语法格式为:语句的另一种语法格式为:UPDATESET=,nFROMWHERE说明:与前面格式不同的是,更新条件和表达式中可以说明:与前面格式不同的是,更新条件和表达式中可以包含源表的列,实现用源表的数据修改目标表的数据,包含源表的列,实现用源表的数据修改目标表的数据,并可以用源表的数据作为修改目标表的条件。并可以用源表的数据作为修改目标表的条件。【例【例5-14】将】将“选课选课”表中所有选修表中所有选修“数据库数据库”课程的成绩加上课程的成绩加上5分。分。UPDATE选课选课SET成绩成绩=成绩成绩+5FROM课程课程WHERE选课选课.课号课号=课程课程.课号课号AND课程名

45、课程名=数据库数据库数据管理利用Transact-SQL命令删除数据T-SQL提供提供DELETE语句删除表中数据,语法格语句删除表中数据,语法格式如下:式如下:DELETEFROMWHERE说明:该语句删除表中满足条件的记录。如果省略条件,说明:该语句删除表中满足条件的记录。如果省略条件,则删除所有记录。则删除所有记录。【例【例5-15】将】将“学生学生”表中学号为表中学号为“0820910204”的学生记录删除。的学生记录删除。DELETE学生学生WHERE学号学号=0820910204数据管理利用Transact-SQL命令删除数据T-SQL支持利用支持利用TRUNCATETABLE语句

46、清空表语句清空表中数据。语法格式如下:中数据。语法格式如下:TRUNCATETABLE说明:说明:TRUNCATETABLE与不含有与不含有WHERE子句的子句的DELETE语句在功能上相同。但是,语句在功能上相同。但是,TRUNCATETABLE速度更快,并且使用更少的系统资源和事务日志速度更快,并且使用更少的系统资源和事务日志资源。资源。【例【例5-16】清空】清空“选课选课”表中的数据。表中的数据。TRUNCATETABLE选课删除表删除表若不在需要使用某个数据表时,可以将其从数据若不在需要使用某个数据表时,可以将其从数据库中删除。库中删除。删除表就是将表中数据和表的结构从数据库中永删除

47、表就是将表中数据和表的结构从数据库中永久性地删除。久性地删除。表的删除不可恢复。表的删除不可恢复。删除表有两种方法:一是在删除表有两种方法:一是在SQLServerManagementStudio中删除表,另一种是利用中删除表,另一种是利用T-SQL语句删除表。语句删除表。删除表在SQLServerManagementStudio中删除表(1)启动启动SQLServerManagementStudio,连接到数据,连接到数据库实例。库实例。(2)在对象资源管理器中,展开树形目录,选取要删除的在对象资源管理器中,展开树形目录,选取要删除的数据表。右击该表名,在弹出的快捷菜单中选择数据表。右击该表

48、名,在弹出的快捷菜单中选择“删除删除”命令。在弹出的命令。在弹出的“删除对象删除对象”对话框中,会出现要删对话框中,会出现要删除的表,可单击除的表,可单击“确定确定”按钮。按钮。(3)如果出现如果出现“删除失败删除失败”的消息,那表示目前不能删除的消息,那表示目前不能删除该数据表,原因可能是该数据表正在被使用,或与其他该数据表,原因可能是该数据表正在被使用,或与其他表存在约束关系。此时可在表存在约束关系。此时可在“删除对象删除对象”对话框中,单对话框中,单击击“显示依赖关系显示依赖关系”按钮,在弹出的按钮,在弹出的“依赖关系依赖关系”对话对话框中,可看到该表的依赖关系。若存在依赖关系,则数框中

49、,可看到该表的依赖关系。若存在依赖关系,则数据表不能被删除,除非先删除依赖于该数据表的关系。据表不能被删除,除非先删除依赖于该数据表的关系。删除表利用T-SQL语句删除表利用利用Transact-SQL语句语句DROPTABLE就可删除就可删除数据表定义及表的所有数据、索引、触发器、约数据表定义及表的所有数据、索引、触发器、约束和指定的权限。束和指定的权限。语法格式如下:语法格式如下:DROPTABLEdatabase_name.owner.|owner.table_name,.n;需要注意的是,不能使用需要注意的是,不能使用DROPTABLE删除被删除被FOREIGNKEY约束引用的表。必须

50、先删除引用约束引用的表。必须先删除引用FOREIGNKEY约束或引用表。如果要在同一个约束或引用表。如果要在同一个DROPTABLE语句中删除引用表以及包含主键的语句中删除引用表以及包含主键的表,则必须先列出引用表。表,则必须先列出引用表。删除表利用T-SQL语句删除表可以在任何数据库中删除多个表。如果一个要删可以在任何数据库中删除多个表。如果一个要删除的表引用了另一个也要删除的表的主键,则必除的表引用了另一个也要删除的表的主键,则必须先列出包含该外键的引用表,然后再列出包含须先列出包含该外键的引用表,然后再列出包含要引用的主键的表。要引用的主键的表。【例【例5-17】删除】删除TEACHIN

51、GDB数据库中的数据库中的“课程课程”和和“选课选课”表。表。DROPTABLE课程课程,选课选课-错误错误DROPTABLE选课选课,课程课程-正确正确数据的完整性数据完整性类型数据库的完整性是指数据的正确性和相容性,是数据库的完整性是指数据的正确性和相容性,是为防止数据库中存在不符合语义规定的数据,防为防止数据库中存在不符合语义规定的数据,防止因错误信息的输入、输出而造成无效的操作或止因错误信息的输入、输出而造成无效的操作或错误信息而提出的,数据完整性在数据库管理系错误信息而提出的,数据完整性在数据库管理系统中是十分重要的。统中是十分重要的。根据数据完整性所作用的数据库对象和范围不同,根据

52、数据完整性所作用的数据库对象和范围不同,可以将其分为以下几类:可以将其分为以下几类:域域(Domain)完整性完整性域就是指表中的列,域完整性要求列的数值具有正确的类域就是指表中的列,域完整性要求列的数值具有正确的类型、格式和有效值范围,并确定是否允许有空值。型、格式和有效值范围,并确定是否允许有空值。域完整性的常见实现方法有默认值域完整性的常见实现方法有默认值(DEFAULT)、检查、检查(CHECK)、外键、外键(FOREIGNKEY)、数据类型、数据类型(DataType)等等约束和默认约束和默认(Default)、规则、规则(Rule)等数据库对象。等数据库对象。数据的完整性数据完整性

53、类型实体实体(Entity)完整性完整性实体对应的是行,实体完整性要求表中的每一行在表中是实体对应的是行,实体完整性要求表中的每一行在表中是唯一的,表中不能有重复的行存在。唯一的,表中不能有重复的行存在。实体完整性的实现方法有主键约束实体完整性的实现方法有主键约束(PRIMARYKEY)、唯一、唯一性约束性约束(UNIQUE)、唯一索引、唯一索引(UNIQUEINDEX)和标识列和标识列(IDENTITY)。引用完整性引用完整性引用完整性也称为参照完整性。引用完整性也称为参照完整性。引用完整性可以保证两个引用表间的数据的一致性,即保引用完整性可以保证两个引用表间的数据的一致性,即保证两个表的主

54、键与外键之间定义的数据完整性。证两个表的主键与外键之间定义的数据完整性。实现引用完整性的实现方法有外键约束实现引用完整性的实现方法有外键约束(FOREIGNKEY)、触发器触发器(TRIGGER)和存储过程和存储过程(PROCEDURE)。数据的完整性数据完整性类型用户定义完整性用户定义完整性是用户根据实际应用中的需求而自行定义的数据完整性,是用户根据实际应用中的需求而自行定义的数据完整性,不属于上面三种完整性的范畴。不属于上面三种完整性的范畴。用户定义完整性的实现机制有规则用户定义完整性的实现机制有规则(RULE)、触发器、触发器(TRIGGER)和存储过程和存储过程(PROCEDURE)及

55、创建数据表时的所有及创建数据表时的所有约束约束(CONSTRAINT)。数据的完整性约束约束约束(Constraint)是定义表中列、行及表间允许是定义表中列、行及表间允许值的规则,是强制实施完整性的标准机制。值的规则,是强制实施完整性的标准机制。在在SQLServer2005中,有多种约束,可按不同中,有多种约束,可按不同方式进行分类。方式进行分类。按约束的应用范围不同,约束可分为列级约束和表级约按约束的应用范围不同,约束可分为列级约束和表级约束。列级约束是数据表中列定义的一部分,只能作用于束。列级约束是数据表中列定义的一部分,只能作用于表中的一列。表级约束独立于列定义之外,作用于表中表中的

56、一列。表级约束独立于列定义之外,作用于表中的多列。当一个约束中必须包含多个列时,必须使用表的多列。当一个约束中必须包含多个列时,必须使用表级约束。级约束。按约束的作用不同,约束可分为不允许空约束按约束的作用不同,约束可分为不允许空约束(NOTNULL)、主键约束、主键约束(PRIMARYKEY)、唯一性约束、唯一性约束(UNIQUE)、检查约束、检查约束(CHECK)、默认值约束、默认值约束(DEFAULT)和外键约束和外键约束(FOREIGNKEY)。数据的完整性约束除不允许空约束外,每个约束都有一个名称,称除不允许空约束外,每个约束都有一个名称,称之为约束名。对于约束名的命名推荐为之为约束

57、名。对于约束名的命名推荐为type_table_column,其中,其中type表示约束的类型,表示约束的类型,table为表名,为表名,column为列名,例如为列名,例如CHK_学生学生_性别。性别。在在SQLServerManagementStudio中创建约束中创建约束创建创建NOTNULL约束约束在在SQLServerManagementStudio的的“对象资源管理对象资源管理器器”窗口中右击需要创建约束的表,在快捷菜单中执行窗口中右击需要创建约束的表,在快捷菜单中执行“修改修改”命令。在弹出窗体中,对表中的列的命令。在弹出窗体中,对表中的列的“允许空允许空”项项进行选择即可。设置

58、完成后单击进行选择即可。设置完成后单击完成设置。完成设置。数据的完整性约束创建创建PRIMARYKEY约束约束打开打开SQLServerManagementStudio,进入新建表或,进入新建表或修改表状态。修改表状态。右键单击要设置右键单击要设置PRIMARYKEY约束的列,在弹出的快捷约束的列,在弹出的快捷菜单中选择菜单中选择“设置主键设置主键”命令命令(也可以选择工具栏上的也可以选择工具栏上的按钮按钮),创建主键约束。,创建主键约束。若要设置多列的组合的主键,可以按若要设置多列的组合的主键,可以按CTRL键再单击各列键再单击各列同时选中主键中的列,然后右击选择同时选中主键中的列,然后右击

59、选择”设置主键设置主键“命令。命令。单击单击按钮完成主键的创建。如果要删除主键,右键单按钮完成主键的创建。如果要删除主键,右键单击已创建主键的列,在弹出的快捷菜单中选择击已创建主键的列,在弹出的快捷菜单中选择“移除主键移除主键”命令。命令。数据的完整性约束创建创建FOREIGNKEY约束约束打开打开SQLServerManagementStudio,进入新建表或,进入新建表或修改表状态。修改表状态。右键单击表的编辑区域,在弹出的快捷菜单中选择右键单击表的编辑区域,在弹出的快捷菜单中选择“关系关系”命令,或单击工具栏上的关系按钮命令,或单击工具栏上的关系按钮。在弹出的在弹出的“外键关系外键关系”

60、对话框中,单击对话框中,单击“添加添加”按钮,然按钮,然后选择后选择“表和列规范表和列规范”后的后的按钮,如图所示。按钮,如图所示。在弹出的在弹出的“表和列表和列”对话框中,修改约束名,分别选择主对话框中,修改约束名,分别选择主键表和外键表及共有的列。键表和外键表及共有的列。单击单击“确定确定”按钮,外键约束创建完毕。按钮,外键约束创建完毕。数据的完整性约束创建创建UNIQUE约束约束打开打开SQLServerManagementStudio,进入新建表或,进入新建表或修改表状态。修改表状态。右键单击表的编辑区域,在弹出的快捷菜单中选择右键单击表的编辑区域,在弹出的快捷菜单中选择“索引索引/键

61、键”命令,或单击工具栏上的命令,或单击工具栏上的“管理索引和键管理索引和键”按钮按钮。在弹出的在弹出的“索引索引/键键”对话框中,单击对话框中,单击“添加添加”按钮,然按钮,然后在后在“常规常规”下的下的“列列”行右侧选择创建约束的列,在行右侧选择创建约束的列,在“标识标识”下的名称行右侧输入约束名,在下的名称行右侧输入约束名,在“常规常规”下的下的“是是唯一的唯一的”后的列表框中选择后的列表框中选择“是是”,单击,单击“关闭关闭”按钮即按钮即可。可。数据的完整性约束创建创建CHECK约束约束打开打开SQLServerManagementStudio,进入新建表或,进入新建表或修改表状态。修改

62、表状态。右键单击表的编辑区域,在弹出的快捷菜单中选择右键单击表的编辑区域,在弹出的快捷菜单中选择“CHECK约束约束”命令,或单击工具栏上的命令,或单击工具栏上的“管理管理CHECK约束约束”按钮按钮。在弹出的在弹出的“CHECK约束约束”对话框中,单击对话框中,单击“添加添加”按钮,按钮,然后在然后在“标识标识”下的名称行右侧修改约束名称。下的名称行右侧修改约束名称。单击单击“表达式表达式”行后的按钮。在弹出的行后的按钮。在弹出的“CHECK约束表达约束表达式式”对话框中,输入约束表达式。对话框中,输入约束表达式。单击单击“确定确定”按钮,按钮,CHECK约束创建完毕。约束创建完毕。数据的完

63、整性约束NOTNULL约束约束列的为空性决定表中的行是否可让该列包含空值。空值列的为空性决定表中的行是否可让该列包含空值。空值(NULL)不同于零不同于零(0)、空白或长度为零的字符串、空白或长度为零的字符串(如如“”)。NULL的意思是没有输入,出现的意思是没有输入,出现NULL通常表示值未知或通常表示值未知或未定义。未定义。NOTNULL约束说明列值不允许为约束说明列值不允许为NULL。当插入或修。当插入或修改数据时,设置了改数据时,设置了NOTNULL约束的列的值不允许为空,约束的列的值不允许为空,必须存在具体的值。必须存在具体的值。可使用可使用Transact-SQL语句管理语句管理N

64、OTNULL约束。在使约束。在使用用CREATETABLE创建表和使用创建表和使用ALTERTABLE修改表修改表时,都可以创建时,都可以创建NOTNULL约束。约束。【例【例5-18】为学生表的性别字段指定】为学生表的性别字段指定NOTNULL约束。约束。ALTERTABLE学生学生ALTERCOLUMN性别性别CHAR(2)NOTNULL数据的完整性约束PRIMARYKEY约束约束(主键约束主键约束)PRIMARYKEY约束是在表中定义一个主键来唯一确定约束是在表中定义一个主键来唯一确定表中的每一行记录。主键可以定义在单列上,也可以定表中的每一行记录。主键可以定义在单列上,也可以定义在多列

65、上。主键约束强制实施实体完整性约束。义在多列上。主键约束强制实施实体完整性约束。PRIMARYKEY约束具有以下特点:约束具有以下特点:每个表最多只能定义一个每个表最多只能定义一个PRIMARYKEY约束。约束。PRIMARYKEY约束所在列不允许输入重复值。如果主键约束所在列不允许输入重复值。如果主键约束由两个或两个以上的列组成,则该组合的取值不允许约束由两个或两个以上的列组成,则该组合的取值不允许重复。重复。PRIMARYKEY约束所在列不允许取空值。约束所在列不允许取空值。PRIMARYKEY约束在指定的列上创建了一个唯一性索引,约束在指定的列上创建了一个唯一性索引,该索引可以是聚集索引

66、,也可以是非聚集索引。在默认的该索引可以是聚集索引,也可以是非聚集索引。在默认的情况下创建的是聚集索引。情况下创建的是聚集索引。数据的完整性约束定义定义PRIMARYKEY约束的基本语句格式如下:约束的基本语句格式如下:CONSTRAINT约束名约束名PRIMARYKEYCLUSTERED|NONCLUSTERED(列列,n)数据的完整性约束FOREIGNKEY约束约束(外键约束外键约束)FOREIGNKEY约束是指用于建立和加强两个表之间的联接的约束是指用于建立和加强两个表之间的联接的一列或多列,即在某一列或多列的组合上定义外键约束,这些一列或多列,即在某一列或多列的组合上定义外键约束,这些

67、列值参考某个表中的主键约束列或唯一性约束列。该约束强制列值参考某个表中的主键约束列或唯一性约束列。该约束强制参考完整性。参考完整性。定义定义PRIMARY或或UNIQUE约束的表称之为被参照表,定义约束的表称之为被参照表,定义FOREIGNKEY约束的表称之为参照表,参照表的被约束列的约束的表称之为参照表,参照表的被约束列的取值必须是被参照表的被约束列的值或为取值必须是被参照表的被约束列的值或为NULL。FOREIGNKEY约束具有以下特点:约束具有以下特点:每个表可以定义多个每个表可以定义多个FOREIGNKEY约束。约束。参照表中被约束的列必须和被参照表中被约束的列数量一致、数参照表中被约

68、束的列必须和被参照表中被约束的列数量一致、数据类型一致。据类型一致。FOREIGNKEY约束不能自动创建索引。但为了提高连接查询的约束不能自动创建索引。但为了提高连接查询的性能,应该在参照表中被约束的列上创建索引。性能,应该在参照表中被约束的列上创建索引。当向设有外键约束的表中插人记录或更新记录时,该记录中的被当向设有外键约束的表中插人记录或更新记录时,该记录中的被约束列的值必须在参考的被参照表中存在或取约束列的值必须在参考的被参照表中存在或取NULL值。值。数据的完整性约束FOREIGNKEY约束的定义格式为:约束的定义格式为:CONSTRAINT约束名约束名FOREIGNKEY(列列)RE

69、FERENCES被参照表被参照表(列列)数据的完整性约束UNIQUE约束约束UNIQUE约束定义表中的某一列或多列不能有相同的两行或多约束定义表中的某一列或多列不能有相同的两行或多行数据存在。行数据存在。每个每个UNIQUE约束都要创建一个唯一性索引来强制实体完整性约束都要创建一个唯一性索引来强制实体完整性约束。当表中已经存在主键约束时,如果需要在其他列上实现约束。当表中已经存在主键约束时,如果需要在其他列上实现实体完整性控制,由于一个表中能有一个实体完整性控制,由于一个表中能有一个PRIMARYKEY约束,约束,因此可以通过创建因此可以通过创建UNIQUE约束来实现。约束来实现。UNIQUE

70、约束具有以下特点约束具有以下特点:每个表可以定义多个每个表可以定义多个UNIQUE约束。约束。UNIQUE约束所在列不允许输入重复值。如果约束所在列不允许输入重复值。如果UNIQUE约束由两约束由两个或两个以上的列组成,则该组合的取值不允许重复。个或两个以上的列组成,则该组合的取值不允许重复。UNIQUE约束所在列允许有空值。约束所在列允许有空值。UNIQUE约束所在列不能是主键约束所在列。约束所在列不能是主键约束所在列。UNIQUE约束在指定的列上创建了一个唯一性索引,该索引可以约束在指定的列上创建了一个唯一性索引,该索引可以是聚簇索引,也可以是非聚簇索引。在默认的情况下创建的是非是聚簇索引

71、,也可以是非聚簇索引。在默认的情况下创建的是非聚簇索引。聚簇索引。数据的完整性约束UNIQUE约束与约束与PRIMARYKEY约束的异同约束的异同PRIMARYKEY约束和约束和UNIQUE约束的相同点是两种约束约束的相同点是两种约束的关键字值是不允许重复的,两种约束都是能过创建唯一的关键字值是不允许重复的,两种约束都是能过创建唯一性索引来保证实体完整性的。性索引来保证实体完整性的。PRIMARYKEY约束和约束和UNIQUE约束的不同点是约束的不同点是PRIMARYKEY约束的关键列不允许取空值,而约束的关键列不允许取空值,而UNIQUE约束的关键列允许取空值。一个表只允许建立一个约束的关键

72、列允许取空值。一个表只允许建立一个PRIMARYKEY约束,而约束,而UNIQUE约束可以建立多个。约束可以建立多个。定义定义UNIQUE约束的语法格式为:约束的语法格式为:CONSTRAINT约束名约束名UNIQUE(列列,n)数据的完整性约束CHECK约束约束CHECK约束是用来验证用户输入某一列的数据的有效约束是用来验证用户输入某一列的数据的有效性。该约束通过列中的值来强制域的完整性,它用来指性。该约束通过列中的值来强制域的完整性,它用来指定某列可取值的集合或范围。定某列可取值的集合或范围。CHECK约束具有以下特点:约束具有以下特点:每个表可以定义多个每个表可以定义多个CHECK约束。

73、约束。可以通过在表级创建可以通过在表级创建CHECK约束,实现将一个约束,实现将一个CHECK约约束应用于多个列。束应用于多个列。CHECK约束可以参考本表中的其他列。约束可以参考本表中的其他列。CHECK约束不能放在约束不能放在IDENTITY属性的列上或者数据类型属性的列上或者数据类型为为timestamp的列上,因为这两种列都是自动插入数据的。的列上,因为这两种列都是自动插入数据的。当向设有当向设有CHECK约束的表中插入记录或更新记录时,该约束的表中插入记录或更新记录时,该记录中的被约束列的值必须满足检查约束条件,否则无法记录中的被约束列的值必须满足检查约束条件,否则无法录入。,执行删

74、除记录语句时不验证录入。,执行删除记录语句时不验证CHECK约束。约束。数据的完整性约束使用使用Transact-SQL语句中语句中CREATETABEL语句只能为语句只能为每列定义一个每列定义一个CHECK约束。定义约束。定义CHECK约束的基本语约束的基本语句格式如下:句格式如下:CONSTRAINT约束名约束名CHECK(约束表达式约束表达式)【例【例5-19】给】给TEACHINGDB数据库中学生表的电子邮数据库中学生表的电子邮箱字段添加箱字段添加CHECK约束,用于约束电子邮箱中必须有约束,用于约束电子邮箱中必须有符号符号或为或为NULL。ALTERTABLE学生学生ADDCONST

75、RAINTCHK_学生学生_电子邮箱电子邮箱CHECK(电子邮箱电子邮箱LIKE%OR电子邮箱电子邮箱isNULL)验证:验证:INSERT学生学生VALUES(1010930112,董方董方,女女,19910521,纺织纺织INSERT学生学生(学号学号,姓名姓名,性别性别,出生日期出生日期,专业专业,电话电话)VALUES(1010930112,董方董方,女女,19910521,纺织纺织数据的完整性约束DEFAULT约束约束DEFAULT约束的作用是,如果在表中的某个列上定义了约束的作用是,如果在表中的某个列上定义了默认值,那么在没有给该列提供值的情况下,使用默认默认值,那么在没有给该列提

76、供值的情况下,使用默认值来为该列提供值。值来为该列提供值。DEFAULT约束具有以下特点:约束具有以下特点:表中的每个列上只能定义一个默认值。表中的每个列上只能定义一个默认值。默认值可以是常量值、函数、默认值可以是常量值、函数、NULL等。等。默认值不能引用表中的其他列,也不能引用其他表、视图默认值不能引用表中的其他列,也不能引用其他表、视图或存储过程。或存储过程。不能对数据类型为不能对数据类型为timestamp的列或具有的列或具有IDENTITY属性属性的列创建默认值。的列创建默认值。若要修改若要修改DEFAULT约束,必须首先删除现有的约束,必须首先删除现有的DEFAULT约束,然后重新

77、创建。约束,然后重新创建。数据的完整性约束使用使用Transact-SQL创建创建DEFAULT约束的基本语法格式约束的基本语法格式为:为:CONSTRAINT约束名约束名DEFAULT默认值默认值FOR列列【例【例5-20】给学生表的性别字段添加默认值】给学生表的性别字段添加默认值“男男”。ALTERTABLE学生学生ADDCONSTRAINTDEF_学生学生_性别性别DEFAULT男男FOR性别性别验证验证INSERT学生学生(学号学号,姓名姓名,出生日期出生日期,专业专业,电话电话)VALUES(1010830312,刘明刘明,19901025,纺织纺织数据的完整性默认值默认值是一种数据

78、库对象。默认值是一种数据库对象。给某列设置默认值,除了直接设置默认值约束外,给某列设置默认值,除了直接设置默认值约束外,SQLServer2005还允许创建默认值对象。还允许创建默认值对象。一旦在数据库中创建了默认值对象,那么数据库一旦在数据库中创建了默认值对象,那么数据库中任何表的列都可以使用该对象,方法是将默认中任何表的列都可以使用该对象,方法是将默认值对象绑定到某个表的一个或多个列上或用户自值对象绑定到某个表的一个或多个列上或用户自定义的数据类型上。当向数据表插入记录时,如定义的数据类型上。当向数据表插入记录时,如果没有为绑定默认值对象的列或数据类型指定数果没有为绑定默认值对象的列或数据

79、类型指定数据,那系统将自动把指定的默认值插入到相应的据,那系统将自动把指定的默认值插入到相应的列中。列中。数据的完整性默认值默认值对象具有以下特点:默认值对象具有以下特点:在数据库内默认值名称必须是唯一的。在以相同的名称在数据库内默认值名称必须是唯一的。在以相同的名称创建新的默认值之前,必须删除原有默认值。创建新的默认值之前,必须删除原有默认值。在一个列上只有一个默认值存在。在一个列上只有一个默认值存在。如果定义的默认值大于它随后绑定的表列的允许长度,如果定义的默认值大于它随后绑定的表列的允许长度,那么它将被截断。那么它将被截断。如果列同时有默认值及与之关联的规则,则默认值不能如果列同时有默认

80、值及与之关联的规则,则默认值不能违反该规则。违反该规则。创建默认值创建默认值创建默认值使用创建默认值使用CREATEDEFAULT语句进行,格式为:语句进行,格式为:CREATEDEFAULTdefault_nameASconstant_expression数据的完整性默认值【例【例5-21】创建一个默认值对象,值为】创建一个默认值对象,值为45。CREATEDEFAULT学时数学时数AS45绑定默认值绑定默认值在创建默认值后,必须将它与特定表的列绑定后才能使在创建默认值后,必须将它与特定表的列绑定后才能使之发挥作用。用之发挥作用。用sp_bindefault存储过程绑定默认值到列。存储过程绑

81、定默认值到列。sp_bindefault存储过程的语法格式如下:存储过程的语法格式如下:sp_bindefaultdefname=default,objname=objectname【例【例5.22】将创建的默认值对象】将创建的默认值对象“学时数学时数”绑定到课程绑定到课程表的学时字段。表的学时字段。EXECsp_bindefault学时数学时数,课程课程.学时学时数据的完整性默认值解除默认值对象的绑定解除默认值对象的绑定删除默认值对象时,首先要执行删除默认值对象时,首先要执行sp_unbindefault存储存储过程,解除默认值对象的绑定,然后执行过程,解除默认值对象的绑定,然后执行DROP

82、DEFAULT语句删除默认值对象。语句删除默认值对象。解除默认值对象绑定的解除默认值对象绑定的sp_unbindefault存储过程语法存储过程语法格式如下:格式如下:sp_unbindefaultobjname= object_nameobject_name:要解除默认值绑定的列的名称。要解除默认值绑定的列的名称。【例【例5-23】将学生表学时字段上的默认值解除绑定。】将学生表学时字段上的默认值解除绑定。EXECsp_unbindefault课程课程.学时学时数据的完整性默认值删除默认值对象删除默认值对象当不再需要所定义的默认值对象时,可以将其永久地删当不再需要所定义的默认值对象时,可以将其

83、永久地删除。除。删除默认值对象的语法格式为:删除默认值对象的语法格式为:DROPDEFAULTdefault_name,n【例【例5-24】删除默认值对象】删除默认值对象“学时数学时数”。数据的完整性规则规则是一种数据库对象,它用于执行一些与检查规则是一种数据库对象,它用于执行一些与检查约束相同的功能。约束相同的功能。规则要绑定在列上或用户自定义的数据类型上,规则要绑定在列上或用户自定义的数据类型上,当向数据表插入记录时,如果表中有绑定有规则当向数据表插入记录时,如果表中有绑定有规则对象的列或用户自定义的数据类型,那么所插入对象的列或用户自定义的数据类型,那么所插入的数据必须符合所定义的规则对

84、象的要求。的数据必须符合所定义的规则对象的要求。数据的完整性规则规则具有以下特点:规则具有以下特点:规则只能在当前的数据库中创建。规则只能在当前的数据库中创建。列或用户自定义的数据类型上只能被绑定一个规则。列或用户自定义的数据类型上只能被绑定一个规则。列可以同时有一个规则以及一个或多个检查约束与其相列可以同时有一个规则以及一个或多个检查约束与其相关联。关联。规则不能绑定到系统数据类型上。规则不能绑定到系统数据类型上。规则对已经输入到表中的数据无效。如果希望一个规则规则对已经输入到表中的数据无效。如果希望一个规则限制表中的所有数据,就要在数据输入到表中之前就把限制表中的所有数据,就要在数据输入到

85、表中之前就把定义好的规则绑定到列上或用户自定义的数据类型上。定义好的规则绑定到列上或用户自定义的数据类型上。数据的完整性规则创建规则创建规则使用使用CREATERULE语句创建规则,语法格式如下:语句创建规则,语法格式如下:CREATERULErule_nameAScondition_expressioncondition_expression:定义规则的条件。规则可以是定义规则的条件。规则可以是WHERE子句中任何有效的表达式,并且可以包括诸如子句中任何有效的表达式,并且可以包括诸如算术运算符、关系运算符和谓词算术运算符、关系运算符和谓词(如如IN、LIKE、BETWEEN)。定义规则的表达

86、式不能包含数据库对象名。定义规则的表达式不能包含数据库对象名或表的列名。被绑定的列在规则表达式使用形式参数表或表的列名。被绑定的列在规则表达式使用形式参数表示,参数前要加符号示,参数前要加符号“”。【例【例5-25】创建一个】创建一个“课程类别课程类别”的规则,规定课程的的规则,规定课程的类别只能是必修、限选、任选。类别只能是必修、限选、任选。CREATERULE课程类别课程类别ASvalueIN(必修必修,限选限选,任选任选)数据的完整性规则【例【例5-26】创建一个名为】创建一个名为range_rule的规则,该规则要的规则,该规则要求插入到列中的数据范围在求插入到列中的数据范围在($10

87、00$2000)之间。之间。CREATERULErange_ruleASrange=$1000ANDrange=$2000绑定规则绑定规则要使规则生效,必须用要使规则生效,必须用sp_bindrule将其与表中的列绑将其与表中的列绑定。在绑定规则时,应当特别注意,规则中参数的数据定。在绑定规则时,应当特别注意,规则中参数的数据类型要与表列的数据类型一致。绑定规则使用系统存储类型要与表列的数据类型一致。绑定规则使用系统存储过程过程sp_bindrule实现,其语句格式为:实现,其语句格式为:sp_bindrulerulename=rule,objname=object_name数据的完整性规则【

88、例【例5-27】将】将“课程类别课程类别”规则绑定到课程表的类别字规则绑定到课程表的类别字段上。段上。EXECsp_bindrule课程类别课程类别,课程课程.类别类别解除列上绑定的规则解除列上绑定的规则如果某条规则已经与列或者用户定义数据类型绑定,要如果某条规则已经与列或者用户定义数据类型绑定,要删除规则,首先要解除规则的绑定,解除规则的绑定删除规则,首先要解除规则的绑定,解除规则的绑定sp_unbindrule存储过程。存储过程。sp_unbindrule存储过程的语法格式如下存储过程的语法格式如下:sp unbindrule objnam= object_name【例【例5-28】将课程

89、表中类别列上绑定的规则解除绑定。】将课程表中类别列上绑定的规则解除绑定。EXECsp_unbindrule课程课程.类别类别数据的完整性规则删除规则删除规则解除规则绑定后解除规则绑定后,就可以用就可以用DROPRULE语句删除规则。语句删除规则。DROPRULE语句的语法格式如下:语句的语法格式如下:DROPRULE规则名规则名,n【例【例5-29】删除规则】删除规则“课程类别课程类别”。DROPRULE课程类别课程类别规则和规则和CHECK约束的对比约束的对比规则用于执行一些与检查约束相同的功能。使用检查约规则用于执行一些与检查约束相同的功能。使用检查约束是限制列值的首选标准方法,因为检查约束比规则使束是限制列值的首选标准方法,因为检查约束比规则使用更加简单。一个列只能应用一个规则,但可以应用多用更加简单。一个列只能应用一个规则,但可以应用多个检查约束。检查约束被指定为个检查约束。检查约束被指定为CREATETABLE语句语句的一部分,而规则是作为单独的对象创建,然后绑定到的一部分,而规则是作为单独的对象创建,然后绑定到列上。列上。数据的完整性规则

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号