3、 删除父表之前必须首先先删除对应的子表,否则无法删除
DROP TABLE book PURGE; DROP TABLE member PURGE;
但是这样做明显很麻烦,因为对于一个未知的数据库,如果要按照此类方式进行,则必须首先知道其父子关系,所以在Oracle之中专门提供了一个强制性删除表的操作,即:不再关心约束,在删除的时候写上一句“CASCADE CONSTRAINT”。
DROP TABLE member CASCADE CONSTRAINT PURGE; DROP TABLE book CASCADE CONSTRAINT PURGE;
此时,不关心子表是否存在,直接强制性的删除父表。
合理做法:在以后进行数据表删除的时候,最好是先删除子表,之后再删除父表。
六、修改约束
约束本身也属于数据库对象,那么也肯定可以进行修改操作,而且只要是修改都使用ALTER指令,约束的修改主要指的是以下两种操作:
- 为表增加约束:
ALTER TABLE 表名称 ADD CONSTRAINT 约束名称 约束类型(字段);
- 删除表中的约束:
ALTER TABLE 表名称 DROP CONSTRAINT 约束名称;
可以发现,如果要维护约束,肯定需要一个正确的名字才可以,可是在这五种约束之中,非空约束作为一个特殊的约束无法操作,现在有如下一张数据表:
DROP TABLE member CASCADE CONSTRAINT PURGE; CREATE TABLE member( mid NUMBER, name VARCHAR2(50) NOT NULL, age NUMBER(3) );范例:为表中增加主键约束
ALTER TABLE member ADD CONSTRAINT pk_mid PRIMARY KEY(mid);
增加数据:
INSERT INTO member(mid,name,age) VALUES(1,'张三',30); INSERT INTO member(mid,name,age) VALUES(2,'李四',300);
现在在member表中已经存在了年龄上的非法数据,所以下面为member表增加检查约束:
ALTER TABLE member ADD CONSTRAINT ck_age CHECK(age BETWEEN 0 AND 250);
这个时候在表中已经存在了违反约束的数据,所以肯定无法增加。
范例:删除member表中的mid上的主键约束
ALTER TABLE member DROP CONSTRAINT pk_mid;
可是,跟表结构一样,约束最好也不要修改,而且记住,表建立的同时一定要将约束定义好,以后的使用之中建议就不要去改变了。
七、查询约束
在Oracle之中所有的对象都会在数据字典之中保存,而约束也是一样的,所以如果要想知道有哪些约束,可以直接查询“user_constraints”数据字典:
SELECT owner,constraint_name,table_name FROM user_constraints;
但是这个查询出来的约束只是告诉了你名字,而并没有告诉在哪个字段上有此约束,所以此时可以查看另外一张数据字典表“user_cons_columns”;
COL owner FOR A15; COL constraint_name FOR A15; COL table_name FOR A15; COL column_name FOR A15; SELECT owner,constraint_name,table_name,column_name FROM user_cons_columns;
这些维护工作大部分由专门的DBA负责。
- 删除表中的约束:
