唯一性约束特点:
唯一性约束用于确保所在的字段(或字段组合)不出现重复值。唯一性约束字段允许出现空值。Oracle会自动为唯一性约束创建对应的唯一性索引。唯一性约束既可以在字段级定义,也可以在表级定义。
Create table student(
Sid number(3) unique;
Name varchar2(20)
);
Create table student(
Sid number(3),
Name varchar2(20),
Constraint studnet_sid_un unique(sid)
);
Create table record(
Sid number(3),
Subject_name varchar2(20),
Record number(4),
Constraint record1_sid_subName_un unique(sid,subject_name)
); --sid和subject_name组合起来两个字段不能同时重复,单个字段可以重复。
主键约束
联合主键
由多个字段组合而成的主键也称联合主键
联合主键中每一个字段都不能为空
联合主键字段组合的值不能出现重复
联合主键只能定义为表级约束
举例:
Create table record(
Student_id number(3),
Subject_id varchar2(20),
Record number(3),
Constraint record_stuId_subId_pk primary key(student_id,subject_id)
);
外键约束foreign key
外键约束特点:外键用于确保相关的两个字段之间的参照关系,以实现完整性约束;
外键约束通常构建于来自不同表的两个字段之间;
子表外键列的值必须在主表参照列值的范围内,或者为空:
外键参照的必须是主表的主键或者唯一键;
主表外键值被子表参照时,主表相应记录不允许被删除
检查约束check
定义每一行(字段)都必须满足的条件
以条件表达式的形式给出数据需要符合的条件
条件表达式中不允许出现如下内容
条件表达式中不允许出现如下内容
Currval,nextval,level,rownum待伪列
Sysdate,uid,user,userevn等函数
对其他字段值的引用
Create table test1(
Name varchar2(20),
Age number(3) check(age>=0 and age<=120)
);
第章DDL与数据库对象
查看约束
查询用户字典视图user_constrains 例如:select * from user_constraints;
可得到用户的所有约束
查询用户字典视图user_cons_columns
可获知约束建立在哪些字段上
建表后添加约束
Alter table tablename
Add constraint student_sid_pk primary key(sid);
Alter table student
Modify(name not null); --非空约束必须使用modify子句添加
Alter table student
Modify(
Sid not null;
Name default '0' not null
);
删除约束
Alter table table_name
Drop constraint constraint_name;
Alter table student drop constraint student_sid_pk;
删除主键约束的另一种方式:alter table table_name primary key;
例如:alter table student drop primary key;
删除级连约束
在删除约束时,如果还存在与当前约束相关联的其它约束,则删除操作会失败,此时可使用cascade子句将其它关联约束一并删除。
Alter table table_name
Drop constraint constraint_name cascade;
例:create table empinfo(
Eid number(3) constraints empinfo_eid_pk primary key,
Ename varchar2(20)
);
Create table salary(
Eid number(3) references empinfo(eid)
);
Alter table empinfo drop constraints empinfo_eid_pk cascade;
在删除表中字段时,如果该字段处于多字段联合约束条件(联合主键,联合唯一键,存在参照当前字段的外键)中,则删除会失败,此时可使用cascade constraints 子句将与该字段相关的约束一并删除。
Create table record(
Student_id number(3),
Subject_id varchar2(20),
Record number(3),
Constraint record_stuId_subId_pk primary key(student_id,subject_id)
);
Alter table record drop (student_id) cascade constraints;
禁用约束
在alter table语句吕,还可使用disable constraint子句禁用已有约束。
也可使用cascade选项将相关联的约束也一并禁用。
Create table student(
Sid number(10),
Name varchar2(20),
Constraint student_sid_pk primary key(sid)
);
Alter table student disable constraint student_sid_pk;
视图
视图由一个或多个表中提取数据而成,是一种虚拟表,一经创建可以当作表来使用。
优点:简化复杂数据查询,提高运行效率,屏蔽数据库表结构,实现数据逻辑独立性,限制数据库访问,在相同数据上提供不同的视图,便于数据共享。
简单视图:只有一个基表,没有函数,没有分组,支持DML操作
复杂视图:一个或多个基表,使用函数,有分组,不一定支持DML操作。
创建视图:通过在create view语句中嵌入子查询的方式创建视图
Create or replace view myview1(编号,姓名,职位,工资) as select empno,ename,job,sal from emp where deptno=20;
查看视图结构Desc myview1; 删除视图:drop view myview1;
Create or replace --如果不存在就创建,如果存在就替换
视图