oracle约束:主键约束,外键约束以及非空约束和唯一约束以及check约束

1.约束分类

1)表级约束:应用于表,对表的多个列起作用
2)列级约束:应用于表的一列,只对该列起作用

oracle约束:主键约束,外键约束以及非空约束和唯一约束以及check约束

2.定义主键约束

语法格式:

CREATE TABLE [schema.] table(
column datatype [DEFAULT expr]
[colunm_constraint(完整性约束)],
...
[table_constraint(完整性约束)];
)

eg:

CREATE TABLE emp(
emp NUMBER(4),
ename VARCHAR2(10),
deptno NUMBER(7,2) not null,
CONTRAINT emp_empo_pk PRIMARY KEY(EMPNO);
);

1)定义列级约束

column [CONSTRAINT constraint_name] constraint_type;

2)定义表级约束

column,...
[CONSTRAINT constraint_name] constraint_type
(column,...)

eg:
①在empxx数据表中定义empno为主键约束

create table empxx(empno number(4) primary key) ;

②:在empxx数据表中定义empno为主键约束

create table empxx(empno number(4),
constraint empxx_empno_pk primary key(empno));

删除主键约束:

alter table person drop constraint person_id_pk;

3.定义非空约束

1.语法:

column_name data_type[CONSTRAINT constraint_name] NOT NULL

eg:

create table employee(
empo number(4),
ename varchar2(10) NOT NULL,
job varchar2(9),
deptno NUMBER(7,2) not null
);

2.修改数据表时添加 NOT NULL约束
1)语法:

 alter table table_name MODIFY colunm_name data_type NOT NULL;

eg:

 alter table person MODIFY name NOT NULL;

3.删除 NOT NULL约束

alter table table_name MODIFY colunm_name NULL

eg:

alter table person MODIFY name NULL;

4.定义唯一约束

1.语法:

column_name data_type[CONSTRAINT constraint_name] UNIQUE;

可定义在表一级和列一级约束
eg:
1)表一级约束

create table deptment(
deptno NUMBER(2),
dname varchar2(14),
CONSTRAINT dept_dname_uk UNIQUE(dname)
);

2)列一级约束

alter table person ADD UNIQUE(name);

5.外键约束

FOREIGN KEY约束是指外键约束,用于引用本表或另一个表中的一列或一组列。
FORElGN KEY约束具有如下特点:
被引用的列或列组应该具有主键约束或唯一约束。
引用列的取值只能为被引用列的值或NUL值。
可以为一个列或一组列定义 FOREIGN KEY约束。
引用列与被引用列可以在同一个表中,这种情况称为“自引用”。
如果引用列中存储了被引用列的某个值,则不能直接删除被引用列中的这个值,否则会与第
二条相矛盾。如果一定要删除,需要先删除引用列中的这个值,然后再删除被引用列中的这
个值
1)创建表时添加 FOREIGN KEY约束

column_name1 data_type[CONSTRANT constrant_name] REFERENCES table_name (column_name2)

eg:
①创建图书类别表type

CREATE TABLE type(
Tid NUMBER(4) PRIMARY KEY,
Tname varchar2(10) NOT NULL
) ;

②创建图书信息表book,并用外键关联

create table book(
Bid number(4) primary key,
bname varchar2(20) not null,
Tid number(4),
 constraint book_type FOREIGN KEY(Tid) REFERENCES type(Tid)
);

③在book表中外键约束使用 SET NULL 关键字(执行此步不执行第二步)

create table book(
bid number(4) primary key,
Bname varchar2(20) NOT NULL,
Tid Number(4),
constraint book_type FOREIGN KEY(Tid) REFERENCES type(Tid)
on delete set null
);

如果加on delete cascade 可以一步删除表格
④ 接下来,插入数据看一下表格

insert into type(tid,tname) values(1,'历史类');
insert into book(bid,bname,tid) values(1,'史记',1);
delete from type where tid=1;
select * from book;

结果:
oracle约束:主键约束,外键约束以及非空约束和唯一约束以及check约束
特点:
(1)插入、修改
主表约束字表(主表里没有的数据,子表中不可以出现)
(2)删除
字表约束主表(只要字表里有数据,主表就不可以被删除)

6.check约束

check约束是过滤无意义或者不符合插入要求的数据
因为较为简单。所以此约束举例说明
①为表person中的sex列添加check约束,只能传递男女参数

alter table person add check(sex in('男','女'));

②插入记录测试

inster into person(id,name,sex,birthday) values(1,'李云','女',null);

格式一:

create table tablename(column check);

格式二:

create table  tablename(column,constraint 约束名 check(column 条件表达式));