1.约束分类1)表级约束:应用于表,对表的多个列起作用2)列级约束:应用于表的一列,只对该列起作用2.定义主键约束语法格式:CREATETABLE[schema.]table(co
1.约束分类
1)表级约束:应用于表,对表的多个列起作用
2)列级约束:应用于表的一列,只对该列起作用
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;
结果:
特点:
(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 条件表达式));