数据库--约束

来源:互联网 发布:国泰君安富易交易软件 编辑:程序博客网 时间:2024/05/16 00:31

常用约束

数据完整性
数据库系统必须保证数据库中的数据是完整的。在更新数据库时,关系中不能出现不符合完整性要求的元组,这样才能给用户提供正确、有效的信息。

oracle数据库中提供的数据完整性特性包括:

  • 数据类型定义
  • 约束
  • 触发器和存储过程

数据库完整性–约束
- 约束,将大量业务规则的声明作为数据定义的组成部分。
- 其核心概念是,约束都是声明性约束,不是过程性

约束类型
- NOT NULL
- PRIMARY KEY
- UNIQUE
- FOREIGN KEY
- CHECK
- DEFAULT
- REF约束
NOT NULL约束
- 一些情况下要确保某些列始终有值,这时候会用到NOT NULL约束。可以在CREATE TABLE 创建时也可以用ALTER TABLE 语句进行增加、修改表中的约束。
- NOT NULL约束是Oracle数据库所支持的最古老的约束。
- NOT NULL只适用于所声明的单个列。
PRIMARY KEY约束
- 称为主键约束,oracle表只能包含一个主键约束。
- 主键可能是1列或多列的组合,应用程序和用户经常可以根据这些列唯一地标识表中任意给定的记录
- 创建表并不一定必须包含主键,但是这不符合关系型设计原则。Oracle实际给表的每一行增加了一个rowid列,强制的保证记录的唯一性。

t1    char(10)   primary key,//在列项后面直接跟上PRIMARY KEY ( dtype, dterm, Start_date)//用PRIMARY KEY语句进行声明

UNIQUE约束
- 主键约束强制实现了记录的唯一性和NOT NULL,但是实际中不是所有的唯一性都可以成为主键。
用法
- 对于某些情况而言可能并不需要一定为NOT NULL,但是一定得满足唯一性,此时会用到UNIQUE约束。

FOREIGN KEY约束
- 数据库中最常见的完整性需求之一是,要求通过与其他表中的数据进行比较,验证某个表中的数据。
- 外键约束,约束了其他表中数据的规范
创建方式:
外键约束既可以在表的初始创建时进行创建,也可以事后补充。无论何时创建外键约束,被引用表必须已经存在且定义了被引用的主键约束或UNIQUE约束。

create table foo (  foo_key        number  primary key,  foo_custno  number,  constraint foo_cust_fk foreign key ( foo_custno)  references oe.customers ( customer_id ) );

-设定外键约束的行为

  • 删除了引用表中的失效记录(on delete cascade);
  • 对任何将要失效的记录,设置其引用列的值为空值(on delete set null);

外键约束与空值

  • 外键约束与主键约束不同。主键约束要求唯一性和非空,而外键约束没有对非空值的要求。
  • 即使在任何外键约束的列中包含空值,也仍然允许将这样的记录插入表中,而不会违反该外键约束。
  • 如果希望确保输入的列中不包含空值,在外键约束的声明中的每一列必须显式地给出NOT NULL约束。

CHECK约束

  1. CHECK约束是最灵活的声明性约束类型。
  2. CHECK约束可以使用一个或多个对数据记录进行检查的条件。除了可以在单一CHECK约束中使用复合条件,还可以对同一列应用多个CHECK约束。
  3. 如果需要指定多个CHECK约束,必须验证其组合逻辑以证实这些约束相互之间没有冲突。

创建方法:
建表时创建:

CONSTRAINT stu_sex_CK CHECK(stuSex IN('男','女')),

后面添加:

alter table customers  add constraint customer_credit_limit_max2     check ( credit_limit <= 10000 )  add constraint customer_marital_status check      ( marital_status in (‘married’, ‘single’, ‘divorced’)  add constraint customer_gender     check ( gender in (‘M’, ‘F’));

CHECK约束的不足:表中定义的这些完整的日期值,必须准备随时对其进行修改。
这种情况下使用简单的INSERT触发器可以更加合理地处理这样的问题。

约束应用–ALTER TABLE

删除约束:

alter table table_name   drop constraint constraint_name;

增加约束:

alter table table_name add constraint constraint_name 约束类型
0 0
原创粉丝点击