<span style="font-size:18px;">第9节 约束(constraint)
1.约束是作用在表的列上的条件
2.not null ; unique ; primary key ; foreign key ; check
3.创建约束;在创建(orclae table)的同时添加约束,分为:表级
和列级约束
4."修改"约束:通过alter table 的命令
--1.not null 非空约束
--not null 声明对的话,只能使用列级约束
create table emp3 (
id number(10) not null ,
name varchar2(20) constraint emp3_name_nn not null,--显示的起名(建议)
email varchar2(20),
hire_date date
)
select * from emp3
insert into emp3
values(1001,'韩梅梅' , 'HAN@126.COM',SYSDATE)
select * from emp3
insert into emp3
values(002,'李磊','sss2QQ.COM',SYSDATE)
select * from emp3
----如下的操作不能执行成功。因为name有not null的约束!
insert into emp3
values(1003,null,'sdf@qq.com',sysdate);
--2.unique:唯一性约束
create table emp4(
id number(10) constraint emp4_id_uk unique,
name varchar2(20),
email varchar2(20)constraint emp4_name_nn not null,
salary number(10,2),
hire_date date,
constraint emp4_name_uk unique(name)--表级约束
)
insert into emp4
values (1002 , 'll','lucy@wqw.com',6000.00,sysdate);
select * from emp4
--声明为unique的列可以添加多个null值
insert into emp4
values(1004,null,'xxx3@163.com',80280,sysdate)
insert into emp4
values(1005,null,'x3xx3@163.com',803280,sysdate)
--primary key:主键约束:能够唯一的定位表中的一条数据
--声明主键的对应的列有非空且唯一的约束
create table emp6(
id number(10) constraint emp_id_pk primary key,
name varchar2(20),
salary number(10,2)
)
insert into emp6
values (1001,'Lucy',8000);
insert into emp6
values(1001,'Lily',9000);
insert into emp6
value(1001,'Tom',8000);
--4.外键:foreign key
--声明为外键的列的列值必须都存在于相关联的另一个
--表的指定列中。
create table emp7(
id number(5),
name varchar2(15),
email varchar2(20),
dept_id number(4),
constraint emp6_id_pk primary key(id),
constraint emp6_dept_fk foreign key(dept_id)
references departments(department_id)
)
insert into emp7
values(1001,'AA',null,1000);
select * from emp7
insert into emp7
values(1002,'BB',null,107);
create table emp8(
id number(5),
name varchar2(15),
email varchar2(20),
dept_id number(4)constraint emp8 references departments(department_id) on delete set null
)
--级联删除 on delete cascade
--级联置空 on delete set null
--5 check
create table emp9(
id number(5) constraint emp9 primary key,
name varchar2(15),
email varchar2(20),
salary number(4) check(salary >2000)
)
select * from emp9
insert into emp9
values(1001,'AA','23989@qq.com',3000);
--不满足约束条件
insert into emp9
values(1002,'BB','23989@qq.com',2000);
--以上操作均是在创建表的同时进行的。如下的操作是修改表的时候进行的
--1.添加约束。除了not null 使用modify添加之外,其他4个约束都使用add
alter table emp9
modify(salary number(4)constraint ee not null )
alter table emp9
add constraint eme unique(name);
--2.删除约束:使用drop constraint + 约束名
alter table emp9
drop constraint eme;
alter table emp9
drop constraint ee
alter table emp9
drop constraint emp9
--3无效化约束 和有效化约束
create table emp10(
id number(5),
name varchar2(15) constraint emp10_name_nn not null ,
salary number (10,2),
email varchar2(20),
constraint emp_10_nk unique (email)
)
insert into emp10
values(1002,null,2300,'AA@126.com');
alter table emp10
disable constraint emp10_name_nn;
select * from emp10
--使用命令行的方式查询约束(了解)
select constraint_name constraint_type,
search_condition
from user_constraints
where table_name = 'EMP10'
select constraint_name , column_name
from user_cons_columns
where table_name = 'EMPLOYEES'
</span>
(尚硅谷)Orcale 约束的建立
最新推荐文章于 2024-04-29 19:28:06 发布