本文只列出索引,触发器,视图的简单操作语句

1.索引

  a.创建

  create index idx_name on fdh_client_info(name);  --普通索引(单列索引)

  create unique index uni_idx_id on fdh_client(id);   --唯一索引

  create index union_idx_name_addr on fdh_client(name, address);  --联合索引

  b.查询索引

  select * from user_indexes;

  select * from all_indexes;

  c.重建索引

  alter index idx_name rebuild online;  --重建索引时不锁表

  alter index idx_name rebuild tablespace tablespace_name;  --重建时指定索引存储的表空间

  d.释放索引中无用空间

  alter index idx_name deallocate unused;

  e.整理索引碎片

  alter index idx_name coalesce;

  f.删除索引

  drop index idx_name;

  

2. oracle触发器

  以下语句学习自慕课网(http://www.imooc.com/learn/414)

 a.创建语句级触发器(没有 for each row)

  执行安全检查:禁止在非工作时间插入员工信息

create or replace trigger security_emp
before insert on emp
begin
if to_char(sysdate, 'day') in ('星期六', '星期日') or
to_number(to_char(sysdate, 'hh24')) not between 9 and 17 then --9点到18点
raise_application_error(-20001, '非工作时间禁止插入新员工');
end if;
end;

 b.创建行级触发器

  数据检查:涨后的工资不能比涨前少(伪记录变量:old和:new分别表示更新前后的那一条记录) 

create or replace trigger check_salary
before update
on emp
for each row --行级触发器
begin
if :new.sal < :old.sal then
raise_application_error(-20002, '涨后的工资不能比涨前少. '
|| '涨后的工资:' || :new.sal || ' 涨前的工资:' || :old.sal);
end if;
end;

c.数据库审计(员工涨后薪水大于6000,审计员工信息)

-- 创建薪水审计表
create table audit_emp_sal(
empno number(4, 0),
ename varchar2(10),
newsal number(7,2),
incdate date
)
--创建员工测试表
create table emp_2 as select * from emp; --数据库审计:涨后薪水大于6000,其员工信息插入审计表
create or replace trigger do_audit_emp_sal
after update
on emp_2
for each row
begin
if :new.sal > 6000 then
insert into audit_emp_sal
values (:new.empno, :new.ename, :new.sal, sysdate);
end if;
end;

d.数据库备份和同步

--创建备份表
create table emp_back as select * from emp;
--数据库的备份和同步(利用触发器进行同步备份)
create or replace trigger sync_emp_sal
after update
on emp
for each row
begin
update emp_back b set b.sal = :new.sal where b.empno = :new.empno;
end;

3.视图

  视图本身不包含数据,存储的是一条select语句的查询结果;视图是基于若干表或视图的逻辑表,这里的表称作基表,通过视图可以查询或修改基表的数据。

  视图分为简单视图和复杂视图;简单视图从单表获取数据,不包含函数和数据组,可以执行DML操作,复杂视图相反。

  a.语法

CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name [(alias[, alias]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY]

  注:FORCE:不管基表是否存在ORACLE都会自动创建该视图; 
    NOFORCE:只有基表都存在ORACLE才会创建该视图: 
    alias:为视图产生的列定义的别名; 
    subquery:一条完整的SELECT语句,可以在该语句中定义别名; 
    WITH CHECK OPTION : 插入或修改的数据行必须满足视图定义的约束; 
    WITH READ ONLY : 该视图上不能进行任何DML操作

  b.示例

create or replace view dept_statistics
(name,minsal,maxsal,avgsal)
as select d.dname,min(e.sal),max(e.sal),avg(e.sal)
from emp e,dept d
where e.deptno=d.deptno
group by d.dname;

SQL基础(3)-索引/触发器/视图操作的更多相关文章

  1. SQL基础随记2 视图 存储过程

    SQL基础随记2 视图 存储过程   View CREATE/ALTER/DROP VIEW ViewName as SELECT(...) 可以在视图的基础上继续创建视图,即,将之前创建的视图当做表 ...

  2. 16、SQL基础整理(触发器.方便备份)

    触发器(方便备份) 本质上还是一个存储过程,只不过不是通过exec来调用执行,而是通过增删改数据库的操作来执行(可以操作视图) 全部禁用触发器 alter table teacher disable ...

  3. SQL基础-约束&索引

    一.约束 1.约束简介 约束(constraint): 表中数据的限制条件. 完整性 有效性 约束的种类: 主键约束 外键约束 唯一约束 检查约束 非空约束 2.主键约束 主键约束: 唯一标识表中每一 ...

  4. SQL笔记(1)索引/触发器

    --创建聚集索引 create clustered index ix_tbl_test_DocDate on tbl_test(DocDate) GO --创建非聚集索引 create nonclus ...

  5. SQL基础语法的单表操作 select|insert|update|delete(增删改查) 简单使用

    以下案列以此表举例 1.select(查询) select简单的查询分为两种 注:字段也就是表结构中的列的名称 第一种: select  字段名  from  表名 此种查询只列出你所需要查询的字段, ...

  6. 四、SQL基础知识--约束和视图

    --创建约束的方式 --一.在字段创建时将约束添加到字段之后 CREATE TABLE ZYJ_YUESHU( ZYJ_ID VARCHAR(20) NOT NULL PRIMARY KEY, --创 ...

  7. oracle坚决不挂01(表,索引,视图的创建,修改,删除,查询)

    考试快来了,来篇oracle干货,复习一下(挣扎一下) 废话不多说,开始写! 这篇是数据库对象的有关操作的总结! 数据库对象有熟悉的表,视图,索引,序列,同义词等(这个oracle东西真不少,小声bb ...

  8. SQL server 数据库的索引和视图、存储过程和触发器

    1.索引:数据排序的方法,快速查询数据 分类: 唯一索引:不允许有相同值 主键索引:自动创建的主键对应的索引,命令方式不可删 聚集索引:物理顺序与索引顺序一致,只能创建一个 非聚集索引:物理顺序与索引 ...

  9. 使用SQL Server 2000索引视图提高性能

    什么是索引视图? 许多年来,Microsoft? SQL Server? 一直都提供创建虚拟表(称为视图)的功能.在过去,这些视图主要有两种用途: 提供安全机制,将用户限制在一个或多个基表中的数据的某 ...

随机推荐

  1. Atitit 数据存储视图的最佳实际best practice attilax总结

    Atitit 数据存储视图的最佳实际best practice attilax总结 1.1. 视图优点:可读性的提升1 1.2. 结论  本着可读性优先于性能的原则,面向人类编程优先于面向机器编程,应 ...

  2. 查看Job执行的历史记录

    SQL Server将Job的信息存放在msdb中,Schema是dbo,表名以“sysjob”开头. 一,基础表 1, 查看Job和Step,Step_ID 是从1 开始的. select j.jo ...

  3. call,apply,bind的用法

    关于call,apply,bind这三个函数的用法,是学习javascript这门语言无法越过的知识点.下边我就来好好总结一下它们三者各自的用法,及常见的应用场景. 首先看call这个函数,可以理解成 ...

  4. jvm系列(五):tomcat性能调优和性能监控(visualvm)

    tomcat服务器优化 1.JDK内存优化 根据服务器物理内容情况配置相关参数优化tomcat性能.当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃.因此一般建议堆的最 ...

  5. 完整记录一则Oracle 11.2.0.4单实例打PSU补丁的过程

    本文记录了打PSU的全过程,意在体会数据库打PSU补丁的整个过程. 1.OPatch替换为最新版本2.数据库软件应用19121551补丁程序3.数据库应用补丁4.验证PSU补丁是否应用成功 1.OPa ...

  6. 使用OWIN作为WebAPI的宿主

    前言 好吧,也没什么好说的,就是个技术的总结,直接生成MVC的项目,感觉好重,虽然各种东西很全 ...也许我是处女座? - -, OWIN呃,这里我就不解释了,自己也是一知半解,可以参考 Open W ...

  7. 今天我们来认识一下JSP的九大内置对象

    虽然现在基本上我们都是使用SpringMVC+AJAX进行开发了Java Web了,但是还是很有必要了解一下JSP的九大内置对象的.像request.response.session这些对象,即便使用 ...

  8. Rafy 框架 - 幽灵插件(假删除)

      Rafy 框架又添新成员:幽灵插件.本文将解释该插件的场景.使用方法.原理.   场景 在开发各类数据库应用系统时,往往需要在删除数据时不是真正地删除数据,而只是把数据标识为'已删除'状态.这些数 ...

  9. C#基础知识六之委托(delegate、Action、Func、predicate)

    1. 什么是委托 官方解释 委托是定义方法签名的类型,当实例化委托时,您可以将其实例化与任何具有兼容签名的方法想关联,可以通过委托实例调用方法. 个人理解 委托通俗一点说就是把一件事情交给别人来帮助完 ...

  10. redis成长之路——(三)

    redis连接封装 StackExchange.Redis中有一些常功能是不在database对中,例如发布订阅.获取全部key(本代码中已封装到operation中了)等,而且StackExchan ...