1、非空约束
DROP TABLE member PURGE; CREATE TABLE member( mid NUMBER, name VARCHAR2(20) NOT NULL );
2、唯一约束
DROP TABLE member PURGE; CREATE TABLE member( mid NUMBER, name VARCHAR2(20), CONSTRAINT uk_mid UNIQUE(mid) );
3、检查约束
DROP TABLE member PURGE; CREATE TABLE member( mid NUMBER, name VARCHAR2(20), CONSTRAINT ck_mid CHECK( mid BETWEEN 1 AND 100) );
--检查约束会降低数据库的性能,一般用的比较少。
4、主键约束
DROP TABLE member PURGE; CREATE TABLE member( mid NUMBER, name VARCHAR2(20), CONSTRAINT pk_mid PRIMARY KEY(mid) );
5、外键约束
DROP TABLE member PURGE DROP TABLE book PURGE CREATE TABLE member( mid NUMBER, name VARCHAR2(20) NOT NULL, CONSTRAINT pk_mid PRIMARY KEY(mid) ) --父表 CREATE TABLE book( bid NUMBER, title VARCHAR2(20), mid NUMBER, CONSTRAINT pk_bid PRIMARY KEY(bid), CONSTRAINT fk_mid FOREIGN KEY(mid) REFERENCES member(mid) )--子表 --子表mid取值范围仅在父表中
删除带有外键约束的表
1、如果表中存在外键约束关系,应该先删除父表再删除子表。也可以使用不建议使用的强制删除
DROP TABLE member CASCADE CONSTRAINT;
2、父表中作为子表关联的外键字段必须设置为主键约束或者是唯一约束
3、默认情况下,如果父表记录中有对应的子表记录,那么父表记录无法被删除。如果要删除应该先删除父表中的内容然后再删除子表中的内容。也可以在建外键约束时这样写
CONSTRAINT fk_mid FOREIGN KEY(mid) REFERENCE member(mid) ON DELETE CASCADE;
在很多时候这样的级联删除并不合适,就相当于解散一个部门但不能将部门里的所有员工全部解雇一样,这个时候就需要级联更新
CONSTRAINT fk_mid FOREIGN KEY(mid) REFERENCE member(mid) ON DELETE SET NULL;
修改表约束
语法:ALTER TABLE 表名称 ADD CONSTRAINT 约束名称 约束类型(字段)[其他选项]
为member表添加主键约束
ALTER TABLE member ADD CONSTRAINT pk_mid PRIMARY KEY(mid);
说明:对于五种约束而言:以上语法使用于检查(CHECK)、唯一(UNIQUE)、主键(PRIMARY KEY)、外键(FOREIGN KEY)四类约束。
如果要为表中添加非空约束,只有一种方式,使用修改表结构的操作完成,如
ALTER TABLE member MODIFY(name VARCHAR2(20) NOT NULL)
删除表约束
语法 ALTER TABLE 表名称 DROP CONSTRAINT 约束名称 删除member表主键约束 ALTER TABLE member DROP CONSTRAINT pk_mid;