Oracle基础学习笔记(3)

来源:互联网 发布:普通摄像头改网络监控 编辑:程序博客网 时间:2024/05/26 12:55

管理表

1,主键约束

  表的主键可以确保在一个表中没有重复行,防止冗余的信息。

  添加主键:

Alter table another_dept add constraint another_dept_pk primary key(deptno);

 

注意:在创建主键约束时,一定要遵循下面的原则:

(1)      一个表中最多只能有一个主键约束

(2)      表中不能有任何两行在主键约束列上既有相同的值

(3)      主键列不能为空

 

2,外键约束

如果插入子表的行在外键列中具有非null值,那么父表行中必须在所引用的列中有相同的值。

语法格式如下:

Alter table child_table

Add constraint foreign_key_name

Foreign key(child_table_column)

References parent_table(parent_table_column);

 

3,唯一性约束

  唯一性约束可以确保表中的各行,对于值为非null的给定列或列组都具有唯一值。

  语法格式如下:

Alter table table_name

Add constraint unique_key_name

Unique(column_name);

 

4,检查约束

  检查约束就是指定表中某个列的取值范围。对于即将插入表中的数据来说,如果插入的数据满足检查约束指定的条件,则插入操作成功,否则插入操作失败。

 

例句:alter table students

Add constraint ck_gender

Check(gender in(‘female’,’male’));

 

5, 索引

语法格式:

Create index idx_emp_name

On tableName(column_name);

 

如果oracle有能力在一次扫描中读取多个数据块,那么他就会将考虑使用索引的阀值设置的相当高。如果oracle认为用户的查询将要选取记录的2%-5%或更多,那么他就会执行全表搜索,而不考虑索引是否可用。

为了防止数据块分割,在创建索引时可以设置pctfree属性

例句:

Create index idx on tableName(column_name) pctfree 0;

 

修改:

Alter index idx

Rebuild pctfree 10;

 

6, 索引和约束

当某一列有唯一性约束和主键约束时,无论用户是否喜欢,将会自动为这一列创建一个索引。

首先创建表,没有任何约束

接着创建索引(假设表为inventory)

Create indexs idx

On inventory(partno,warehouse)

Pctfree 10;

接下来向表中增加以下约束:

Alter table inventory add(

Constraint pk primary key(partno)

Using index idx);

 

这时,oracle将会检查它是否可以使用已经存在的索引,如果索引能够满足它,它就会使用这个索引。

 

7, 视图

例句:create view viewName(name)

      As

     Select name from emp;

 

查询视图:select * from viewName order by name;

 

注意:create or replace

 

删除视图:

     Drop view viewName;

 

8, 过程

使用过程代替PL/SQL程序块有许多好处,例如,增强可扩性,提高模块化水平,可重用性增强,可维护性加强,有利于抽象和数据的隐藏,增强安全性等。

 

例句:create or replace procedure

     Insert_into_t(p_parm in number)

     Is

     Begin

        Insert into t values(p_parm);

     End insert_into_t;

 

执行过程:

    Exec insert_into_t(p_parm=>100);

 

参数传递:

名称表示法:parm_name=>value

位置表示法:跟java语言传递参数一样

 

局域声明:

Declare

  Num1 number:=111;

 

9, 触发器

触发器是一种特殊的过程,但是用户不能直接调用触发器,触发器是当特定事件出现时自动执行的代码块。

 

触发器示例:

Create trigger biufer_emp_empno

Before insert or update

Of empno

On emp

Referencing old as old_value

New as new_value

For each row

When(new_value.empno<>7782)

Begin

:new _value.comm:=0;

End;

 

解析:before insert or update

Of empno

On emp

对emp表进行insert操作时

对emp的表的empno进行update操作时

When(new_value.empno<>7782)

 

这就是说,如果列的新值不等于7782时,触发器就会执行。任何布尔表达式都可以使用when子句。


原创粉丝点击