【SQL】定义约束

数据库常见的约束类型及使用

非空约束 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;

截屏2020-08-18 上午11.02.02

禁用的时候若存在主键有其他表的外键参考,则需要同时禁用,外键约束也需要禁用,使用casecade,否则报错

启用约束 ENABLE

alter table dept40 enable constraint dept40_fk;

禁用和启用需要使用constraint 约束名

悲观者正确,乐观者成功
原文地址:https://www.cnblogs.com/freebule/p/13522332.html