Oracle数据库基础(五)--索引,触发器

时间:2021-04-19 05:07:57
索引
B-Tree结构   请参照相应的图例


1--索引是一种允许直接访问数据表中某一数据行的树形结构,为了提高查询效率而引入,
   是独立于表的对象,可以存放在与表不同的表空间中;
2--索引记录中存有索引关键字和指向表中数据的指针(地址)
3--对索引进行的I/O操作比对表的操要少得多
4--索引一旦被建立就将被oracle系统自动维护,查询语句中不用指定使用哪个索引


rowid:伪列,唯一标识一条数据记录,可以理解为行记录的地址
select rowid,username from t_user;


当建立primary key(主键)或者unique constraint(唯一约束)时,唯一索引将被自动创建 
当创建一张数据表时,rowid自动添加到该表,是系统自动生成的


创建索引
create index index_user_id on table_name(id);
create index index_t_index on t_index(id); 


查看当前用户的数据对象的名称和类型
select object_name,object_type from user_object;


删除索引
drop index index_t_index;


创建存储过程
create or replace procedure proc_index
as
begin
   for i in 2001..10000 loop
   insert into t_index values(i,'tom'||i,'111222'||i,'m',sysdate);
   commit;
   end loop;
end;
/


执行存储过程
exec proc_index;


打开执行耗时
set timing on;


-------------------------------------------------------------------
案例:检测索引的效率
-------------------------------------------------------------------
触发器--trigger
是数据库对象的一种,编写方式类似存储过程,与某张表相关联,当进行DML语句操作的时候,可以引起触发器的执行
目的是对插入记录一致性,正确性,规范性的控制


创建触发器
create or replace trigger trigger_t_trigger  --创建触发器的关键字和名称
after insert on t_trigger                    --作用在哪张表上的某操作后
for each row                                 --对每一行都执行该控制
declare                                      --声明
begin
   dbms_output.put_line('插入了一条数据');                   --触发器的具体业务逻辑代码块
end;
/


set serverout on;
create table t_trigger(id number,username varchar2(100));


---------------------------------------------
获取插入数据的值
create or replace trigger trigger_t_trigger  
after insert on t_trigger                    
for each row                                 
declare                                  
begin
    dbms_output.put_line('插入了一条数据');  
    dbms_output.put_line('id='||:new.id);  
dbms_output.put_line('username='||:new.username);  
end;
/
 
set serverout on;
insert into t_trigger values(3,'tommy');
----------------------------------------------
获取更新操作的value值
create or replace trigger trigger_t_trigger  
after insert or update on t_trigger                    
for each row                                 
declare                                  
begin
    dbms_output.put_line('更新了一条数据');  
    dbms_output.put_line('old.username='||:old.username);  
    dbms_output.put_line('new.username='||:new.username);  
end;
/
 
set serverout on;
insert into t_trigger values(4,'tommy');

update t_trigger set username='lilei' where id=4;