数据库常见的约束类型及使用
非空约束 NOT NULL
创建表时定义
create table dept80(id number,name varchar2(20) not null,salary number constraint dept80_not not null);
在数据类型后面添加constraint 进行约束命名,不添加的话服务器会自动为你添加
修改表时定义
alter tabke dept80 add(location_id number);
alter table dept80 modify location_id not null;
唯一约束 UNIQUE
指定列的值或列的组合值,使得表中的行必须是唯一的
创建表时定义
create table dept90(id number unique,name varchar2(20));
修改表时定义
alter table dept90 modify number name unique;
主键约束 PRIMARY KEY
表中的数据不能是空也必须是唯一的
创建表时定义
create table dept70(id number primary key);
修改表时定义
alter table dept90 modify(id primary key);
创建联合主键
create table dept50(id number,name varchar2(20),primary key(id,name);
需要注意,不能直接在列后面添加,需要将联合主键写在primary key ()内
外键约束
在一个表和另一个表之间建立强制外键关系,预防破坏表之间连接的行为。约束也能防止非法数据插入外键列,因为它必须是指向的那个表的值之一。
创建表时定义
create table dept40(id number,d_id number ,foreign key(d_id) references dept60(id))
只考虑外键,代码以d_id 为外键(foreign) 参照(references)dept60(id) ;需要注意创建表时定义,不能爱列后面直接添加(在,后定义外键,参照表要提前存在)
修改表时定义
alter table dept50 add foreign(d_id) references dept_60(id);
用户自定义约束条件 CHECK
指定一个必须为真的条件,满足条件填入
创建表时
create table dept30(id number,salary number(8,2) check(salary>1000));
修改表时
alter table dept50 add check(salary>1000);
约束类型使用原则:
-
创建表和修改表时,可以给约束起名时constraint 名称,但约束名称要唯一,若未起名,oracle会默认生成
-
使用联合主键和外键约束时,不能直接在定义的数据类型后面直接添加,需单独在后面添加
查询与禁用约束
查询约束
select constraint_name,constraint_type,search_condition from user_constraints where table_name = 'DEPT40'
表名都是大写,search_condition 查询是否有check条件
禁用约束 DISABLE
alter table dept60 disable constraint dept60_pk cascade;
禁用的时候若存在主键有其他表的外键参考,则需要同时禁用,外键约束也需要禁用,使用casecade,否则报错
启用约束 ENABLE
alter table dept40 enable constraint dept40_fk;
禁用和启用需要使用constraint 约束名