Oracle学习笔记(二)

--2010-09-16  21:21:11

四、约束

 

 

 

    约束就是指对插入数据的各种限制,例如:人员的姓名不能为空,人的年龄只能在0~150岁之间。

   约束可以对数据库中的数据进行保护。 约束可以在建表的时候直接声明,也可以为已建好的表添加约束。

 

4.1 非空约束

    例如:姓名不能为空。

4.2 primary key主键约束

    不能重复;

    不能为空。

4.3 unique唯一约束

    不能为空(空值除外)。

4.4 check条件约束

    插入的数据必须满足某些条件

 age NUMBER CHECK(age BETWEEN 0 AND 150);

4.5 foreign key外键约束

     例如:有以下一种情况:
    · 一个人有很多本书:
    · Person表
    · Book表:而且book中的每一条记录表示一本书的信息,一本书的信息属于一个人
 CREATE TABLE book ( bid NUMBER PRIMARY KEY NOT NULL , name VARCHAR(50) , -- 书应该属于一个人 pid NUMBER ) ;  

     如果使用了以上的表直接创建,则插入下面的记录有效:

INSERT INTO book(bid,name,pid) VALUES(1001,'JAVA',12) ;

    以上的代码没有任何错误,但是没有任何意义,因为一本书应该属于一个人,所以在此处的pid的取值应该与person表中的pid一致。此时就需要外键的支持。

 4.6 级联删除

    那么再分析:
    如果假设一个人的人员信息没有了,那么此人所拥有的书还应该存在吗?最好,如果person中的一条数据没了,则对应在book中的数据也应该同时消失。
    在之前的结构上执行delete语句,删除person表中的一条记录:
DELETE FROM person WHERE pid=11;
    提示不能删除的错误:因为book中存在了此项的关联,如果person表中的一条数据删除了,则肯定会直接影响到book表中数据的完整性,所以不让删除。
    如果非要删除,则应该先删除book表中的对应数据,之后再删除person表中的对应数据。
    此时如果想完成删除person表的数据同时自动删除掉book表的数据操作,则必须使用级联删除。
    在建立外键的时候必须指定级联删除(ON DELETE CASCADE)。

CREATE TABLE book ( bid NUMBER PRIMARY KEY NOT NULL , name VARCHAR(50) , -- 书应该属于一个人 pid NUMBER , -- 建立约束:book_pid_fk,与person中的pid为主-外键关系 CONSTRAINT book_pid_fk FOREIGN KEY(pid) REFERENCES person(pid) ON DELETE CASCADE ) ;

 

 

 

DROP TABLE book ; DROP TABLE person ; CREATE TABLE person ( pid NUMBER , name VARCHAR(30) NOT NULL , tel VARCHAR(50) , age NUMBER ) ; CREATE TABLE book ( bid NUMBER , name VARCHAR(50) , pid NUMBER ) ;

4.7 添加约束

    1、为两个表添加主键:
   · person表pid为主键:

ALTER TABLE person ADD CONSTRAINT person_pid_pk PRIMARY KEY(pid) ; 
   · book表bid为主键:
ALTER TABLE book ADD CONSTRAINT book_bid_pk PRIMARY KEY(bid) ;      

    2、为person表中的tel添加唯一约束:
ALTER TABLE person ADD CONSTRAINT person_tel_uk UNIQUE(tel) ; 
    3、为person表中的age添加检查约束:
ALTER TABLE person ADD CONSTRAINT person_age_ck CHECK(age BETWEEN 0 AND 150) ;     

   4、为book表中的pid添加与person的主-外键约束,要求带级联删除
ALTER TABLE book ADD CONSTRAINT person_book_pid_fk FOREIGN KEY (pid) REFERENCES person(pid) ON DELETE CASCADE ;

4.8 删除约束

ALTER TABLE book DROP CONSTRAINT person_book_pid_fk ; alter table student drop unique(tel); 

4.9 启用约束

ALTER TABLE book enable CONSTRAINT person_book_pid_fk ;

4.10 禁用约束

ALTER TABLE book disable CONSTRAINT person_book_pid_fk ;

你可能感兴趣的:(oracle,数据库,table,null,delete,insert)