1.索引、事务

索引分类:B树索引、位索引

 

 

1.创建标准索引

   create index index_name 

   on  table_name(column1…);

 

2,创建唯一索引

   create unique index  index_name 

   on table_name(column1…);

 

3,.创建位索引

   create bitmap index index_name

   on  table_name(column1…);

 

事务:

原子性、一致性、隔离性、永久性

设置自动提交:set autocommit on/off

 

触发器

 create [or replace] trigger  trigger_name

after / before / instead of     after触发器的工作原理:先保存数据库数据的更新,再激活触发器

                                            before触发器的工作原理:先激活触发器,再保存更新数据库数据

[ insert]  [ [or] update [of column_list] ]  [ [or] delete]

on table_or_view_name

[referencing {old [as] old / new [as] new} ]

[for each row]  行级触发器,如果没有该行就是表级触发器

[when  condition]

pl/sql_block;

   :new   代表用户即将插入数据库中的某行记录

   :old   代表即将删除的该行数据记录

 

触发器中不能使用 :rollback、commit、create、 dorp、 alter、 savepoint等内容

 

例1:当用户插入或更新 成绩表中的记录时候,就输出一个提示“触发器响应了”

create  or replace trigger  trigger1

before insert or update on 成绩表

begin

        dbms_output.put_line('触发器响应了');

end;

例2:当向学生表中插入数据时,需要控制学生学号不可以为负数

  create  or replace trigger trigger2

        before  insert on student  

  for each row

  begin 

    if  :now.sno <0   then 

      raise_application_error(-2001,'学号错误,不能插入表中');

    end if;

      end;

 例3:当向学生表 中插入 数据时,需要控制学生学号 不能为负数,如果为负数,则将负数改为绝对值的正数插入

       create or replace trigger trigger3

  before insert on student 

  for each row

  begin 

    if  :now.no<0  then 

      :now.sno  :=   -:now.sno;

    end if;

  end;

 

 

instead  of触发器:修改视图中,非键值表中的列

例4:学生表(sno,sname,sage)

         住址表(sno,zname)

        视图(sno,sname,zname)更新视图 将学生名为kite的住址换成安徽

  create or replace trigger trigger4

  instead of  update  on view_stu_add  

  for each row

  declare 

         aa  number :=0;

   begin

   select  sno  into  aa      where sname = :old.sname;

      delete  address    where   sno   =  aa;

          insert  into  address  values(aa,:new.zz);

end;

    

 

上一篇:错误


下一篇:sql基础操作