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;
Oracle学习【索引及触发器】的更多相关文章
- Oracle 学习笔记 19 -- 触发器和包浅析(PL/SQL)
触发器是存放在数据库中的一种特殊类型的子程序.不能被用户直接调用,而是当特定事件或操作发生时由系统自己主动 调用执行.触发器不能接受參数.所以执行触发器就叫做触发或点火.Oracle事件指的是数据库的 ...
- Oracle学习笔记之触发器
触发器 触发器(trigger)是一些过程,与表关系密切,用于保护表中的数据,当一个基表被修改(INSERT.UPDATE或DELETE)时,触发器自动执行,例如通过触发器可实现多个表间数据的一致性和 ...
- MYSQL数据库学习----索引和触发器
一:索引 索引是创建在数据库表上,其作用是提高对表中数据的查询速度. 假设数据库中有一张1000条记录的表格,如果没有创建索引的话,用户想通过查询条件查询,实际上是把整个数据库中1000条记录都读取一 ...
- oracle 学习笔记之触发器
说明 数据库触发器是一个与表相关联的.存储的PL/SQL程序. 每当一个特定的数据操作语句(Insert,update,delete)在指定的表上发出时,Oracle自己主动地运行触发器中定义的语句序 ...
- Oracle学习笔记十三 触发器
简介 触发器是当特定事件出现时自动执行的存储过程,特定事件可以是执行更新的DML语句和DDL语句,触发器不能被显式调用. 触发器的功能: 1.自动生成数据 2.自定义复杂的安全权限 3.提供审计和 ...
- Oracle初级索引学习总结
前言 索引是常见的数据库对象,建立索引的目的是为了提高记录的检索速度.它的设置好坏,使用是否得当,极大地影响数据库应用程序和Database的性能.虽然有许多资料讲索引的用法,DBA和Develop ...
- Oracle 学习之触发器
1. 触发器简介 触发器是存储在数据库服务器中的程序单元,当一个表或一个视图被改变,或者数据库发生某些事件时,Oracle会自动触发触发器,并执行触发器中的代码.只有在触发器中定义的事件发生时,触发器 ...
- Oracle学习笔记—数据字典和常用命令(转载)
转载自: oracle常用数据字典和SQL语句总结 Oracle常用命令大全(很有用,做笔记) 一.Oracle数据字典 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的.比如一 ...
- 6. oracle学习入门系列之六 模式
oracle学习入门系列之六 模式 上篇咱们学习记录了ORACLE数据库中的数据库结构.内存结构和进程等.篇幅 蛤蟆感觉偏多了.这次要休整下,每次笔记不宜太多,不然与书籍有何差别. 我们要保证的是每次 ...
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
随机推荐
- 【转】iOS开发者申请发布证书及真机调试图文详解
原文网址:http://www.tqcto.com/article/mobile/57822.html 打开iOS Dev Center,选择Sign in,登陆(至少99美元账号),登陆之后在网页右 ...
- 【转】SourceTree的简单使用
原文网址:http://blog.csdn.net/u011439289/article/details/42126507 今天开始参与公司项目的代码编写,公司内部采用的是gitlib,所以用到了So ...
- svn文件提交时强制写注释
这个操作需要修改版本库中的一个钩子文件,在你创建的版本库中有一个hooks文件夹,初始的时候其中有一个文件叫pre-commit.tmpl 在windows下将其修改为pre-commit.bat,在 ...
- RobotFramework+Selenium2library+Appium+Python+RIDE安装指南
最近在测试APP+WEB,想找一个好的自动化测试工具.然后发现RIDE这工具,框架比较自由,支持中文,有测试报告. 一个好的自动化测试就应该包含:Case管理+脚本的编写+自动生产报告. 如此一想,这 ...
- Win7,8的上帝模式文件夹 GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}
新建一文件夹,命名为:“GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}”, 创建后双击进入,可以看到计算机所有的配置选项信息.
- Eclipse&Spring开发开发环境配置
下载Eclipse,打开http://www.eclipse.org/downloads/,选择J2EE开发版: 根据操作系统选择32位还是64位. 开发工具:SpringSource Tool Su ...
- 《C语言程序设计现代方法》第4章 编程题
1 编写一个程序,要求用户输入一个两位数,然后按数位的逆序打印出这个数. 方法一:没技术含量的 #include <stdio.h> int main() { int high, low; ...
- 连续使用两次fread 错误和fread返回值
今天在写一个代码,要把一帧的buffer读入到文件,因为有NEON和OpenCL两种不同的实现所以需要读取文件两次,代码如下: FILE *file; ; INTER_BLOCK_SIZE_GPU_R ...
- Yii AR Model CRUD数据库操作
Yii AR很好很强大,但刚开始不知道怎么使用,可以先看下官方文档 官方文档:http://www.yiichina.com/guide/database.ar 下面是我对AR的一些理解 对于一个Mo ...
- LIS,LDS的另类算法(原)
自己在做有关俄罗斯套娃的题目时,发现自己写出的一个方法可以解决求最长上升子序列(LIS)和最长下降子序列(LDS)的问题. 俄罗斯套娃:这个问题在前一篇中讲的有,在此处就不多讲了~链接 求最长上升子 ...