Oracle约束详解


①not null[非空]
该列不能为null
②unique[唯一]
用于指定某列的值,不能重复,但可以是null[可以是多个null,在SqlServer只能是一个null]
③primary key[主键]
用于唯一标识表行的数据,该列不能重复且不能为null
④foreign key[外键]
用于定义主表和从表之间的关系
外键约束要定义在从表上
主表则必须具有主键约束或是unique约束
当定义外键约束后,要求外键列数据必须在主表的列存在或是null
外键列和主键列的数据类型要一致

⑤check[检查]
用于强制行数据必须满足的条件

注意事项:
1、primary key和unique区别:
一个表可以有多个unique,但只能有一个主键
每张表都应该有一个主键
unique列的值可以为null,但主键不能
primary key所在的列,会自动创建索引,但是unique不会自动创建索引
2、注意[default]需在 字段名 和 约束 之间
create table test(
id number(4) primary key,
sex char(2) default '男' check(sex in('男', '女'))
);


===================
约束修改
===================
注意事项:
增加not null约束时,需要使用modify选项
而增加唉其它约束使用add选项

①not null--modify
alter table goods modify goodsName not null;
②unique[增加唯一约束]
alert table 表名 add constraint 约束名 unique(列名);
③check
alter table 表名 add constraint 约束名 check( 列名 in('北京', '上海', '武汉'));
④primary key[主键约束]
alter table 表名
add constraint 约束名 primary key(主键);
⑤foreign key[外键约束]
alter table 从表
add constraint 约束名
foreign key(关联字段) references 主表(关联字段);
⑥drop constraint[删除约束]
alter table 表名 drop constraint 约束名称;
⑦drop constraint primary key[删除主键约束]
alter table 表名 drop constraint primary key cascade;
[cascade]-->级联删除

====================================================
alter table 表名 add constraint 约束名 约束种类(字段)
alter table 表名 modify 字段名 not null;
====================================================

=====================
列级定义和表级定义
=====================
列级定义:
在定义表后,直接在列后定义约束,称之为列级定义
create table test(id number primary key,--->列级定义
name varchar2(40));

表级定义:
表级定义是指在定义了所有列后,再定义约束,这里需要注意
not null约束只能在列级上定义
create table test(id number,
name varchar2(40),
constraint pk_id primary key id --->表级定义
);

================
复合主键
================
一般情况下:使用列级定义即可,但是如果遇到定义复合主键(两列一起作为主键)
create table test(
iduser number(4),
idgoods number(4),
nums number(4),
constraint pk_user_goods primary key(iduser, idgoods) --->复合主键
);
不推荐使用复合主键

原文地址:https://www.cnblogs.com/qintangtao/p/2746720.html