代码改变世界

Oracle约束管理

  默默不语  阅读(195)  评论(0编辑  收藏  举报
复制代码
--约束(检查、校验)
--创建约束的三种方式:1.定义时加在字段后,2.定义表时写在语句最后,3.声明表后再追加
--五种约束:非空约束、唯一约束、检查约束、主键、外键
--1.非空约束:被非空约束修饰的字段不能为空not null(可简写为nn),列级(只针对这一列生效)
--方式一:定义时加在字段后
create table EMPP
(
  empno    NUMBER(4) not null,
  ename    VARCHAR2(10),
  job      VARCHAR2(9),
  mgr      NUMBER(4),
  hiredate DATE,
  sal      NUMBER(7,2),
  comm     NUMBER(7,2),
  deptno   NUMBER(2)
)
--错误,empno不允许为空
insert into empp(ename) values ('chen');

--方式二:定义表时写在语句最后
--非空约束为列级约束,方式2只添加表级约束

--方式三:声明表后再追加
--非空约束为列级约束,方式3只添加表级约束
alter table empp add constraint nn_empp_ename not null;

--2.唯一约束,表中该列数据不允许重复(本次要求ename唯一)
--方式一:定义时加在字段后
drop table empp PURGE;
create table EMPP
(
  empno    NUMBER(4) not null,
  ename    VARCHAR2(10) unique,
  job      VARCHAR2(9),
  mgr      NUMBER(4),
  hiredate DATE,
  sal      NUMBER(7,2),
  comm     NUMBER(7,2),
  deptno   NUMBER(2)
)
insert into empp(empno,ename) values (1,'chen');
--错误,违反唯一约束条件
insert into empp(empno,ename) values (1,'chen');

--方式二:定义表时写在语句最后(empno和ename联合起来是唯一的)
create table EMPP
(
  empno    NUMBER(4) not null,
  ename    VARCHAR2(10),
  job      VARCHAR2(9),
  mgr      NUMBER(4),
  hiredate DATE,
  sal      NUMBER(7,2),
  comm     NUMBER(7,2),
  deptno   NUMBER(2),
  constraint uq_empp_ename unique(empno,ename)
);
insert into empp(empno,ename) values (1,'chen');
insert into empp(empno,ename) values (2,'chen');

--方式三:声明表后再追加(empno和ename联合起来是唯一的)
alter table empp add constraint uq_empp_ename unique(empno,ename);

--3.检查约束:指定列的值必须满足要求的条件(假设job只能取员工或经理,sal工资不能小于1000)
--注:如果检查约束要引用其他列,则不能使用列级约束,必须使用表级约束(方式2或3)
--方式一:定义时加在字段后
create table EMPP
(
  empno    NUMBER(4) not null,
  ename    VARCHAR2(10),
  job      VARCHAR2(9) check (job in ('员工','经理')) ,
  mgr      NUMBER(4),
  hiredate DATE,
  sal      NUMBER(7,2) check(sal>1000),
  comm     NUMBER(7,2),
  deptno   NUMBER(2)
);
--错误,sal不符合大于1000的条件
insert into empp (empno,ename,job,sal) values (1,'CHEN','经理',900);

--方式二:定义表时写在语句最后(工资+奖金不能小于1000)
create table EMPP
(
  empno    NUMBER(4) not null,
  ename    VARCHAR2(10),
  job      VARCHAR2(9) ,
  mgr      NUMBER(4),
  hiredate DATE,
  sal      NUMBER(7,2) check(sal>1000),
  comm     NUMBER(7,2),
  deptno   NUMBER(2),
  constraint ck_empp_job_sal check (sal+comm>1000);
);
--方式三:声明表后再追加(工资+奖金不能小于1000)
alter table empp add constraint ck_empp_salandcomm check (sal+comm>1000);

--4.主键约束:指定表的主键,唯一标识(主键约束:非空且唯一)
--方式一:定义时加在字段后
create table EMPP
(
  empno    NUMBER(4) primary key,
  ename    VARCHAR2(10),
  job      VARCHAR2(9) ,
  mgr      NUMBER(4),
  hiredate DATE,
  sal      NUMBER(7,2),
  comm     NUMBER(7,2),
  deptno   NUMBER(2)
);
--方式二:定义表时写在语句最后
create table EMPP
(
  empno    NUMBER(4),
  ename    VARCHAR2(10),
  job      VARCHAR2(9) ,
  mgr      NUMBER(4),
  hiredate DATE,
  sal      NUMBER(7,2),
  comm     NUMBER(7,2),
  deptno   NUMBER(2),
  constraint pk_empp_empnoandename primary key(empno,ename); 
);

--方式三:声明表后再追加
alter table empp add constraint pk_empp_empnoandename primary key(empno,ename);

--5.外键约束:引用另一个表的一列
--方式一:定义时加在字段后,无法添加外键约束

--方式2添加外键约束
--注:外键关联的字段必须为另一张表的唯一主键(不能是联合主键的其中一个)
create table EMPP
(
  empno    NUMBER(4),
  ename    VARCHAR2(10),
  deptno   NUMBER(4),
  constraint fk_empp_deptt_deptno foreign key(deptno) references deptt(deptno)
);
create table DEPTT
(
  deptno    NUMBER(4) primary key,
  dname     VARCHAR2(10)
);
--方式3添加外键约束
alter table empp add constraint fk_empp_deptt_deptno foreign key (deptno) references deptt(deptno) on delete cascade;

--新增这个员工的部门编号,在部门表中没有这个部门
--删除部门时,如果部门下有员工也不能删除这个部门,要先删净部门下员工(如果在创建序列规定了删除策略也可按策略删除)
insert into empp (empno,ename,deptno) values (12,'张三1',10);
insert into deptt (deptno,dname) values (10,'部门1');

delete from empp where deptno=10;
delete from deptt where deptno=10;
复制代码

 

编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
历史上的今天:
2019-03-21 《信息技术手册查重错误比对分析》开发记录3
点击右上角即可分享
微信分享提示