Oracle基础-约束篇

内容简介

对Oracle数据库中约束进行了介绍,所涉及的表为scott用户下的empdept表。

查看约束

-- 查看指定表的约束
select * from user_constraints 
where table_name='EMP';                                                     --表名字为系统创建,必须大写.

非空约束


-- 创建表时,设置非空约束
create table emp(
empno number(2)  not null,                                                  -- not null 不为空
ename varchar2(10)
);
 
-- 修改非空约束
alter table emp
modify empno number(2) null;                                                -- null表示可以为空

-- 创建表时,设置字段级主键约束
create table emp(
empno number(2) primary key,                                                -- 在创建表时指定主键字段 (唯一,且非空),主键名交由系统创建
ename varchar2(10)
);

-- 创建表时,设置表级主键约束
create table emp(                                                           -- 创建一个新表
empno number(2),
ename varchar2(10),                                                         -- 注意字段声明后逗号结束,再声明段级的约束
constraint pk_empno                                                         -- pk表示主键
primary key(empno)
);

主键约束

-- 创建表时,设置表级联合主键
createtable emp(
empno number(2),
ename varchar2(10),
constraint  pk_empno_ename
primary key (empno,ename)                                                   --联合主键,字段内的值组合不能有重复
);


--增加主键约束
alter table emp
add constraint pk_empno                                                     --只能增加创建之前没有创建的,修改只能删除后重新定义
primary key (empno);
 
--更改主键的名字
alter table emp                                                             --有问题!!!
rename constraint emp to pk_empno;
 
--禁用主键
alter table emp
disable constraint emp;
 
--查看主键状态
select status from user_constraints where table_name='EMP';                  --引号内的,默认是系统生成的文字,大写. 
 
--启用主键
alter table emp
enable constraints pk_empno;
 
--删除主键
--1)指定名字删除
alter table emp
drop constraint pk_empno;
 
--2)直接删除主键
alter table emp
drop primary key;                                                            --直接删除主键

外键约束

--外键约束 (需要主表的主键,键的数据类型应该一致
--1)列级设置
create table emp (
empno number(2),
ename varchar2(10),
deptno number(2) references dept (deptno)                                    --如果主表主键为联合主键,则都需要写出   
);
 
--2)表级设置
create table emp(
empno number(2),
ename varchar2(10),
deptno number(2),                                                            --注意创建完后,添加逗号分隔.
constraint fk_deptno                                                         --外键约束
foreign key (deptno)                                                         --从表
references dept(deptno)                                                      --主表
on delete cascade                                                            --选项,及联删除,主表删除时,从表该数据也删除
);          
 
--增加外键约束
alter table emp
add constraint pk_deptno                                                     --外键约束的名称不能同名
foreign key (deptno)
references dept(deptno);
 
--禁用外键约束
alter table emp
disable constraint pk_deptno;

--启用外检
alter table sc3
enable constraint pk_deptno;
 
--查看外键约束的状态
select constraint_name,constraint_type ,status 
from user_constraints 
where table_name='EMP';

--删除外键约束
alter table emp
drop constraint pk_deptno;

唯一约束

空并不受唯一约束限制

--唯一约束,确保表中数据的唯一.                             	
--区别于主键约束:1.可以为空,可以有多个,可以为多个字段联合生成唯一约束
--1)列级设置
create table emp(
empno number(2) unique,
ename varchar2(10) unique);

--表级设置
create table emp(
empno number(2),
ename varchar2(10),
constraint uk_empno_ename                                                    -- 指定唯一约束的名字
unique (empno,ename));                                                       -- 当多条字段为唯一约束时,只用在其后用逗号分隔即可
 
--在创建表后修唯一约束
alter table emp                                              
add constraint uk_empno                                                      --添加约束的名字
unique(empno);                                                               --指定唯一约束的字段
 
--禁用唯一约束
alter table emp
disable constraint uk_empno;
 
--查询约束状态
select constraint_name,constraint_type,status 
from user_constraints 
where table_name = 'EMP';
 
--启用唯一约束
alter table emp
enable constraint uk_empno;
 
--删除唯一约束
alter table emp
drop constraint uk_empno;

检查约束

--检查约束 ,可以存在多个,对多个字段进行检查
--1)列级设置
create table emp(
empno number(2),
ename varchar2(10),
sal number(3) check(sal between 100 and 3000 )                               --注意,between中,小数在前,大数在后
);
      
--2)表级设置
create table emp(
empno number(2),
ename varchar2(10),
sal number(3),
constraint ck_sal
check (sal between 100 and 3000 )                                           --通过在表的结束后追加设置,完成检查约束
);

--修改增加检查约束 
alter table emp
add constraint ck_sal
check (sal between 100 and 3000 );

--禁用检查约束
alter table emp
disable constraint ck_sal;
 
--查看检查约束的状态
select constraint_name,constraint_type,status 
from user_constraints  
where table_name = 'EMP';
 
--启用检查约束
alter table emp
enable constraint ck_sal;                                                   --如果记录中有不满足约束的条件,其不可以再修改回去检查约束
 
--删除约束
alter table emp
drop constraint ck_sal;

位图索引

使用压缩格式存放数据,便于检索具有大量重复数据的列

create bitmap index emp_deptno_idx on emp(deptno);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值