第6章 约束.ppt_第1页
第6章 约束.ppt_第2页
第6章 约束.ppt_第3页
第6章 约束.ppt_第4页
第6章 约束.ppt_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

第6章 约束,约束是每个数据库必不可少的一部分。约束的根本目的在于保持数据的完整性。数据完整性,是指数据的精确性和可靠性。即数据库中的数据都是符合某种预定义规则。当用户输入的数据不符合这些规则时,将无法实现对数据库的更改。 主键约束; 外键约束; 唯一性约束; 检查约束; 默认值约束。,6.1 主键约束,主键约束是数据库中最常见的约束。主键约束可以保证数据完整性。即防止数据表中的两条记录完全相同,通过将主键纳入查询条件,可以达到查询结果最多返回一条记录的目的。,6.1.1 主键简介,主键被创建在一个或多个列上,通过这些列的值或者值的组合,唯一地标识一条记录。例如,对于存储了学生信息的student表,一般会为每个学生分配一个student_id,也就是说将主键建立在student_id这个列上。student_id将成为每个学生的唯一标识。当向student表中插入新的学生信息时,如果要插入的student_id已经存在,数据库将拒绝插入该条记录。这就是主键保证数据完整性的体现。对于主键,有以下几点需要注意。 主键列的数据类型并不一定是数值型。 主键列不一定只有一列。 主键是规则制定者的意志体现,不要将其与现实世界混淆。,6.1.2 创建主键约束,1创建主键约束 create table only_test (id number primary key, name varchar2(20); 2测试主键约束 insert into only_test values (1, allen) insert into only_test values (1, bob);,6.1.3 修改表的主键约束,表的主键也是作为表的对象存在的,因此,同样可以对其进行修改。这其中包括,为表添加主键,删除主键、启用/禁用主键、重命名主键等。 1为表添加主键 alter table only_test add primary key (id) 2为表添加多列主键 alter table only_test add primary key (id, name) 3删除主键 alter table only_test drop primary key 4启用/禁用主键 alter table only_test disable primary key 5重命名主键,6.1.4 主键应用场景,1对于完整性要求比较高的数据表都应该建立主键 2对于经常按照某列进行查询的数据表,应该考虑建立主键 3考虑是否对外键有利,6.2 外键约束,外键与主键一样用于保证数据完整性,主键是针对单个表的约束,而外键则描述了表之间的关系。即两个表之间的数据的相互依存性。,6.2.1 外键简介,外键实际是一种关联,描述了表之间的父子关系。即子表中的某条数据与父表中的某条数据有着依附关系。当父表中的某条数据被删除或进行更改时,会影响子表中的相应数据。例如,父表中的数据被删除,则子表中的相应数据也应该被删除;当父表中的数据进行更新,子表中的数据也应该做出适当的反应。 外键约束是建立在子表之上的,并要求子表的每条记录必须在父表中有且仅有一条记录与之对应。例如,某条order记录,没有对应的customer的信息,是不允许的,亦即一张订单没有客户是不允许的。,6.2.2 创建外键约束,1建立外键 alter table orders add constraint fk_orders_customers foreign key (customer_id) references customers (customer_id) 2验证外键约束的有效性 insert into orders (order_id, customer_id, goods_name, quantity, unit) values (1, 1, fabric, 20, bmp),6.2.3 级联更新与级联删除,在具有外键的情形下,尝试修改主表中的数据并不一定能够成功。但是有时又的确有这种需求,即修改主表中的主键列的值。当然,子表中的数据也应该同时更新。对于主表中的记录删除亦是如此。但是因为外键约束,造成了两种操作都不能成功进行。这就是级联更新与级联删除问题的提出背景。 1级联更新 alter table orders add constraint fk_orders_customers foreign key (customer_id) references customers (customer_id) deferrable initially deferred 2级联删除 alter table orders add constraint fk_orders_customers foreign key (customer_id) references customers (customer_id) on delete cascade,6.2.4 修改外键属性,外键也是约束中的一种,因此可以像修改其他约束一样对其进行修改。修改外键的主要操作有一些几种:重命名、启用/禁用、修改、删除。 1重命名外键 2禁用/启用外键 3是否对已有数据进行校验 4删除外键,6.2.5 外键使用,1严格遵守父子关系的数据表应该使用外键 2将应用程序中的父子关系转移到外键约束 3不要过分使用外键,6.3 唯一性约束,唯一性约束与主键一样,用于唯一标识一行。使用唯一性约束的列或列的组合,其值或值的组合必须是唯一的。,6.3.1 唯一性约束简介,正如在6.1节所描述的那样,主键列上的值都是唯一的,主键是记录唯一性的保证。但是,一个表只能有一个主键。很多时候,对于其他列同样要求列值唯一。例如,在用户表中,列user_id作为主键可以保证用户的唯一性,但是同时又要求其e-mail地址唯一,防止多个用户同时使用同一邮箱。 所以,可以这样理解,主键设计为标识唯一一条记录,而唯一性约束则设计为保证列自身值的唯一性。,6.3.2 创建唯一性约束,1创建唯一性约束 create table only_test(id number primary key, name varchar2(20) unique) 2验证唯一性约束 insert into only_test values (1, allen); insert into only_test values (2, allen);,6.3.3 修改唯一性约束,1添加唯一性约束 2删除唯一性约束 3重命名唯一性约束 4禁用/启用唯一性约束,6.3.4 唯一性约束的使用,唯一性约束可以建立在列或者列的组合上,可以作为主键约束的补充。常见的情形为,主键列为id,而id只是一个自增的整数列,与实际的业务逻辑无关。在业务逻辑上保证记录的唯一性往往使用唯一性约束来实现。,6.4 检查约束,在前面介绍的约束(主键、外键、唯一性约束)实际在定义多个列值之间的关系,例如,主键和唯一性都约束表中的两个列值或列值组合不能相同,而外键则约束了两个表之间的数据保持父子关系。本节介绍的检查约束则是针对列值本身进行限制。,6.4.1 检查约束简介,检查约束对列值进行限制,将表中的一列或多列限制在某个范围内。例如,在学生成绩表中,可能需要将学生单科成绩限制在0-100之内,超过100分的单科成绩将不能够录入。又如,在员工表中,可能需要限制经理级薪水不能超过8000,主管级薪水不能超过5000,普通员工薪水不能超过4000。这些都可以通过检查约束来实现。 检查约束实际可以看作一个布尔表达式,该布尔表达式如果返回为真,则约束校验将通过,反之,约束校验将无法通过。,6.4.2 创建检查约束,检查约束可以在创建表时进行创建,使用选项check。 create table only_test (id number primary key, name varchar2(20), check (id20); 检查约束的校验过程。当更新表中记录时,oracle都将计算check的布尔值。,6.4.3 修改检查约束,可以像修改其他约束一样修改检查约束。针对检查约束的操作包括,添加、删除、重命名和禁用/启用。 1添加约束 2删除检查约束 3重命名检查约束 4禁用/启用检查约束,6.4.4 检查约束的使用,检查约束可以通过很灵活的约束条件来完成约束任务。但是不能过多使用检查约束,尤其是复杂的约束条件。因为每次更新数据库针对每条记录,都需要进行检查约束的校验,会耗费大量资源。,6.5 默认值约束,默认值约束也是数据库中常用约束。当向数据表中插入数据时,并不总是将所有字段一一插入。对于某些特殊字段,其值总是固定或者差不多的。用户希望,如果没有显式指定值,就使用某个特定的值进行插入,即默认值。为列指定默认值的操作即为设置默认值约束。,6.5.1 默认值约束简介,就像前面所述,数据表的列可以有非空约束(nullable),所以如果允许列的值为非空的,对于某个字段值不进行显式赋值是允许的。但是,同样可以对其设定默认值约束。一旦设定默认值约束,该列将使用默认值赋值作为空值的替代值。即使未为列指定默认值,那么oracle将隐式使用null作为默认值,即default null。在oracle9i以前的版本,用户使用默认值只能使用常量值;而oracle9i及以后版本,用户将可以使用sysdate等函数来对列指定默认值。,6.5.2 创建默认值约束,1创建默认值约束 create table only_test (id number primary key, name varchar2(20) default anybody) 2默认值的使用 insert into only_test (id) values (1),6.5.3 修改默认值约束,1添加默认值约束 2删除默认值约束 3修改默认值,6.6 本章实例,本章讲述了oracle中的几种主要约束,本节将通过一个实例来演示各种约束的创建及删除过程。 【范例6-43】该范例演示了各种约束的创建及删除。 create table teacher (id number(3), teacher_name nvarchar2(30); alter table teacher add constraint pk_teacher primary key(id); alter table teacher add constraint chk_id check(id0); alter table teacher modify teacher_name constraint uq_teachername unique;,6.7 本章小结,本章讲述了

温馨提示

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

最新文档

评论

0/150

提交评论