作者:mobiledu2502891987 | 来源:互联网 | 2014-07-11 17:33
Oracle基础学习笔记(3)管理表1,主键约束表的主键可以确保在一个表中没有重复行,防止冗余的信息。添加主键:Altertableanother_deptaddconstraintanother_dept_pkprimarykey(deptno);www...SyntaxHig
管理表
1,主键约束
表的主键可以确保在一个表中没有重复行,防止冗余的信息。
添加主键:
Alter table another_dept add constraint another_dept_pk primary key(deptno);
www.2cto.com
注意:在创建主键约束时,一定要遵循下面的原则:
(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);
www.2cto.com
如果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;
www.2cto.com
查询视图: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 www.2cto.com
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子句。
作者 pzhtpf