Oracle中常见约束(Constraints)的创建和分类:
创建
创建方式可分为两种:
(一)可以在创建表的时候规定约束(通过 CREATE TABLE 语句)
(二)或者在表创建之后也可以(通过 ALTER TABLE 语句)
分类
1、非空约束:not null
作用:约束强制列不接受 NULL 值
例:
create
2、唯一约束:unique
作用:约束唯一标识数据库表中的每条记录
例:
create table demo02(
empno number(4) unique,
ename varchar2(10),
job varchar2(8)
);
insert into demo02 values(1234,'zhangsan','SALES');
insert into demo02 values(1234,'lisi','SALES');--empno字段违反约束,无法执行
insert into demo02 values(null,'wangwu','SALES');
3、检查约束:check
作用:约束用于限制列中的值的范围
例:
create table demo04(
empno number(4),
ename varchar2(10),
job varchar2(8),
age number(3) check(age>0 and age<200),
gender varchar2(3) check(gender='男' or gender='女')
);
insert into demo04 values(1234,'zhangsan','SALES',56,'男')
insert into demo04 values(1234,'zhangsan','SALES',44,'详') --gender 字段违反约束,无法执行
4、主键约束:primary key
作用:约束唯一标识数据库表中的每条记录,主键列不能包含 NULL 值
例:
create table demo07(
empno number(4) primary key,
ename varchar2(10),
age number(3)
)
insert into demo07 values(1234,'zhangsan',18);
insert into demo07 values(1234,'lisi',18); --empno字段值违反唯一性约束
insert into demo07 values(null,'wangwu',20); --empno字段值违反非空约束
5、外键约束:foreign key
作用:指向另一个表中的 PRIMARY KEY,约束用于预防破坏表之间连接的动作
例:
create table t_class(
classid number(2) primary key,--主键
classname varchar2(20) not null,
classnum varchar2(30)
)
insert into t_class values(10, '三(1)班','教室6');
insert into t_class values(20, '三(2)班','教室3');
insert into t_class values(30, '三(3)班','教室4');
create table t_student(
stuid number(8) primary key,
stuname varchar2(30) not null,
stuphone varchar2(11),
classid varchar2(2) references t_class(classnum) --外键
)
insert into t_student values(11111111,'方子恒',110,10);
insert into t_student values(11111112,'马子明',120,20);
insert into t_student values(11111113,'王福禄',130,10);
--存在外键的表为从表,被依赖的表为主表
--外键不一定为主表的主键,也可以为主表的唯一键
以上约束的创建都是在建表的时候创建约束,除此之外还可以在修改表的时候创建约束
例如:
-- 创建约束(add constraint 约束名称 约束的关键字(对应的列))
alter table demo07 add constraint uq_demo07_ename unique(ename);
-- 删除约束(drop constraint 约束名称)
alter table demo07 drop constraint uq_demo07_ename
Oracle中索引的创建及使用
索引(index):
创建:
-- create index 索引名称 on 表名(列)
create index idx_emp_ename_job on emp(ename) -- 对单个列创建索引
create index idx_emp_ename_job on emp(ename,job) -- 对多个列创建索引
创建条件:
1.当数据量非常大的时候
2.当该列的值不经常重复的情况下
3.当该列的值不容易发生变化的情况下
说明:只有添加索引的列,通过该列进行查询时,速度才可以变快;通常情况下, 数据库会为我们的表自动创建索引,为表中的唯一键列自动的添加索引