1、 索引
① 在关系数据库表中为了能够找到数据,表中的每一行都用一个RowID来标识。 RowID告诉数据库这一行的准确位置,包括所在的文件、该文件中的块和该块中的行地址。
② 索引是帮助用户在表中快速地找到记录的数据库结构。它既可以提高数据库性能,又能够保证列值的唯一性。
③ 索引如何被创建
a) 自动创建索引:当你为一张表定义主关键或唯一性约束条件时一个惟一的索引就已经被创建了。
b) 手动创建索引: 用户可以自己创建索引。
对一列或多列创建索引
CREATE INDEX index ON table (column[, column]...);
何时需要创建一个索引:
在WHERE语句中该列被经常用到。
该列所包含的值有很大取值范围。
在WHERE语句中有两个或两个以上的列被经常在一起使用的时候。
表很大。
何时不需要创建一个索引:
表很小时。
这列在查询中不经常用到。
表不断地被更新。
基于函数的索引:是一个基于表达式的索引,建立于表的列,SQL函数等。
2、 同义词:
同义词是一个对象的别名,使用同义词可以让多个用户访问而不用添加拥有者的名称作为前缀。同义词是一个指向Oracl对象的指针,本身不包含自己的数据。
3、 视图:
视图是由一个或若干个基表产生的数据的集合,它不占用存储空间。
视图犹如数据库的窗户,管理员定义这些“窗户”的位置后,用户就只能查看他可以看到的数据。视图不是数据表,它仅是一些SQL查询语句的集合,作用是按照不同的要求从数据表中提取不同的数据。
视图中并没有存放数据,而仅仅是一条SELECT语句。对用户而言,如果不告诉是在视图中操作的话,还以为是在表中工作。使用视图可以增强数据表的安全性和隐蔽数据的复杂性。
视图与表不同,视图是一个虚表,即视图所对应的数据不进行实际存储,数据库中只存储视图的定义,对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的表。
视图与表的区别:
相同之处:
1、视图和表一样有列组成,其查询方式与表完全相同。
2、和表一样,用户也可以在视图中插入、更新或删除数据,在视图中做这些操作时与在表中是一样的。
区别:
1、与表不同,视图中没有数据,而仅仅是一条SQL查询语句。按此查询语句检索出的数据以表的形式表示。视图中的列可以在一个或多个基本表中找到。视图不使用物理存储位置来存储数据。
2、视图的定义(列的安排、授予的权限等等)存储在数据字典中。对一个视图进行查询时,视图将查询其基于的表,并且以视图定义所规定的格式和顺序返回值。
3、由于视图没有直接相关的物理数据,所以不能像表那样被索引。
4、子查询中可以包含复杂的SELECT语句,子查询不能包含ORDER BY语句。
4、 序列
序列是一种可被多个用户使用的用于自动产生一系列唯一(有序)数字的数据库对象。序列是一个共享的对象。通常被用来产生主键值。
NEXTVAL返回下一个序列的值。一次返回一个值。
CURRVAL当前的序列值。
每引用一次序列的伪列NEXTVAL,就会按照序列的定义产生一个新的序列码;而通过序列伪列CURRVAL可以反复利用当前的序列码。
适用场合:
1、INSERT语句的VALUES子句中
2、SELECT语句中的前面选择的表列名中
3、UPDATE语句中的SET子句
不适用场合:
1、子查询
2、视图定义的查询中
3、带有DISTINCT操作符的SELECT语句
4、带有GROUP BY或ORDER BY子句的SELECT语句
5、SELECT语句的WHERE子句中
6、检查约束条件中
PL/SQL编程
5、 游标
游标是从数据表中提取出来的数据,以临时表的形式存放在内存中,在游标中有一个数据指针,在初始状态下指向的是首记录,利用fetch语句可以移动该指针,从而对游标中的数据进行各种操作,然后将操作结果写回数据表中。
① 游标的定义
游标作为一种数据类型,首先必须进行定义,其语法如下。
cursor 游标名 is select 语句:
cursor是定义游标的关键字,select是建立游标的数据表查询命令。
② 游标的打开
要使用创建好的游标就要打开游标,语法形式如下。
open 游标名;
打开游标的过程有以下两个步骤。
1) 、将符合条件的记录送入内存。
2)、将指针指向第一条记录
③游标数据的提取
要提取游标中的数据,需要使用fetch命令,语法形式如下。
fetch 游标名 into 变量名1,变量名2,……; 或
fetch 游标名 into 记录型变量名;
④游标的关闭
使用完游标后,需要关闭游标,使用close命令,语法形式如下。
close 游标名
游标的重要属性
① %isopen属性
属性功能:测试游标是否打开,如果没有打开游标就是用fetch语句并提示错误。
② %FOUND
逻辑值,游标是否找到一条记录。如游标找到记录其值为True,反之为False
③ %NOTFOUND
逻辑值,游标没有找到记录,是%FOUND属性的逻辑非。
④ %ROWCOUNT
返回提取游标记录的行数
6、 过程与函数
过程procedure 也叫存储过程,是由SQL语句和PL/SQL语句组合在一起为执行某一个任务的一个可执行单位。我们在使用时可以调用,过程没有返回值。
函数function和过程的结构类似,也是有SQL语句和PL/SQL语句组合在一起,执行某一任务的一个可执行单位。过程和函数的差别在于,函数总返回单个值给调用者,而过程没有值返回给调用者。
无参过程的创建
语法结构
Create or replace procedure 过程名 as
声明语句段;
begin
执行语句段;
exception
异常处理语句段;
End;
带参数过程的创建
①参数类型
在PL/SQL过程中,可以有3中类型的参数。
in 参数:读入参数,主程序向过程传递参数值。
Out 参数:读出参数,过程向主程序传递参数值。
in out参数:双向参数,过程与主程序双向交流数据。
②定义带参数过程的语法
create or replace procedure 过程名(
参数1[in|out|in out]数据类型
[,参数2[in|out|in out] 数据类型]
……
[,参数n[in|out|in out] 数据类型]
)
(is|as)
声明语句段;
Begin
执行语句段;
Exception
异常处理语句段;
End;
过程的执行
①利用begin..end执行
begin
过程名;
end;
③ 利用execute执行
execute 过程名
7、 触发器
触发器是一种特殊类型的存储过程,由一些SQL语句组成,主要用于执行强制性的业务规则或要求,但不返回结果。当对数据库的操作触发了触发器的条件时,系统将自动执行触发器里设置的SQL语句,完成某些特定的功能。当数据表被修改时,与其相关的触发器隐式地被激发执行。对表的INSERT、UPDATE或DELETE操作都可以定义触发器。
触发器的结构
触发事件或语句:引起触发器被激发的SQL语句,是对指定表执行的INSERT、UPDATE或DELETE语句。
触发器限制:一个布尔表达式,当触发器激发时该条件必须为TRUE。触发器的限制是用WHEN子句来指定。
触发器的动作:一个PL/SQL块(过程),由SQL语句和PL/SQL语句组成。当触发语句发出,触发器的限制计算为TRUE时,它被执行。在触发器动作的语句中,可使用触发器的处理的当前行的列值(包括新值和旧值),使用的形式为:NEW.列名(引用新值)或者OLD.列名(引用旧值)。
触发器的分类
按照激活触发的操作分类
激活触发的操作是指对数据表实行什么样的操作时激活触发器,分为3类:
INSERT触发器:对数据表插入数据时执行触发器动作。
UPDATE触发器:对数据表更新数据时执行触发器动作。
DELETE触发器:对数据表删除数据时执行触发器动作。
触发器的创建
可以使用CREATE TRIGGER来创建一个触发器。与过程不同,每个触发器都必须和某个特定的表相关,而且每一个触发器都只和作用于该表上的一个或多个动作有关。
可以使用任何想用的名称来命名触发器,但是每个触发器都必须由惟一的名称。建议在触发器的名称内包含与触发器相关联的表和动作。
- 触发器的创建
在企业管理器下面创建触发器。
- 触发器的修改
在企业管理器下面用鼠标右键点击触发器名称选择‘查看/编辑详细资料
- 触发器的删除
在企业管理器下面用鼠标右键选择移去
- 触发器的启用
ALTER TRIGGER “HR”.”TEMPTRIGGER”
ENABLE
如果要启用数据表的所有触发器,可以使用下面的SQL代码。
ALTER TABLE “HR”.”EMPLOYEES”
ENABLE ALL TRIGGERS;
- 触发器的停用
触发器的停用可以执行下面的SQL语句来完成。
ALTER TRIGGER “HR”.”TEMPTRIGGER”
DISABLE