当前位置: 首页 > 编程日记 > 正文

Oracle数据库基本操作(二) —— 视图、序列、索引、同义词

一、视图(Views)与 同义词

1、视图:实际上是对查询结果集的封装,视图本身不存储任何数据,所有的数据都存放在原来的表中;

在逻辑上可以把视图看作是一张表

2、作用:

    • 封装查询语句,简化复杂的查询需求
    • 屏蔽表中的细节

3、语法:

create [or replace] view 视图的名称 as 查询语句 [with read only]

4、视图和同义词:

    • 屏蔽了查询过程步骤
    • 屏蔽了真实的表名 增加了代码被破解的难度

5、示例:

select * from emp;

-- 封装成一个视图: 获取10号部门的员工信息
create or replace view view_test1 as select * from emp where deptno=10;
select * from view_test1;

-- 简化查询语句
CREATE VIEW view_test2 AS SELECTSUM(cc) total,SUM(CASE yy WHEN '1980' THEN cc END) "1980",SUM(CASE yy WHEN '1981' THEN cc END) "1981",SUM(CASE yy WHEN '1982' THEN cc END) "1982",SUM(CASE yy WHEN '1987' THEN cc END) "1987"
FROM(SELECTTO_CHAR(HIREDATE, 'YYYY') YY,COUNT(*) CCFROMEMPGROUP BYTO_CHAR(HIREDATE, 'YYYY')) TT ;
select * from view_test2;

-- 屏蔽表中的细节
create or replace view view_test3 as select ename,job,mgr,hiredate from emp;
-- 通过视图修改数据
update view_test3 set ename='SMITH' where ename='SMI%TH';
-- 创建只读视图
create view view_test4 as select ename,job,mgr,hiredate from emp with read only;
-- 报错 ORA-01733: virtual column not allowed here
update view_test4 set ename='SMITH2' where ename='SMITH';
-- 同义词: 相当于是取了一个别名
create synonym yuangong for view_test3;
select * from yuangong;

二、序列

序列: 1,2,3,4,5,6,7....

作用: 模拟类似mysql中auto_increment自动增长的编号

1、语法:

create sequence 序列名称
start with 从几开始
increment by 每次递增多少
minvalue | nominvalue
maxvalue | nomaxvalue
cycle | nocycle
cache 缓存几个数 31,2,34,5,6
-- currval:序列当前取到哪个值,必须是调用了一次nextval之后才能正常使用
-- nextval:序列中的下一个值
-- 注意:序列中的值,一旦被取过,无论回滚/发生异常,序列都是永不回头向下递增的

2、使用示例

-- 1,2,3,4,5,6,1,2,3,4,5,6
create sequence seq_test01
start with 1
minvalue 1
maxvalue 6
cycle
cache 3;-- 需先执行nextval语句后才有效 
select seq_test01.currval from dual;
select seq_test01.nextval from dual;-- 开发过程,通常写法如下:
create sequence seq_test02;
-- 建表 
create table louceng(lou number primary key
);
-- 执行两次 
insert into louceng values(seq_test02.nextval);
-- 1  2
select seq_test02.currval from dual;select * from louceng;

三、索引

3.1 索引概述

索引:索引是一种已经排好序的帮助数据库快速查找数据的数据结构,主要是用来帮助数据库快速的找到数据 相当于一本书的目录。

语法:

create index 索引名称 on 表名(列名1,列名2....);

主键约束: 自带唯一索引

唯一约束: 自带唯一索引

3.2 索引作用示例

 1 -- 创建测试数据500万
 2 -- 创建一张表
 3 create table wbw(
 4     c1 number primary key,
 5     c2 varchar2(20),
 6     c3 varchar2(20)
 7 );
 8 -- 插入500万条记录
 9 create sequence seq_wbw;
10 
11 -- PLSQL中的循环(283s) 
12 declare
13 
14 begin 
15    for i in 1..5000000 loop
16     insert into wbw values(seq_wbw.nextval,'c2:'||i,'c3:'||i);
17    end loop;
18    commit;
19 end;
20 
21 -- 在没有创建索引的情况下(2.37s)
22 select * from wbw where c2='c2:4000000';
23 
24 -- 0.00s
25 select * from wbw where c1=4000000; 
26 
27 -- 创建索引(35.77s)
28 create index wbw_c2 on wbw(c2);
29 -- 索引列下 0.15s 
30 select * from wbw where c2='c2:4000000';
31 -- 非索引列下 2.38s
32 select * from wbw where c3='c3:4000000';

3.3 索引扩展

3.3.1 索引优化概述

SQL语句的执行计划(SQL语句分析的时候): 将SQL语句发送给数据库, 数据库分析执行这条语句需要经历哪些步骤,消耗多少资源

SQL优化的步骤:

1.找到需要优化的语句

2.通过执行计划去分析SQL语句

3.确定优化方案

索引的原理: 索引是一种已经排好序的帮助数据库快速查找数据的数据结构 BTree : B树, Balance, 平衡多路查找树

索引的利弊:

好处: 提高查询的效率

缺点: 占资源,反向影响增删改的效率

什么时候创建索引?

1.数据量比较大时候

2.哪些列经常作为查询的条件

3.3.2 使用示例:

 1 -- 没有创建多列索引的情况下  0.50s
 2 select * from wbw where c2='c2:4000001' and  c3='c3:4000001';
 3 
 4 -- 创建索引(41.43s)
 5 create index wbw_c23 on wbw(c2,c3);
 6 
 7 
 8 -- 创建多列索引的情况下 0.25s
 9 select * from wbw where c2='c2:4000001' and  c3='c3:4000001';
10 -- 1.80s
11 select * from wbw where c3='c3:4000001';

3.3.3 执行计划图解

转载于:https://www.cnblogs.com/gdwkong/p/8504239.html

相关文章:

iOS crash日志分析

项目集成talkingdata收集到的crash日志, 看到那些日志时自己也是很崩溃, 全是内存地址, 根本搞不懂项目到底crash到了那里, 比如这样:自己在网上找了很多方法, 以下是自己最后所用到的方法(心累): 1, 首先拿到.dSYM 文件, 步骤:XCode中的Window -> Organizer -> 找到App …

Xamarin Android项目运行失败

Xamarin Android项目运行失败 错误信息:Build Failed: MonoDroid does not support running the previous version. Please ensure your solution builds before running or debugging it.这是由于由于项目生成失败,并找不到以前编译的结果。这时&#…

logging模块

import logging from conf import settingsdef logger(log_type):# 生成 logger 对象logger logging.getLogger(log_type)logger.setLevel(settings.LOG_LEVEL)# 生成handler对象,向文件输出日志信息log_file "%s/log/%s.log" % (settings.BASE_DIR, lo…

iOS 模糊效果相关

项目中一直有使用到模糊处理, 例如图片的高斯模糊, 一直使用的代码如下: // 内部方法,核心代码,封装了毛玻璃效果 参数:半径,颜色,色彩饱和度 - (UIImage *)imgBluredWithRadius:(CGFloat)blurRadius tintColor:(UIColor *)tintColor saturationDeltaFactor:(CGFloat)saturati…

CDN的原理及对SEO的影响

http://www.williamlong.info/archives/4059.html CDN的概念最早于1995年由美国麻省理工大学提出,是一套能够实现用户就近访问的网络解决方案。具体方法是:采用智能路由和流量管理技术,将用户的访问请求指向 CDN网络中健康且响应最快的CDN节点…

JavaScript学习笔记 - 入门篇(1)- 准备

为什么学习JavaScript 一、你知道,为什么JavaScript非常值得我们学习吗? 所有主流浏览器都支持JavaScript。目前,全世界大部分网页都使用JavaScript。它可以让网页呈现各种动态效果。做为一个Web开发师,如果你想提供漂亮的网页、令…

iOS关于像素的适配

项目中很多地方会用到分割线, 一般设置为1.0, 但是在不同的机型上这个1.0显示的效果是不同的,1x的机型上正常, 2x和3x的机型上显示的就会很粗, 影响适配, 困扰很久后得到了以下解决办法, 在此记录一下: 1.0/UIScreen.mainScreen.scale

非对称加密中公钥

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 数字签名是公钥密码体系中签名验证功能的一个应用。其目的是保证信息传输的完整性、发送者的身份认证、防止交易中的抵赖发生。其中数字签名是个加密…

bzoj 4813: [Cqoi2017]小Q的棋盘【树形dp】

这么简单的dp我怎么没想到x2 f为从这个点出发后回到这个点最多能走过的点,g为从这个点出发后不回到这个点最多能走过的点,注意g有两种转移:g[u][k]max(g[u][k],f[u][k-j-1]g[e[i].to][j])是在e[i].to这个子树前走了一棵子树再回来&#xff0c…

spring WebServiceTemplate 调用 axis1.4 发布的webservice

前言: 最近在开发中需要调用对方的 webservice服务,按照现有的技术,本应该是一件很简单的事情,只需要拿到wsdl文件,生成客户端代码即可,但是,对方的webservice服务是06年用axis1.4生成发布的&am…

iOS 获取Assets中的启动页

app启动时先进入一个广告页, 若无广告图则用启动页占位, 一直为这个占位图的适配烦恼, 最近查资料终于找到了结果, 现记录一下: - (UIImage *)getLaunchImage { CGSize viewSize [UIScreen mainScreen].bounds.size; NSString *viewOrientation "Portrait";//方向…

SunlightChain 区块链宣言

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 SunlightChain 区块链宣言 区块链技术的应用必将颠覆现在过度依赖于中心的经济模式,它与生俱来的开放、共享、去中心化等特点极大地提高…

Ajax跨域:Jsonp原理解析

推荐先看下这篇文章:JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp) JavaScript是一种在Web开发中经常使用的前端动态脚本技术。在JavaScript中,有一个很重要的安全性限制,被称为“Sam…

iOS 微信SDK1.8.6后需要UniversalLink解决方案及采坑记录

项目最初因审核原因,一直使用iOS原生分享, 最近因项目需求要求, 接入微信分享, 以为和原来的没有区别, 但是接入时才发现改动的地方还是挺多的, 主要是需要配置UniversalLink和提包时的一些问题, 在此做一下记录 UniversalLink配置步骤 1.制作apple-app-site-association文件…

GO语言编程基础-复合类型结构体

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 1 结构体类型 有时我们需要将不同类型的数据组合成一个有机的整体,如:一个学生有学号/姓名/性别/年龄/地址等属性。显然单独…

【BZOJ1015】【JSOI2008】星球大战 并查集

题目大意 给你一张\(n\)个点\(m\)条边的无向图,有\(q\)次操作,每次删掉一个点以及和这个点相邻的边,求最开始和每次删完点后的连通块个数。 \(q\leq n\leq 400000,m\leq 200000\) 题解 我们可以用并查集维护连通块个数,可惜并查集…

python基于Django框架编译报错“django.core.exceptions.ImproperlyConfigured”的解决办法?...

下面是我具体遇到的问题和解决方法: 错误详细信息: django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_…

iOS 异形tabBar, 中间item凸起

今年的新项目中做了tabbar的相关处理, 在此记录一下 自己做了一demo, 效果如图所示 demo地址如下: https://github.com/wyon1314/TabBarDemo

以太坊系统账户

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 在以太坊系统中,状态是由被称为“账户”(每个账户由一个20字节的地址)的对象和在两个账户之间转移价值和信息的状…

Django-缓存的配置

缓存的介绍 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面.当一个网站的用户访问量很大的时候,每一次的的后台操作,都会消耗很多的服务端资源,所以必须使用缓存来减轻后端服务器的压力.缓存是将一些常…

swift中单例的创建及销毁

最近项目重构时使用了oc和swift的混编,遇到了关于单例的创建及销毁,这里记录一下 //创建单例private static var _sharedInstance: ViewController?objc class func sharedInstance() -> ViewController {guard let instance _sharedInstance else …

区块链技术名词简介

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 零知识证明 零知识证明指证明者能在不向验证者提供任何有用的信息下,使验证者相信某个论断是正确的。零知识证明实质是一种涉及两方或更…

Linux篇---ftp服务器的搭建

一、前述 企业中linux搭建ftp服务器还是很实用的,所以本文针对centoos7和centoos6搭建服务器教程做个总结。 二、具体 1、显示如下图则表示已安装 vsftp软件。如果未显示则需要安装vsftpd软件。 如果没有则通过yarm源进行安装 yum install -y vsftpd 2、安装完成之后…

Python 的property的实现 .

描述符.就是 将某种特殊类型①的类的实例指派给另一个类的属性 ①只要实现一下三种方法的其中一个就是特殊类型. __get__(self,instance,owner) -用于访问属性,他返回属性的值. __set__(self,instance,value) -将在属性分配操作时使用,不返回任何内容. __delete__(self,instanc…

Swift中NSRange和Range的转换

最近项目再使用swift重构,遇到Range和NSRange转换的问题,这里记录下: 因为要使用NSRange,所以有了下面这段代码,将String转换为NSString后调用 range(of searchString: String) -> NSRange 这种处理方法其实就是使…

C++基础技术简介

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 容器 容器用于存储数据元素,是由长度可变的同类型的元素构建成的序列。 Vector:用于快速定位任意元素及主要在元素序列的尾…

eclipse快捷键操作

【Ct rlT】 搜索当前接口的实现类 1. 【ALT /】 此快捷键为用户编辑的好帮手,能为用户提供内容的辅助,不要为记不全方法和属性名称犯愁,当记不全类、方法和属性的名字时,多体验一下【ALT /】快捷键带来的好处吧。 2. 【Ct rlO】…

vue 项目配置sass

1.运行npm install node-sass --save-dev npm install sass-loader --save-dev 2.打开build文件夹下面的webpack.base.config.js module: {rules: [...(config.dev.useEslint ? [createLintingRule()] : []),{test: /\.scss$/,loaders: ["style", "css", …

获取App Store中App的ipa包

俗话说好记性不如烂笔头,每次需要看别的App中某些功能的实现方案时总去查资料太麻烦,所以这里记录下如何获取App Store中App的ipa包 主要使用的工具为Apple Configurator 2这款软件: 具体操作流程如下: 1.首先在iPhone设备上安装…

区块链中的技术

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 应用技术 算法加密1 比特币采用椭圆曲线加密算法(ECC)来产生公钥和私钥对,钱包地址即是公钥,私钥由…