oracle sql语句笔记(三)

2014-11-24 09:49:26 · 作者: · 浏览: 4
通过数据字典视图查看约束。

唯一性约束特点:

唯一性约束用于确保所在的字段(或字段组合)不出现重复值。唯一性约束字段允许出现空值。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 --如果不存在就创建,如果存在就替换

视图