Oracle 常见五种约束的定义和管理

约束定义:

约束是强加在表上的规则或条件。确保数据库满足业务规则。保证数据的完整性。当对表进行DML或DDL操作时,如果此操作会造成表中的数据违反约束条件或规则的话,系统就会拒绝执行这个操作。约束可以是列一级别的 也可以是表级别的。定义约束时没有给出约束的名字,ORACE系统将为该约束自动生成一个名字,其格式为SYS_Cn,其中n为自然数(强烈建议各位在创建表或增加约束时,给约束定义名称。).

约束功能:

实现一些业务规则,防止无效的垃圾数据进入数据库,维护数据库的完整性(完整性指正确性与一致性)。从而使数据库的开发和维护都更加容易。

约束分类:

非空(NOT NULL)约束 : 所约束的列不能为NULL值。否则就会报错。

语法格式:CONSTRAINT constraint_name NOT NULL


实例1:在创建BOOKINFO表时,给图书名称加上一个非空约束(book_name_nn)

CREATE TABLE BOOKINFO
(
  BOOKID NUMBER,
  BOOKNAME varchar2(50) constraint book_name_nn NOT NULL,
  PRICE DECIMAL,
  AUTHOR CHAR
);

实例2:为已存在的表BOOKINFO中的图书名称列加上一个非空约束(book_name_nn)

alter table BOOKINFO
modify (BOOKNAME varchar2(50) constraint book_name_nn not null);

 

唯一(UNIQUE)约束 : 在表中每一行中所定义的这列或这些列的值都不能相同。必须保证唯一性。否则就会违法约束条件。


语法格式:CONSTRAINT constraint_name UNIQUE(column_name)

实例3:创建BOOKINFO表时,为图书名称(BOOKNAME)列添加唯一约束(book_name_uq)

CREATE TABLE BOOKINFO
(
  BOOKID NUMBER,
  BOOKNAME varchar2(50),
  PRICE DECIMAL,
  AUTHOR CHAR,
  CONSTRAINT book_name_uq UNIQUE (BOOKNAME)
);

实例4:为已存在的表BOOKINFO中的图书名称列加上一个唯一约束(book_name_uq)

alter table BOOKINFO
add constraint book_name_uq UNIQUE(BOOKNAME);

 

主键(PRIMARY KEY)约束 : 唯一的标识表中的每一行,不能重复,不能为空。

语法格式:CONSTRAINT constraint_name primary key (column_name)

实例5:创建BOOKINFO表时,为图书ID(BOOKID)列添加主键约束(book_id_pk)

CREATE TABLE BOOKINFO
(
  BOOKID NUMBER,
  BOOKNAME varchar2(50),
  PRICE DECIMAL,
  AUTHOR CHAR,
  CONSTRAINT book_id_pk primary key (BOOKID)
);

 实例6:为已存在的表BOOKINFO中的图书ID列加上一个主键约束(book_id_pk)

alter table BOOKINFO
add constraint book_id_pk primary key(BOOKID);

 

外键(FOREIGN KEY)约束 : 用来维护从表(Child Table)和主表(Parent Table)之间的引用完整性. 外键约束是个有争议性的约束,它一方面能够维护数据库的数据一致性,数据的完整性。防止错误的垃圾数据入库; 另外一方面它会增加表插入、更新等SQL性能的额外开销。

语法格式 : CONSTRAINT constraint_name  foreign key(column_name) references 主表表名(主键列)

实例7:创建BOOKINFO表时,为图书类型(TYPEID)列添加外键约束(book_type_fk)

CREATE TABLE BOOKINFO
(
  BOOKID NUMBER,
  BOOKNAME varchar2(50),
  PRICE DECIMAL,
  AUTHOR CHAR,
  TYPEID NUMBER,
  CONSTRAINT book_type_fk foreign key (BOOKID) references BOOKTYPE (TYPEID)
);

这里要注意,在创建外键约束前一定要先创建BOOKTYPE表,并为TYPEID列添加主键约束.

CREATE TABLE BOOKTYPE
(
  TYPEID NUMBER,
  TYPENAME varchar2(50),
  CONSTRAINT book_type_pk primary key (TYPEID)
);

 实例8:为已存在的表BOOKINFO中的图书类型列(TYPEID)加上一个外键约束(book_type_fk)

alter table BOOKINFO
add constraint book_type_fk foreign key(BOOKID) references BOOKTYPE (TYPEID);

这里也要注意,在添加外键约束前必须先创建BOOKTYPE表,并为TYPEID列添加主键约束.

 

条件(CHECK)约束 : 表中每行都要满足该约束条件。条件约束既可以在表一级定义也可以在列一级定义。在一列上可以定义任意多个条件约束。

语法格式:CONSTRAINT constraint_name check (约束条件)

实例9:创建BOOKINFO表时,为图书价格(PRICE)列添加检查约束(book_price_ck),约束条件为:价格>0

CREATE TABLE BOOKINFO
(
  BOOKID NUMBER,
  BOOKNAME varchar2(50),
  PRICE DECIMAL,
  AUTHOR CHAR,
  CONSTRAINT book_price_ck check (PRICE>0)
);

实例10:为已存在的表BOOKINFO中的图书价格(PRICE)加上一个检查约束(book_price_ck),约束条件为:价格>0

alter table BOOKINFO
add constraint book_price_ck check (PRICE>0);

 

约束管理:

1.删除约束

ALTER TABLE BOOKINFO DROP CONSTRAINT 约束名;

2.有效化和无效化约束

使约束失效:

ALTER TABLE 表名 DISABLE CONSTRANT 约束名;

使约束条件生效:

ALTER TABLE 表名 ENABLE CONSTRANT 约束名;

 

你可能感兴趣的:(oracle)