1、2019/4/20,1,第五章 教学要求,理解数据库完整性控制的基本概念与方法。 掌握SQL Server2005定义完整性约束的方法。,2019/4/20,2,第五章 教学重点,数据库完整性控制的基本概念与方法。 SQL Server2005定义完整性约束的方法。,2019/4/20,3,第五章 教学难点,数据库完整性控制的基本概念与方法。 SQL Server2005定义完整性约束的方法。,2019/4/20,4,第五章 教学内容,完整性约束条件 SQL Server2005中对数据完整性控制,2019/4/20,5,创建、删除和修改约束,在SQL Server 2005中有5种约束: 主键约束(primary key constraint) 唯一性约束(unique constraint) 检查约束(check constraint) 缺省约束(default constraint) 外部键约束(foreign key constraint),2019/4/20,6,1. 主键约束,主键的添加、删除和修改操作方法有两种: (一)Management Studio 操作法,在Man
2、agement Studio 中,用右键单击要操作的数据库表,从弹出的快捷菜单中选择“修改”选项,然后根据图示操作 。 (二)Transact-SQL语句操作法。 其语法形式如下: CONSTRAINT constraint_name PRIMARY KEY CLUSTERED|NONCLUSTERED (column_name,n),2019/4/20,7,2019/4/20,8,2019/4/20,9,2019/4/20,10,2019/4/20,11,按下shift键再用鼠标同时选中,鼠标左键选中即可设置主键约束,2019/4/20,12,返回,2019/4/20,13,2019/4/20,14,主键约束各参数的说明如下,constraint_name:用于指定约束的名称,约束的名称在数据库中应该是唯一的。如果不指定,则系统会自动生成一个约束名。 CLUSTERED|NONCLUSTERED:用于指定索引的类型,即聚簇索引或者非聚簇索引,CLUSTERED为默认值。 column_name:用于指定主键的列名。主键最多由16个列组成。,2019/4/20,15,例子,在执行创建产
3、品信息表的操作时,指定产品编号为主键值,并且创建一个聚簇索引。 create table products( id char(10) not null, name char(20) not null, price money default 0.01, quantity smallint null, constraint pk_id primary key clustered (id) ),2019/4/20,16,2. 唯一性约束,唯一性约束用于指定一个或者多个列的组合的值具有唯一性,以防止在列中输入重复的值。当使用唯一性约束时,需要考虑以下几个因素: 使用唯一性约束的字段允许为空值。 一个表中可以允许有多个唯一性约束。 可以把唯一性约束定义在多个字段上。 唯一性约束用于强制在指定字段上创建一个唯一性索引。 缺省情况下,创建的索引类型为非聚簇索引。,2019/4/20,17,创建和修改唯一性约束的操作方法,创建和修改唯一性约束的操作方法有两种: (一)Management Studio 操作法,通过Management Studio 可以完成创建和修改唯一性约束的操作。 (二)Tra
4、nsact-SQL语句操作法。 CONSTRAINT constraint_name UNIQUE CLUSTERED|NONCLUSTERED (column_name,n),下一页,2019/4/20,18,此处可以创建唯一性约束,2019/4/20,19,2019/4/20,20,2019/4/20,21,3. 检查约束,一个列级检查约束只能与限制的字段有关;一个表级检查约束只能与限制的表中字段有关。 一个表中可以定义多个检查约束。 每个CREATE TABLE语句中每个字段只能定义一个检查约束。 在多个字段上定义检查约束,则必须将检查约束定义为表级约束。 当执行INSERT语句或者UPDATE语句时,检查约束将验证数据。 检查约束中不能包含子查询。,2019/4/20,22,创建检查约束常用的操作方法有两种,1.Management Studio 操作法。使用Management Studio 创建检查约束,根据图示进行操作。 2.Transact-SQL语句操作法。检查约束的Transact-SQL语句操作法,其语法形式如下: CONSTRAINT constraint_na
5、me CHECK NOT FOR REPLICATION (logical_expression),2019/4/20,23,2019/4/20,24,2019/4/20,25,2019/4/20,26,例子,创建了一个学生信息表,其中输入性别字段值时,只能接受“F”或者“M” 。 create table student( Id char(8), name char(8), sex char(2), phonenum int, constraint chk_sex check(sex in (F,M) ),2019/4/20,27,4. 缺省约束,使用缺省约束时,应该注意以下几点: 每个字段只能定义一个缺省约束。 如果定义的缺省值长于其对应字段的允许长度,那么输入到表中的缺省值将被截断。 不能加入到带有IDENTITY属性或者数据类型为timestamp的字段上。 如果字段定义为用户定义的数据类型,而且有一个缺省绑定到这个数据类型上,则不允许该字段有缺省约束。,2019/4/20,28,例子,创建了一个学生信息表,其中输入性别字段值时,只能接受“F”或者“M”,并且缺省设置sex为“
6、M”。 create table student( Id char(8), name char(8), sex char(2) default m, phonenum int, constraint chk_sex check (sex in (F,M) ),2019/4/20,29,2019/4/20,30,5. 外部键约束,外部键约束用于强制参照完整性,提供单个字段或者多个字段的参照完整性。当使用外部键约束时,应该考虑以下几个因素: 外部键约束提供了字段参照完整性。 外部键从句中的字段数目和每个字段指定的数据类型必须和REFERENCES从句中的字段相匹配。 外部键约束不能自动创建索引,需要用户手动创建。,2019/4/20,31,用户想要修改外部键约束的数据,必须有对外部键约束所参考表的SELECT权限或者REFERENCES权限。 参考同一表中的字段时,必须只使用REFERENCES子句,不能使用外部键子句。 一个表中最多可以有31个外部键约束。 在临时表中,不能使用外部键约束。 主键和外部键的数据类型必须严格匹配。,2019/4/20,32,例:,给SC表添加这样一个约束,使
7、用户输入的学生学号必须要在Student表中的sno列中出现过的学生学号。 alter table sc add constraint ref_stu_sno foreign key (sno) references student(sno),下一页,2019/4/20,33,演示过程建立检查约束,2019/4/20,34,演示过程建立检查约束,2019/4/20,35,演示过程建立检查约束,2019/4/20,36,演示过程建立默认值约束,2019/4/20,37,演示过程建立默认值约束,2019/4/20,38,演示过程建立检查约束,2019/4/20,39,演示过程建立检查约束,2019/4/20,40,演示过程 -建立外键约束,2019/4/20,41,演示过程建立外键约束,2019/4/20,42,演示过程检查外键约束,2019/4/20,43,演示过程检查外键约束,2019/4/20,44,演示过程删除外键约束,2019/4/20,45,索引操作,创建索引 查看、修改和删除索引,2019/4/20,46,一、什么叫索引,数据库中的索引与书籍中的索引类似,在一本书中,利用索引
8、可以快速查找所需信息,无须阅读整本书。在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需数据。书中的索引是一个词语列表,其中注明了包含各个词的页码。而数据库中的索引是某个表中一列或者若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。,2019/4/20,47,二、索引的作用,通过创建唯一索引,可以保证数据记录的唯一性。 可以大大加快数据检索速度。 可以加速表与表之间的连接,这一点在实现数据的参照完整性方面有特别的意义。 在使用ORDER BY和GROUP BY子句中进行检索数据时,可以显著减少查询中分组和排序的时间。 使用索引可以在检索数据的过程中使用优化隐藏器,提高系统性能。,2019/4/20,48,聚集索引与非聚集索引,聚集索引对表的物理数据页中的数据按列进行排序,然后再重新存储到磁盘上,即聚集索引与数据是混为一体的,它的叶节点中存储的是实际的数据。 非聚集索引具有完全独立于数据行的结构,使用非聚集索引不用将物理数据页中的数据按列排序。非聚集索引的叶节点存储了组成非聚集索引的关键字值和行定位器。,返回,2019/4/20,49,创建索引,SQ
9、L Server 2005创建索引的方法 (1)利用对象资源管理器直接创建索引。 (3)利用Transact-SQL语句中的CREATE INDEX命令创建索引。,2019/4/20,50,利用对象资源管理器直接创建索引,其具体步骤如下: ()在对象资源管理器中,展开指定的服务器、数据库,展开要创建索引的表,用右键单击“索引”,从弹出的快捷菜单中选择“新建索引”选项,点击,则出现新建索引对话框。 (2)填写索引名称,选择索引类型,添加建立索引的属性列,选择完成后单击“确定”按钮,即可生成新的索引;单击“取消”按钮,则取消新建索引的操作。,2019/4/20,51,2019/4/20,52,2019/4/20,53,利用Transact-SQL语句中的CREATE INDEX命令创建索引。,CREATE INDEX au_id_ind ON authors (au_id) CREATE INDEX emp_order_ind ON order_emp (orderID, employeeID),2019/4/20,54,小结,数据库完整性控制的基本概念与方法。 SQL Server2005定义完整性约束的方法。,2019/4/20,55,思考题,如何在SQL Server2005定义完整性约束的方法?,
《数据库-幻灯片》由会员F****n分享,可在线阅读,更多相关《数据库-幻灯片》请在金锄头文库上搜索。