Oracle数据库约束

一、约束

1、非空约束:NOT NULL

2、唯一约束:UK(UNIQUE KEY)

3、主键约束:PK(PRIMARY KEY ),PK=唯一约束+非空约束

4、检查约束:UK(FOREIGN KEY  ),插入或更新数据时如果值不满足条件(如年龄设为1000),则报错。如果不是必须,不要设置太多检查约束,会导致数据更新效率下降

5、外键约束:FK(CHECK KEY ),定义在两个表之中,指两个表关系的配置,可以理解为父表子表关系

如下新建一张班级表,包含学号,姓名,性别:

CREATE TABLE class(

    cid    NUMBER ,    

   name  VARCHAR2(30)   NOT NULL,

   age     NUMBER(3),

   sex      VARCHAR2(20),

   CONSTRAINT cid_pk PRIMARY(mid),

   CONSTRAINT  age_ck   CHECK(age BETWEEN 0 and 200),  

   CONSTRAINT  sex _ck   CHECK(sex IN('男','女'))

);

mid_pk为主键的命名的名称,age_ck,sex_ck为检查约束两个名称

定义一张书表,书的拥有者对应一个学生

CREATE TABLE book(

    bid    NUMBER,

    title VARCHAR2(20)   NOT NULL,

    cid    NUMBER,

    CONSTRAINT  bid_pk  PRIMARYKEY(bid),    --主键

    CONSTRAINT  cid_fk  FOREIGNKEY(cid) REFERENCES class(cid)   ON DELETE CASCADE  --外键,级联删除

);

book表中的cid字段的值由class中的cid来决定,可以为空,若取值不在class表中cid值,则报错违反完整约束条件。

注意外键约束带来的问题

1.、要先删除子表后才能删除父表,也可不管不顾强制删除 DROP TABLE class CASCADE CONSTRAINT,但是我们一般尽可能先删除子表,再删除父表。

2、子表中设置为外键的字段在主表中必须设置为主键或唯一约束

3、数据层次的麻烦之解决

     级联删除操作(ON DELETE CASCADE):删除父表数据的时候,利用级联删除操作把子表的数据也删除

     级联数据更新(ON DELETE NULL):删除父表数据,对应子表数据中外键值设为空

     开发之中是否使用级联关系,需根据具体业务定义的。

二、约束修改

1、设置主键约束,如将mid字段设置为主键

ALTER TABLE class ADD CONSTRAINT cid_pk PRIMARYKEY(mid);

2、非空约束的修改

ALTER TABLE class MODIFY(name VARCHAR2(30) NOT NULL)

如果报错,需将错误数据删除(为空的)

3.、删除主键约束

ALTER TABLE class DROP CONTRAINT cid_pk

4、删除非空约束不能如上,需 使用"user_cons_columns"数据字典表,从里面找到非空约束的对象名称,而后才可以删除。

查出对象名称:select * from user_cons_columns;

删除:ALTER TABLE class DROP CONTRAINT 对象值

总结:约束最好在新建表的时候设置好,不要中途再修改表结构和约束。

猜你喜欢

转载自blog.csdn.net/feiyang5260/article/details/81122460