zoukankan      html  css  js  c++  java
  • Oracle学习【索引及触发器】

    索引
    B_Tree结构 请参照 响应图例

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

    当建立primary key(主键)或者unique constraint(唯一约束)时,唯一索引将被自动创建

    当创建一张数据表时,rowid自动添加到该表,是系统自动生成的

    创建表t_index
    create table t_index(
    id number,
    username varchar2(100),
    password varchar2(48),
    gender char,
    addtime date
    );

    插入记录
    insert into t_index values (1,'Owen','121212','m',sysdate);

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

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

    删除索引
    drop index index_t_index;

    创建存储过程(循环插入1999条记录)
    create or replace procedure proc_index
    as
    begin
    for i in 2..2000 loop
    insert into t_index values (i,'Owen'||i,'121212'||i,'m',sysdate);
    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;

    创建表t_trigger
    create table t_trigger(
    id number,
    username varchar2(100)
    );

    插入一条记录
    insert into t_trigger values(1,'Owen');


    创建触发器
    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;

    插入一条记录
    update t_trigger set username='Jack' where id=1;

    删除触发器
    drop trigger trigger_t_trigger;

    案例:
    当在第一张表中进行update操作后,对第二张表进行某个值得修改。
    例如:在对表t_trigger进行修改的时候,对表t_index也进行修改

    创建触发器
    create or replace trigger trigger_t_trigger
    after insert or update on t_trigger
    for each row
    declare
    begin
    update t_index set username='Jack' where id=1;
    end;

    修改t_trigger表中的数据
    update t_trigger set username='Owen' where id=1;



    作业:
    使用java和oracle数据库连接
    做一个CRUD操作,使用存储过程进行增加数据(序列)、修改数据、查询单个数据,使用视图查询列表数据

    创建表student
    create table student(
    stuid number,
    sname varchar2(100),
    sage number
    );

    创建序列
    create sequence seq_student --创建序列的关键字和序列名称

    插入一条数据
    insert into student values (seq_student.nextval,'Owen',23);

    创建插入数据的存储过程
    create or replace procedure proc_add(pp1 in varchar2,pp2 in number)
    as
    begin
    insert into student values (seq_student.nextval,pp1,pp2);
    end;

    执行存储过程
    call proc_add('Owen',23);
    ---------------------------------
    创建删除的存储过程
    create or replace procedure proc_delete(pp in number)
    as
    begin
    delete from student where stuid=pp;
    end;

    执行存储过程
    call proc_delete(2);

    -------------------------------------
    创建修改的存储过程
    create or replace procedure proc_modify(pp1 in varchar2,pp2 in number,pp3 in number)
    as
    begin
    update sudent set sname=pp1,sage=pp2 where stuid=pp3;
    end;

    执行存储过程
    call proc_modify('Tim',21,3);

    ---------------------------------------
    创建查询单个数据的存储过程
    create or replace procedure proc_search_one(pp1 in number,pp2 out varchar2,pp3 out number)
    as
    begin
    select sname,sage into pp2,pp3 from student where stuid=pp1;
    end;

    执行存储过程
    set serverout on;
    var pp2 varchar2;
    var pp3 number;
    call proc_search_one(3,:pp2,:pp3);

    ---------------------------------------
    建立视图(不显示stuid)
    create or replace view v_student
    as
    select sname,sage from student;

    查询视图
    select * from v_student;

  • 相关阅读:
    关于float与double
    【编程实践】母牛生小牛
    wlan的QOS配置
    C语言itoa函数和atoi 函数
    类似于QQ的简单的聊天代码
    多线程吃饺子练习
    线程练习
    接口练习
    电视练习
    5.22
  • 原文地址:https://www.cnblogs.com/xujianbo/p/4921842.html
Copyright © 2011-2022 走看看