数据表的管理与使用-完_第1页
数据表的管理与使用-完_第2页
数据表的管理与使用-完_第3页
数据表的管理与使用-完_第4页
数据表的管理与使用-完_第5页
已阅读5页,还剩102页未读 继续免费阅读

下载本文档

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

文档简介

1、第五章 数据表的管理与使用本章主要内容1 5.1 数据类型数据类型25.2 创建表创建表35.3 修改表修改表45.4 删除表删除表55.5 数据管理数据管理65.6 数据完整性数据完整性5 数据表的管理与使用 SQL Server SQL Server 的表是最重要的数据库对象,用户数据分别存放在各个表中,对数据的增加、删除、修改和查询等都是通过表的操作来实现的。本章主要内容1 5.1 数据类型数据类型25.2 创建表创建表35.3 修改表修改表45.4 删除表删除表55.5 数据管理数据管理65.6 数据完整性数据完整性5.1 数据类型 在创建表时,必须为表中的每列指派一种数据类型,数据类

2、型确定了该列数据的取值范围,它决定了数据在计算机中的存储格式、存储长度等属性。SQL Server数据类型分为系统数据类型和用户自定义数据类型。SQL Server2008中常用的系统数据类型如表5.1所示。5.1 数据类型表5.1 SQL Server2008中常用的系统数据类型分类分类说明说明数据类型数据类型数字数据整数型bigint,int,smallint,tinyint精确数值型decimal,numeric浮点型float,real货币型money,smallmoney位型bit字符数据字符型char,varchar,Text(改用varchar(MAX)Unicode字符型nch

3、ar,nvarchar ,ntext(改用n varchar(MAX)日期时间数据日期时间型datetime,smalldatetime二进制数据二进制型binary,varbinary ,Image(改用varbinary(MAX)1. 数字数据(1)整数型数据Bigint:-263263-1,精度19位,长度8个字节,-9 223 372 036 854 775 808到9 223 372 036 854 775 807Int:-231231-1,精度10位,长度4个字节,-2 147 483 648 到 2 147 483 647 Smallint:-215215-1,精度5位,长度2个

4、字节,-32 768 到 32 767 Tinyint:0255,精度3位,长度1个字节,0 到255 该类别的数据仅包含数字,包括正数、负数及分数等。1. 数字数据(2) 精确数值型 用于存储带有小数点且小数点后位数确定的实数,包括decimal和Numeric两类。功能上两者完全等价。声明格式:numeric(p,s)|decimal(p,s),其中p为精度,s为小数位数。精度:指数值中所存储的十进制数据的总位数。小数位数:指数值数据中小数点右边可以有的数字位数的最大值。如7654.321的精度为7,小数位数为3。注意:声明该类型的数据时,其小数位数必须小于精度。1. 数字数据(3) 浮点

5、型 是指不能精确表示数据的精度的数据类型,使用此类型来存储数据时,可能会损失部分精度,它可以用于处理取值范围非常大且对精度要求不是十分高的数值。real:-3.40E+38 3.40E+38 ,精度7位,长度4个字节float:-1.79E+308 1.79E+308 ,精度15位,长度8个字节1. 数字数据(4) 货币型 专门用于处理货币的数据类型:money和smallmoney,它们用十进制数表示货币值, 相当于4位小数的DECIMAL值。money:精度19位,小数位数为4Smallmoney:精度为10,小数位数为4 当向表中插入货币型数据时,可在数据前面加上货币符号($),并且数据

6、中间不能有逗号;如果货币值为负数,需要在$后面加上负号。如:$777.90 $620 $-120.801. 数字数据(5) 位型Bit类型用于存储整数,取值在0、1或NULL,常用于逻辑数据的存取。2. 字符数据 字符数据用于存储汉字、英文字母、数字、标点和各种符号。在输入时,需要用单引号括起来。 char(n)和nchar(n):定长的字符数据类型,n表示字符型数据的长度。 varchar(n)和nvarchar(n):变长的字符数据类型,n表示串中字符的最大长度。 用于存放大量的字符数据的文本型text和ntext,现在分别用varchar(MAX)和nvarchar(MAX)来替换使用。

7、3. 日期时间数据 Datetime:表示日期范围1753-1-19999-12-31的日期和时间数据,精度为3ms。数据长度为8个字节 Smalldatetime:表示日期范围1900-1-12079-6-6的日期和时间数据,精度为1分钟。数据长度为4个字节4. 二进制数据 二进制数据类型表示的是位数据流,一般用于存储二进制的大对象,如声音、图片、多媒体等。 Binary(n):存储固定长度的二进制数据 varbinary(n):存储可变长度的二进制数据 Image图像数据类型用于存放图片、照片等,实际存储的是可变长度的二进制数据,建议用varbinary(MAX)替换。本章主要内容1 5.

8、1 数据类型数据类型25.2 创建表创建表35.3 修改表修改表45.4 删除表删除表55.5 数据管理数据管理65.6 数据完整性数据完整性5.2 创建表 在SQL Server中建立数据库后,就可以在该数据库中创建表了。为了确定新表的结构,用户需要决定以下内容:表中的列数、每列的列名、数据类型及数据的长度、列是否可以接受空值、是否使用约束(例如:对各列的取值范围进行限制)以及确定主键和外键等。创建表可以通过SSMS窗口界面方式或T-SQL命令方式来实现。5.2.1使用窗口方式创建表 下面使用窗口方式在“student”数据库中创建“学生”表,学生表的结构定义如表5.2所示。字段名称字段名称

9、数据类型数据类型长度长度是否为空是否为空是否主键是否主键学号char12否是姓名varchar8否性别char2否出生日期datetime是班级代码char9否表5.2 学生表结构 其中学号为定长字符串,12位;姓名为变长字符串,最长8位,可存储最多4个汉字;性别定长字符串,2为,可存储一个汉字“男”或“女”。操作步骤如下:5.2.1使用窗口方式创建表步骤一步骤一1. 打开SSMS,在【对象资源管理器】窗口中依次展开【数据库】【student】,右击【表】节点,在弹出的快捷菜单中选择【新建表】命令就能打开【表设计器】,如图5.1所示。图5.1 表的右键菜单窗口5.2.1使用窗口方式创建表步骤二

10、步骤二2. 设计表结构。在【表设计器】界面中可进行表结构的输入,如图5.2所示。图5.2 表设计器录入窗口5.2.1使用窗口方式创建表步骤三步骤三3. 设置主键。在“学号”列上右键,在弹出的菜单中选择【设置主键】命令即 可将“学号”字段设置为主键,表示该列的值是唯一不重复的,如图5.4所示。图5.3 设计学生表结构窗口 图5.4设置主键窗口设置成功后,“学号”的前面会有一个钥匙样的图标,如图5.5所示。 图5.5 主键设置成功窗口5.2.1使用窗口方式创建表4. 设置表名。点击工具栏的【保存】按钮,出现输入表名对话框,如图5.6所示。在其中录入“学生”,【确定】后即可看到“student”数据

11、库中已经出现刚建立的“学生”表,如图5.7所示。步骤四步骤四图5.6 输入表名称窗口图 5.7 创建表成功窗口5.2.2使用命令方式创建表 可以用T-SQL中的Create Table语句来创建表,基本语法格式如下:CREATE TABLE table_name (字段1 数据类型 列的特征, 字段2 数据类型 列的特征, ) 其中,列的特征包括:是否为空(NULL)、是否为标识列(自动编号)、是否有默认值、是否为主键等。创建表的语法有很多选项,这里仅列出最常用的一些,后续会逐渐补充。本章主要内容1 5.1 数据类型数据类型25.2 创建表创建表35.3 修改表修改表45.4 删除表删除表55

12、.5 数据管理数据管理65.6 数据完整性数据完整性5.3 修改表 表创建后,可以根据需要进行修改,如更改表名、增加列、删除列、修改已有列的属性(列名、数据类型、是否为空值)、调整列的顺序。可以通过窗口方式或命令方式修改表。注意:表名更改后,与此相关的某些对象(如视图)以及通过表名与表相关的存储过程将无效,因此一般不建议更改表名。5.3.1使用窗口方式修改表修改“student”数据库下“学生”表的步骤如下:步骤一步骤一1. 打开SSMS,在【对象资源管理器】窗口中展开【数据库】节点,选择“student”数据库,找到要修改的“学生”表。右击“学生”表,在弹出的快捷菜单中选择【设计】命令,如图

13、5.10所示。图5.10 表的右键快捷菜单窗口5.3.1使用窗口方式修改表步骤二步骤二2. 在打开的【表设计器】窗口,与创建表时相同,可以对表进行修改,例如插入列、删除列、修改列名、主键、数据类型等,如图5.11所示。 图5.11 表设计器修改窗口5.3.1使用窗口方式修改表步骤三步骤三3. 修改完成后点击【保存】按钮以使所做的修改生效。5.3.2使用命令方式修改表修改表使用alter table语句来实现。其语法格式如下:ALTER TABLE table_name ALTER COLUMN col_name /*修改已有列的属性*/ new_data_type | ADD ,n /*增加新

14、列*/| DROP COLUMN col_name ,n /*删除列*/【例5.5】 在学生表中增加“家庭地址”列,数据类型为varchar(30),不允许为空。在查询编辑器中输入并执行以下语句即可:use studentgoalter table 学生 add 家庭地址 varchar(30) not nullgo【例5.6】 修改学生表中的“家庭地址”列,将数据类型改为varchar(50),允许为空,代码如下。use studentgoalter table 学生 alter column 家庭地址 varchar(50) nullgo【例5.7】 删除学生表中的“家庭地址”列,代码如下

15、。use studentgoalter table 学生 drop column 家庭地址go本章主要内容1 5.1 数据类型数据类型25.2 创建表创建表35.3 修改表修改表45.4 删除表删除表55.5 数据管理数据管理65.6 数据完整性数据完整性5.4.1使用窗口方式删除表 找到要删除的表,右键,在弹出的快捷菜单中选择【删除】,出现【删除对象】对话框,单击【确定】即可,如图5.12所示。图5.12 删除表窗口5.4.2使用命令方式删除表 删除表使用drop table语句。语法格式:DROP TABLE table_name其中table_name是要被删除的表名。如要删除“stud

16、ent”数据库中的“学生”表,在查询编辑器窗口中输入以下内容即可。use studentgodrop table 学生Go本章主要内容1 5.1 数据类型数据类型25.2 创建表创建表35.3 修改表修改表45.4 删除表删除表55.5 数据管理数据管理65.6 数据完整性数据完整性5.5 数据管理 表是存储数据的地方,在表创建完成后,就可以对表进行数据管理操作,包括:向表中添加数据、修改数据和删除数据。可以使用窗口或命令方式管理数据。图5.13 编辑表数据窗口 使用窗口方式进行数据管理较为简单。在SSMS中,找到要管理的“学生”表,右键,弹出快捷菜单,如图5.13所示。5.5 数据管理 选择

17、【编辑前200行】,出现数据管理窗口,如图5.14所示。在其中可以进行数据记录的浏览、添加、修改和删除操作。还可以通过表右键快捷菜单中的【选择前1000行】来查看表中的数据。5.5.1插入数据插入数据的语法格式如下:INSERT INTO table_name /*表名*/ ( column_list ) /*列名的列表,用逗号分隔*/ VALUES ( expression_list ) /*值的列表,用逗号分隔*/ 其中:(1) INTO:可选关键字,可省略(2) 列名:可选,如果省略,则按照表结构依次添加所有列(3) 多个列或多个值之间用逗号分隔开(4) 值的数目、顺序和类型要与列相对应

18、5.5.1插入数据【例5.8】l向“系部”表添加一条记录,代码如下:use student goinsert 系部(代码,名称) values(15,计算机系)go还可以用省略列名的写法,代码如下:use student goinsert 系部 values(15,计算机系)go5.5.1插入数据【例5.9】l向“专业“表添加一条记录,代码如下:use student goinsert 专业(代码,名称,系部代码) values(1501,软件工程,15)go5.5.1插入数据【例5.10】l向“班级”表添加一条记录,代码如下:use student goinsert 班级(代码,名称,专业代

19、码) values(120415011,软件工程1班,1501) go5.5.1插入数据【例5.11】l 向“学生”表添加3条记录,代码如下:use student goinsert 学生(学号,姓名,性别,出生日期,班级代码) values(120415011001,王浩然,女,1995-7-12,120415011)insert 学生(学号,姓名,性别,出生日期,班级代码) values(120415011002,赵腾高,男,1994-11-5,120415011)insert 学生(学号,姓名,性别,班级代码) values(120415011003,尹小明,男,120415011)go

20、5.5.1插入数据 执行完成后结果如图5.15所示。其中第3条记录的出生日期字段定义为“可以为空”,这里没有录入值,默认为NULL。图5.15 表数据录入显示窗口【例5.11】5.5.2修改数据语法格式如下:UPDATE table_name /*表名*/SET column_name = expression | DEFAULT | NULL /*列名=更新值*/ ,.n /*多列更新用逗号分隔*/ WHERE /*更新的条件,若无where条件,则修改表中所有的行*/5.5.2修改数据【例5.12】l 修改“学生”表,将“尹小明”的出生日期修改为1996年6月11日,代码如下:use st

21、udent goupdate 学生 set 出生日期=1996-6-11 where 姓名=尹小明go 执行后可以看到姓名为“尹小明”的出生日期被修改为“1996-6-11”,如图5.16所示。5.5.2修改数据【例5.12】图5.16 表数据修改显示窗口5.5.3删除数据DELETE 语句的语法格式如下:DELETE FROM table_name /*表名*/ WHERE /*删除的条件,若无where则会删除所有行的数据*/【例5.13】删除“学生”表中姓名为“尹小明”的记录,代码如下:use student godelete 学生 where 姓名=尹小明go执行完成后可以看到“尹小明

22、”的记录被删除,如图5.17所示。图5.17 表数据删除显示窗口【例5.14】l 删除“学生”表中所有记录,代码如下:use student godelete 学生 go 执行完成后将删除学生表的所有数据,该表变成无数据的空表,但表的结构还在,如图5.18所示。图5.18 表数据清除显示窗口5.5.4索引1. 索引的概念 索引(Index)是一种特殊类型的数据库对象,它保存着数据表中一列或几列组合的排序结构。索引与书籍的目录作用类似,为数据表增加索引,可以大大提高数据的检索效率。索引是数据库中一个重要的对象,下面将详细介绍索引的基本概念、优点、分类及操作。 索引是针对一个表,以表列为基础建立的

23、数据库对象,它保存着表中排序的索引列,并且记录了索引列在数据表中的物理存储位置,实现了表中数据的逻辑排序。5.5.4索引2. 索引的优点 可以大大加快数据检索速度。 通过创建唯一索引,可以保证数据记录的唯一性。 在使用ORDER BY和GROUP BY子句进行检索数据时, 可以显著减少查询中分组和排序的时间。 使用索引可以在检索数据的过程中使用优化隐藏器,提高系统性能。 可以加速表与表之间的连接,在实现数据的参照完整性方面有特别的意义。5.5.4索引3. 索引的分类 根据索引的顺序与数据表的物理顺序是否相同,可以把索引分成两种类型:聚集索引与非聚集索引。(1) 聚集索引(Clustered I

24、ndex) 数据表的物理顺序和索引表的顺序相同,它根据表中的一列或多列的值排列记录。每一个表只能有一个聚集索引,因为一个表的记录只能以一种物理顺序存放,在通常情况下,使用的都是聚集索引。默认主键是聚集索引。(2) 非聚集索引(Nonclustered Index)数据表的物理顺序和索引表的顺序不相同,索引表仅仅包含指向数据表的指针,这些指针本身是有序的,用于在表中快速定位数据。5.5.4索引3. 索引的分类 对于非聚集索引,表的物理顺序与索引顺序不同,即表的数据并不是按照索引列排序的。索引是有序的,而表中的数据是无序的,如图5.19所示。图5.19 非聚集索引示意图5.5.4索引3. 索引的分

25、类在实际中常见的索引有:主键索引、唯一索引。索引按照结构可分为聚集索引和非聚集索引两种不同的类型。按照实现的功能分,有一类索引被称作“唯一索引”。它既可以采用聚集索引的结构,又可以采用非聚集索引的结构。唯一索引的特征: 不允许两行具有相同的索引值。 可用于实施实体完整性。 在创建主键约束和唯一约束时自动创建唯一索引。在已有数据的表上创建唯一索引时,如果在该列数据存在重复值,那么系统将返回错误信息。在实际的编程应用中会经常使用到唯一索引。因为在一个表中,可能会有很多列的列值需要保证其唯一性,如:有身份证号、工号、学号等,可在这些列上创建唯一索引。5.5.4索引4. 创建索引(1) 使用窗口方式创

26、建索引下面为“系部”表的“名称”字段建立唯一索引。图5.20 创建表索引窗口 图5.21 索引设置窗口5.5.4索引图5.22 索引列设置窗口 图5.23 索引设置结果显示窗口4. 创建索引5.5.4索引4. 创建索引(2) 使用命令方式创建索引创建索引使用CREATE INDEX语句。CREATE INDEX语句的语法形式如下:CREATE UNIQUE CLUSTERED | NONCLUSTERED INDEX index_name ON table_name(column_name ASC | DESC ,.n )5.5.4索引5. 管理索引 索引创建成功后可以根据需要进行改名、修改索

27、引设置、删除索引等操作。可以在“索引设置窗口”进行修改和删除,可以使用drop index table_name.index_name来删除索引。5.5.4索引6. 使用索引的代价 使用索引虽然可以提高系统性能,但并不是每一列都适合建立索引,使用索引要付出一定的代价。 创建索引要花费时间和占用存储空间。 建立索引加快了数据检索速度,却减慢了数据修改速度。7. 建立索引的原则 使用索引要付出代价,所以在建立索引时要根据实际情况,考虑哪些列适合建立索引,哪些列不适合建立索引。原则如下。(1) 考虑建索引的列如果在一个列上创建索引,该列就称为索引列。索引列中的值称为关键字值。考虑建索引的列有如下这些

28、: 主键通常检索、存取表是通过主键来进行的。因此,应该考虑在主键上建立索引。 连接中频繁使用的列用于连接的列若按顺序存放,系统可以很快地执行连接。如外键,除用于实现参照完整性外,还经常用于进行表的连接。 在某一范围内频繁搜索的列和按排序顺序频繁检索的列7. 建立索引的原则(2) 不考虑建索引的列 建立索引需要产生一定的存储开销,在进行插入和更新数据的操作时,维护索引也要花费时间和空间,因此,没有必要对表中的所有列都建立索引。创建索引与否以及在哪些列上建立索引,要看建立索引和维护索引的代价与因建立索引所节省的时间相比哪个更合算。7. 建立索引的原则 很少或从来不在查询中引用的列,因为系统很少或从

29、来不根据这个列的值去查找数据行。 只有两个或很少几个值的列(如性别,只有两个值“男”或“女”),以这样的列创建索引并不能得到建立索引的好处。 以bit、text、image数据类型定义的列。 数据行数很少的小表一般也没有必要创建索引。一般来说,如下一些列不考虑建立索引:7. 建立索引的原则本章主要内容1 5.1 数据类型数据类型25.2 创建表创建表35.3 修改表修改表45.4 删除表删除表55.5 数据管理数据管理65.6 数据完整性数据完整性5.6 数据完整性 数据完整性是指存储在数据库中数据的正确性和一致性。数据库中数据是否完整关系到该数据库能否真实的反映现实世界。以“学生”表为例,学

30、号要唯一不能重复,性别只能是男或女。如果在增加、删除和修改时不限制,就会出现数据库中数据与现实不符的情况。因此保证数据的完整性在数据库系统中非常重要。在SQL Server中可以通过约束、默认、规则、触发器来达到保证数据完整性的目的。5.6.1数据完整性分类1.实体完整性 根据数据完整性所作用的数据库对象和范围不同,数据完整性可分为实体完整性、域完整性、参照完整性和用户定义完整性四种。 实体完整性又称为行的完整性,要求表中有一个主键,其值不能为空且能唯一地标识对应的记录。 实现实体完整性的方法主要有:主键约束PRIMARY KEY、唯一性约束UNIQUE、唯一索引UNIQUE INDEX、标识

31、IDENTITY等。5.6.1数据完整性分类2. 域完整性 域完整性又称为列完整性,指给定列输入的有效性。 实现域完整性的方法主要有:默认值约束DEFAULT、检查约束CHECK、外键约束FOREIGN KEY、规则RULE、数据类型、非空性约束NOT NULL等。5.6.1数据完整性分类3. 参照完整性 参照完整性又称为引用完整性。是指作用于有关联的两个或两个以上的表,通过使用主键和外键或主键和唯一键之间的关系,使表中的键值在所有表中保持一致。 实现引用完整性的方法主要有:外键约束FOREIGN KEY。5.6.1数据完整性分类4. 用户定义完整性 用户定义的完整性是应用领域需要遵守的约束条

32、件,其允许用户定义不属于其他任何完整性分类的特定业务规则。5.6.2约束的种类及创建 约束是SQL Server提供的自动强制数据完整性的一种方法,通过定义列的取值规则来维护数据的完整性。SQL Serve支持的约束有主键约束、唯一性约束、检查约束、非空约束、默认约束和外键约束。5.6.2约束的种类及创建1. 主键约束(Primary key) 主键约束用来强制数据的实体完整性,它是在表中定义一个主键来唯一标识表中的每行记录。主键约束有如下特点:每个表中只能有一个主键,主键可以是一列,也可以是多列的组合;主键值必须唯一并且不能为空,对于多列组合的主键,某列值可以重复,但列的组合值必须唯一。 p

33、rimary约束名的命名:建议一般形式为 pk_表名_列名1. 主键约束(Primary key) 在窗口方式创建主键时,需要在表设计器界面选中主键的列,若是多列组合的主键,需要将这些列同时选中,右键“设置主键”或点击工具栏的钥匙图标即可。 通过命令方式创建主键,可以在create table中完成,参考创建表,也可用alter table在已存在的表上创建主键,语法格式如下:Alter table table_name Add constraint constraint_name Primary key clustered | nonclustered (column,n)5.6.2约束的种

34、类及创建【例5.19】l 在“学生”表中设置“学号”为主键的代码如下:use student goalter table 学生 add constraint pk_学生 primary key (学号)go5.6.2约束的种类及创建2. 唯一性约束(UNIQUE) 唯一约束用来强制数据的实体完整性,它主要用来限制表的非主键列中不允许输入重复值。唯一约束有如下特点:一个表中可以定义多个唯一约束;每个唯一约束可以定义到一列上,也可以定义到多列上;空值可以出现在某列中一次。5.6.2约束的种类及创建2. 唯一性约束(UNIQUE)PRIMARY KEY约束与UNIQUE约束的主要区别如下:(1) 一

35、个数据表只能创建一个PRIMARY KEY约束,但一个表中可根据需要对不同的列创建若干个UNIQUE约束;(2) PRIMARY KEY字段的值不允许为NULL,而UNIQUE字段的值可取NULL;(3) 一般创建PRIMARY KEY约束时,系统会自动产生索引,索引的缺省类型为簇索引。 (4) 若某字段可唯一标识一行,则将其定义为主键,如“学号”。如果要确保一个表中的非主键列不输入重复值,应在该列上定义唯一约束,如”身份证号”。5.6.2约束的种类及创建2. 唯一性约束(UNIQUE) 通过命令方式创建唯一约束,可以用create unique index创建,也可用alter table为

36、已存在的表创建唯一约束,语法格式如下:Alter table table_name Add constraint constraint_name Unique clustered | nonclustered (column,n)5.6.2约束的种类及创建【例5.20】l 在“学生”表中为“姓名”字段设置唯一约束的代码如下:use student goalter table 学生 add constraint uk_学生 unique (姓名)go5.6.2约束的种类及创建3. 检查约束(CHECK) 检查约束用来强制数据的域完整性,它使用逻辑表达式来限制表中的列可以接受哪些数据值。CHECK

37、约束通过对一个逻辑表达式的结果进行判断来对数据进行核查。(1) 使用窗口方式创建约束5.6.2约束的种类及创建3. 检查约束(CHECK) 图5.26 check约束设置窗口图5.27 check约束表达式设置窗口5.6.2约束的种类及创建3. 检查约束(CHECK)(2) 使用命令方式创建约束使用T-SQL语句为已存在的表创建检查约束,其语法格式如下:ALTER TABLE table_name /*要创建check约束的表名*/Add constraint constraint_name /*check约束的名称*/Check (logical_expression) /*check约束的

38、逻辑表达式*/5.6.2约束的种类及创建【例5.21】 为“学生”表的“性别”字段创建check约束,限制性别只能取值男或女。代码如下:use student goalter table 学生 add constraint ck_性别 check (性别=男 or 性别=女)go注意:可以在一列上设置多个核查约束,也可以将一个核查约束应用于多列。当一列受多个核查约束控制时,所有的约束按照创建的顺序,依次进行数据有效性的核查。5.6.2约束的种类及创建4. 非空约束(NOT NULL) 非空约束用来强制数据的域完整性,它用于设定某列值不能为空。如果指定某列不能为空,则在进行插入记录时,此列必须要

39、插入数据。5.6.2约束的种类及创建5. 默认值约束(Default)默认约束用来强制数据的域完整性,它为表中某列建立一个默认值,当用户插入记录时,如果没有为该列提供输入值,则系统会自动将默认值赋给该列。默认值可以是常量、内置函数或表达式。使用默认约束可以提高输入记录的速度。5.6.2约束的种类及创建5. 默认值约束(Default)通过窗口方式创建默认值约束的方法比较简单,如要将“学生”表的“性别”设置默认值为男,打开学生表设计器,选中要设置的列,在表设计器的下面【列属性】中找到【默认值或绑定】,设置默认的值男即可。设置好后若性别字段不录入值,则默认为男。如图5.28所示。图5.28 默认值

40、约束设置窗口5.6.2约束的种类及创建5. 默认值约束(Default) 使用T-SQL语句为已存在的表创建默认约束,语法格式如下: ALTER TABLE table_name ADD CONSTRAINT constraint_name DEFAULT constant_expression FOR column_name其中: table_name:需要建立默认约束的表名。 constraint_name:默认约束名称。 constant_expression:默认值。5.6.2约束的种类及创建【例5.22】为“学生”表的“性别”字段创建默认值为男的约束,代码如下:use student

41、 goalter table 学生 add constraint df_性别 default 男 for 性别go5.6.2约束的种类及创建6. 外键约束(Foreign Key) 外键是指一个表中的一列或列组合,它虽不是该表的主键,但却是另一个表的主键。通过外键约束可以为相关联的两个表建立联系,实现数据的引用完整性,维护两表之间数据的一致性关系。5.6.2约束的种类及创建6. 外键约束(Foreign Key)外键约束要求外键列中的每个值都存在于或依赖于对应主键表的值。外键约束不仅可以与另一张表上的主键约束建立联系,也可以与另一张表上的UNIQUE约束建立联系。外键约束上允许存在为NULL的

42、值,则针对该列的外键约束核查将被忽略。外键同时也限制了对主键所在表的数据进行修改。当主键所在的表的数据被另一张表的外键所引用时,用户将无法对主键里的数据进行修改或删除。除非事先删除或修改引用的数据。当一个新的数据加入到表格中,或对表格中已经存在的外键上的数据进行修改时,新的数据必须存在于另一张表的主键上。5.6.2约束的种类及创建6. 外键约束(Foreign Key)如在“student”数据库中,其表结构如图5.29所示:图5.29 student数据库表结构图“系部”表中 “代码”字段是主键。“专业”表的“系部代码”字段同“系部”的“代码”相对应,不是主键。“专业”表的“系部代码”是外键

43、。“专业”的“系部代码”和“系部”的“代码”字段是对应和依赖关系,外键体现了表和表之间的关系。5.6.2约束的种类及创建6. 外键约束(Foreign Key)(1) 使用窗口方式创建外键图5.30 创建外键关系菜单窗口 图5.31 添加外键关系窗口图5.32 关系的主键、外键设置窗口 图5.33 外键关系设置完成窗口5.6.2约束的种类及创建6. 外键约束(Foreign Key)(1) 使用窗口方式创建外键注意: 由于外键描述的是表和表之间的参照、依赖、对应关系,因此在“学生”表“班级代码”创建为外键后,在“班级”表的表设计器中同样可以看到该外键约束。 外键默认的命令方式是“FK_从表(外

44、键表)_主表(主键表)”的形式,“从表”是该外键字段所在的表,主表是对应主键所在的表。如“FK_学生_班级”,表示在学生表中的“班级代码”字段上建立外键,该字段依赖于或参照“班级”表中的“代码”字段。 通过窗口方式创建外键约束更简单的方法是使用数据库关系图。数据库关系图可以从整体的角度查看和设置表及表的关系。操作方法如下。打开“student”数据库,右击【数据库关系图】节点,在弹出窗口中选择【新建数据库关系图】,如图5.34所示。5.6.2约束的种类及创建6. 外键约束(Foreign Key)(1) 使用窗口方式创建外键5.6.2约束的种类及创建6. 外键约束(Foreign Key)(1

45、) 使用窗口方式创建外键图5.34 新建数据库关系图菜单窗口5.6.2约束的种类及创建6. 外键约束(Foreign Key)(1) 使用窗口方式创建外键打开【添加表】窗口,如图5.35所示:图5.35 添加表窗口5.6.2约束的种类及创建6. 外键约束(Foreign Key)(1) 使用窗口方式创建外键依次选择要添加的表,点击【添加】,如图5.36所示:图5.36 建立数据库关系图窗口5.6.2约束的种类及创建6. 外键约束(Foreign Key)(1) 使用窗口方式创建外键可以看到“班级”和“学生”之间有一条线连接起来,这就是前面创建的外键关系。外键一端用“”符号,主键一端用钥匙符号。

46、接下来创建“专业”表的“系部代码”为外键,同“系部”表的“代码”对应。具体做法如下:选中“专业”表的“系部代码”字段,而后用鼠标拖动,鼠标箭头右下方会出现“+”,同时还会随着鼠标的移动拖出一条虚线,如图5.37所示。图5.37 拖动设置主外键关联窗口5.6.2约束的种类及创建6. 外键约束(Foreign Key)(1) 使用窗口方式创建外键拖动到“系部”表的“代码”字段上放开鼠标,弹出两个窗口,如图5.38。图5.38 主外键关联设置窗口 可以看到【表和列】窗口中的表和键,核对无误后点击【确定】返回【外键关系】窗口,点击【确定】返回【数据库关系图】界面,可以看到在“专业”和“系部”之间出现了

47、一条外键关系连接线。同样的方法设置“班级”表的“专业代码”同“专业”表的“代码”是外键关系。如图5.39所示。5.6.2约束的种类及创建6. 外键约束(Foreign Key)(1) 使用窗口方式创建外键 其体现的含义是应先有系部,再有该系部的专业,进而该专业的班级,最后是该班级的学生。 最后单击【保存】,在出现的窗口中输入关系图的名称,【确定】即可。图5.39 主外键设置关联效果显示窗口5.6.2约束的种类及创建6. 外键约束(Foreign Key)(2) 使用命令方式创建外键可以在create table中完成创建外键,如例5.23。5.6.2约束的种类及创建【例5.23】在创建“学生”

48、表时就设置“班级代码”字段为外键约束的代码如下:use student -使用student数据库,表示要在student数据库中创建表gocreate table 学生 -创建学生表( 学号 char(12) CONSTRAINT PK_学生 PRIMARY KEY, -设置学号为主键 姓名 varchar(8) not null, 性别 char(2) not null, 出生日期 datetime null, 班级代码 char(9) not null constraint fk_学生_班级references 班级(代码) -设置班级代码为外键 )go也可用alter table在已存在的表上创建外键,语法格式如下:Alter table table_nameAdd constraint constraint_nameForeign key (column_name,)References ref_table (ref_column_name,) /*主键表及列*/5.6.2约束的种类及创建【例5.23】在

温馨提示

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

评论

0/150

提交评论