Chapter_表及完整性约束_.PPT
文本预览下载声明
* * * * * * * * * * * * * * * * * 修改book表增加主-外键约束 CREATE TABLE book ( bid NUMBER PRIMARY KEY NOT NULL , bname VARCHAR(30), bprice NUMBER(5,2), pid VARCHAR(18), CONSTRAINT person_book_pid_fk FOREIGN KEY(pid) REFERENCES person(pid) ); 说明: 此时,可以保证两张表的数据的完整性,不会出现找不到对应数据的情况。 在使用主-外键关联的时候也要有以下的注意点; 在子表中设置的外键在父表中必须是主键或是主表的唯一性约束的字段 删除时应该先删除子表,再删除父表 DROP TABLE person ; DROP TABLE book ; 则会出现错误信息,应改为如下删除方式: DROP TABLE book ; DROP TABLE person; 可以使用强制性的删除手段: DROP TABLE person CASCADE CONSTRAINT ; 不管约束,而直接删除,但是这种做法一般不建议使用,因为会产生垃圾数据。 如果删除person表中的一条数据时(如果该数据与book表中的一条记录相关联)则删除无法成功,因为在子表中存在此项的关联,所以无法删除,那么,此时如果要想完成删除操作的话,则必须先将 book 表中对应的数据删除掉。 如果,希望一个表中的数据在删除时,可以自动删除掉其对应的子表记录,则就可以使用级联删除的操作。 DROP TABLE person ; DROP TABLE book ; CREATE TABLE person( pid VARCHAR2(18) , name VARCHAR2(200) , age NUMBER(3) , birthday DATE, sex VARCHAR2(2) , CONSTRAINT person_pid_pk PRIMARY KEY(pid) , CONSTRAINT person_name_uk UNIQUE(name) , CONSTRAINT person_age_ck CHECK(age BETWEEN 0 AND 150) , CONSTRAINT person_sex_ck CHECK(sex IN (男,女,中)) ); CREATE TABLE book ( bid NUMBER PRIMARY KEY NOT NULL , bname VARCHAR(30), bprice NUMBER(5,2), pid VARCHAR(18), CONSTRAINT person_book_pid_fk FOREIGN KEY(pid) REFERENCES person(pid) ON DELETE CASCADE ); INSERT INTO person(pid,name,age,birthday,sex) VALUES (11111111111111111,张三,30,TO_DATE(1976-02-13,yyyy-mm-dd),女) ; INSERT INTO book(bid,bname,bprice,pid) VALUES (1,JAVA SE,89.9,11111111111111111) ; 再执行删除“张三”,能够将“张三”对应的书籍一并删除。 确保字段值不允许为空 只能在字段级定义 非空约束(NOT NULL) 非空约束(NOT NULL) CREATE TABLE employees( employee_id NUMBER(6), last_name VARCHAR2(25) NOT NULL , salary NUMBER(8,2), commission_pct NUMBER(2,2), hire_date DATE CONSTRAINT emp_hire_date_nn N
显示全部