约束:对数据库中的表的字段加一些限制.
这是保护数据的最后一道屏障.
列级别约束:在定义表的一列时 直接在这一列的后面加约束限制.
表级别约束:在定义完表的所有列之后,再选择某些
列加约束限制.
5种具体的约束:
主键 primary key
这个字段是非空的 并且是唯一的
一个表的主键只能有一个
唯一 unique
这个字段的值 是不能重复的
非空 not null
这个字段的值 不能是NULL值
检查 check
这个字段的值 必须符合检查条件
外键 references foreign key
on delete cascade
on delete set null
---------------------------------------
1.主键的列级约束
create table testcolcons(
id number primary key,
name varchar2(30)
);
insert into testcolcons values(1,'yaoming');
commit;
insert into testcolcons values(1,'maidi');
commit;
ERROR at line 1:
ORA-00001: unique constraint ( OPENLAB.SYS_C00233568)
OPENLAB.SYS_C00233568
insert into testcolcons values(NULL,'maidi');
SYS_C00233568 这是系统为你的约束起的名字
系统能保证这个名字不重复。
自己给约束起名字 : constraint 约束名字
create table testcolcons(
id number constraint testcolcons_id_pk primary key,
name varchar2(30)
);
------------
id number constraint
testcolcons_id_pk primary key,
name varchar2(30) constraint
testcolcons_name_uk unique
);
3.列级约束的 非空
create table testcolcons(
id number not null,
name varchar2(30)
);
4.检查约束 check
检查条件工资必须大于4500
create table testcolcons(
id number constraint
testcolcons_id_pk primary key,
name varchar2(30),
salary number constraint
testcolcons_salary_ck check(salary>4500)
);
----------------------------------
表级约束:在定义完所有的列之后 再选择某些列加约束
1.主键的表级约束
create table testtablecons(
id number ,
fname varchar2(30),
sname varchar2(30),
salary number,
constraint testtablecons_id_pk
primary key(id)
);
因为表级约束 可以做 联合约束 primary key(id,fname)
上面的 表中 把fname 设置成表级的唯一
salary 改成 表级的检查 >4500
因为非空没有联合非空 导致非空没有表级约束
drop table testtablecons;
create table testtablecons(
id number ,
fname varchar2(30),
sname varchar2(30),
salary number,
constraint testtablecons_id_pk
primary key(id),
constraint testtablecons_fname_uk
unique(fname),
constraint testtablecons_salary_ck
check(salary>4500)
);
---------------------------------------------------
外键约束:
列级别的外键约束
外键约束涉及到两张表 一张叫父表 (主表)
另一张叫子表 (从表)
定义了外键的表 就是子表
如果两张表建立了主外键关系 则 外键字段的值
要么引用自父表 要么是空值。
1.建表
一般先建立 父表 后建立子表
先不建立主键关系 然后通过修改表加约束的形式
(效率 建表顺序 比较复杂)
create table parent(
id number primary key,
name varchar2(30)
);
create table child(
id number primary key,
name varchar2(30),
fid number references parent(id) --引用 parent表的 id 作为外键
);
2.放入数据
一般先插入父表数据 后插子表数据
除非子表的外键值是NULL
insert into child values(1,'test',1);
insert into child values(2,'test',3);
ORA-02291: integrity constraint (OPENLAB.SYS_C00234204
3.删除表 先删子表 后删父表
除非父子表中无数据 或者使用
drop table 表名 cascade constraints;
先解除主外键关系 再删除表
drop table parent cascade constraints;
4.删除数据
一般先删子表 后删父表中
除非没有和父表中的数据 关联的子表数据
或者你使用级联
on delete cascade 级联删除
这是保护数据的最后一道屏障.
列级别约束:在定义表的一列时 直接在这一列的后面加约束限制.
表级别约束:在定义完表的所有列之后,再选择某些
列加约束限制.
5种具体的约束:
主键 primary key
这个字段是非空的 并且是唯一的
一个表的主键只能有一个
唯一 unique
这个字段的值 是不能重复的
非空 not null
这个字段的值 不能是NULL值
检查 check
这个字段的值 必须符合检查条件
外键 references foreign key
on delete cascade
on delete set null
---------------------------------------
1.主键的列级约束
create table testcolcons(
id number primary key,
name varchar2(30)
);
insert into testcolcons values(1,'yaoming');
commit;
insert into testcolcons values(1,'maidi');
commit;
ERROR at line 1:
ORA-00001: unique constraint ( OPENLAB.SYS_C00233568)
OPENLAB.SYS_C00233568
insert into testcolcons values(NULL,'maidi');
SYS_C00233568 这是系统为你的约束起的名字
系统能保证这个名字不重复。
自己给约束起名字 : constraint 约束名字
create table testcolcons(
id number constraint testcolcons_id_pk primary key,
name varchar2(30)
);
------------
2.列级约束 unique
create table testcolcons(id number constraint
testcolcons_id_pk primary key,
name varchar2(30) constraint
testcolcons_name_uk unique
);
3.列级约束的 非空
create table testcolcons(
id number not null,
name varchar2(30)
);
4.检查约束 check
检查条件工资必须大于4500
create table testcolcons(
id number constraint
testcolcons_id_pk primary key,
name varchar2(30),
salary number constraint
testcolcons_salary_ck check(salary>4500)
);
----------------------------------
表级约束:在定义完所有的列之后 再选择某些列加约束
1.主键的表级约束
create table testtablecons(
id number ,
fname varchar2(30),
sname varchar2(30),
salary number,
constraint testtablecons_id_pk
primary key(id)
);
因为表级约束 可以做 联合约束 primary key(id,fname)
上面的 表中 把fname 设置成表级的唯一
salary 改成 表级的检查 >4500
因为非空没有联合非空 导致非空没有表级约束
drop table testtablecons;
create table testtablecons(
id number ,
fname varchar2(30),
sname varchar2(30),
salary number,
constraint testtablecons_id_pk
primary key(id),
constraint testtablecons_fname_uk
unique(fname),
constraint testtablecons_salary_ck
check(salary>4500)
);
---------------------------------------------------
外键约束:
列级别的外键约束
外键约束涉及到两张表 一张叫父表 (主表)
另一张叫子表 (从表)
定义了外键的表 就是子表
如果两张表建立了主外键关系 则 外键字段的值
要么引用自父表 要么是空值。
1.建表
一般先建立 父表 后建立子表
先不建立主键关系 然后通过修改表加约束的形式
(效率 建表顺序 比较复杂)
create table parent(
id number primary key,
name varchar2(30)
);
create table child(
id number primary key,
name varchar2(30),
fid number references parent(id) --引用 parent表的 id 作为外键
);
2.放入数据
一般先插入父表数据 后插子表数据
除非子表的外键值是NULL
insert into child values(1,'test',1);
insert into child values(2,'test',3);
ORA-02291: integrity constraint (OPENLAB.SYS_C00234204
3.删除表 先删子表 后删父表
除非父子表中无数据 或者使用
drop table 表名 cascade constraints;
先解除主外键关系 再删除表
drop table parent cascade constraints;
4.删除数据
一般先删子表 后删父表中
除非没有和父表中的数据 关联的子表数据
或者你使用级联
on delete cascade 级联删除
on delete set null 级联置空
create table parent(
id number primary key,
name varchar2(30)
);
create table child(
id number primary key,
name varchar2(30),
fid number references parent(id) on delete cascade --级联删除
);