oracle学习(6)

其他数据库对象

视图:

常见数据库对象——视图:从表中抽出的逻辑上相关的数据集合。

所以:1. 视图基于表。2. 视图是逻辑概念。3. 视图本身没有数据。

创建视图

创建语法与创建表类似,只需要将table → view即可:

SQL> create view empincomeview  

as

select e.empno, e.ename, e.sal, e.sal*12 annualsal, e.sal*12+nvl(comm, 0) income, d.dname

from emp e, dept d

where e.deptno = d.deptno   

出错提示:权限不足。因为创建视图需要“create view”的权限。默认scott用户没有该种权限。加之!

添加步骤:

1. 使用管理员登陆:sqlplus / as sysdba

2. 给scott用户增加权限: SQL>  grant create view to scott;  

3. 执行“/”可成功创建视图empincomeview。  

4. 视图的操作和表的操作完全一样。 SQL>  select * from empincomeview;

视图的优点:

视图的优点  

1. 简化复杂查询: 原来分组、多表、子查询等可以用一条select * from xxxview代替。

视图可以看做是表的复杂的SQL一种封装。

2. 限制数据访问: 只看视图的结构和数据是无法清楚视图是怎样得来的。可以限制数据的访问。例如:

银行项目,所谓的各个“表”都是“视图”,并有可能只是“只读视图”

注意:1. 视图不能提高性能 2. 不建议通过视图对表进行修改。

创建视图细节:

使用下面的语法格式创建视图:

CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view

   [(alias[, alias]...)]

  AS subquery

[WITH CHECK OPTION [CONSTRAINT constraint]]

[WITH READ ONLY [CONSTRAINT constraint]];

1. 视图只能创建、删除、替换。(不能修改,修改即替换replace)

如:刚刚创建的empincomeview,其他语句不变,将create一行改写成:

SQL> create or replace view empincomeview 视图不存在则创建、存在则替换。

  as

      select…… from…..where…..

      with read only          可以将视图设为只读视图。

2. 别名:可以写在子查询select各个列的后面,也可以写在视图的名字后面。

3. with read only  表示该视图为只读视图。

4. with check option 了解即可, 举例:

SQL>  create view testview

as

select * from emp where deptno=10

with check option;   

SQL> insert into testview values(******, 10); 不建议向视图插入,但可以做。向视图插入10号员工。

SQL> insert into testview values(******, 20); 因为创建视图时加了“with check option”,所以失败。

视图中使用DML的规定:     

一:

当视图定义中包含以下元素之一时不能使用delete:

  1. 组函数
  2. GROUP BY 子句
  3. DISTINCT 关键字
  4. ROWNUM 伪列

二:

当视图定义中包含以下元素之一时不能使用update :

  1. 组函数
  2. GROUP BY子句
  3. DISTINCT 关键字
  4. ROWNUM 伪列
  5. 列的定义为表达式

三:

当视图定义中包含以下元素之一时不能使用insert :

  1. 组函数
  2. GROUP BY 子句
  3. DISTINCT 关键字
  4. ROWNUM 伪列
  5. 列的定义为表达式
  6. 表中非空的列在视图定义中未包括

总结一句话:不通过视图做insert、update、delete操作因为视图提供的目的就是为了简化查询。

删除视图:SQL> drop view testview  不加“purge”关键字。

    1. 序列:

可以理解成数组:默认,从[1]开始,长度[20] [1, 2, 3, 4, 5, 6, …, 20] 在内存中。

          *

由于序列是被保存在内存中,访问内存的速率要高于访问硬盘的速率。所以序列可以提高效率。

​​​​​​​序列的使用:

1. 初始状态下:指针*指向1前面的位置。欲取出第一个值,应该将*向后移动。每取出一个值指针都向后移。

2. 常常用序列来指定表中的主键。

3. 创建序列:create sequence myseq  来创建一个序列。

创建序列:

CREATE SEQUENCE sequence

       [INCREMENT BY n]

       [START WITH n]

       [{MAXVALUE n | NOMAXVALUE}]

       [{MINVALUE n | NOMINVALUE}]

       [{CYCLE | NOCYCLE}]

       [{CACHE n | NOCACHE}];

NOCACHE表示没有缓存,一次不产生20个,而只产生一个。

​​​​​​​创建序列

创建序列、表,以备后续测试使用:

SQL> create sequence myseq  按默认属性创建一个序列。

SQL> create table tableA     

  (tid number, tname varchar2(20))   tid作为主键,准备使用序列来向表中插入值。

​​​​​​​序列的属性:

每个序列都有两个属性  

NextVal 必须在CurrVal之前被指定。因为初始状态下,CurrVal指向1前面的位置,无值

对于新创建的序列使用SQL>  select myseq.currval from dual    得到出错。

  但SQL>  select myseq.nextval from dual    可以得到序列的第一值1.

  此时再执行SQL>  select myseq.currval from dual        currval的值也得到1

使用序列给tableA表创建主键tid:

SQL>  insert into tableA values(myseq.nextval, ‘aaa’)         

只有nextval取完会向后移动,使用currval不会移动。

SQL>  insert into tableA values(myseq.nextval, ‘bbb’)         

继续使用nextval向表中添加主键tid

……

SQL>  insert into tableA values(myseq.nextval, &name)   

可以使用“&”和“/”来指定名字。

SQL> select * from tableA;  

由于前面测试currval和nextval关系时调用过nextval,所以tableA的tid起始从2开始。

查询序列的属性:SQL> select * from user_sequences;   user_sequences为数据字典视图。

修改序列:

  1. 必须是序列的拥有者或对序列有 ALTER 权限
  2. 只有将来的序列值会被改变
  3. 改变序列的初始值只能通过删除序列之后重建序列的方法实现

删除序列:SQL> drop sequence myseq;  

​​​​​​​使用序列需要注意的问题:

1. 序列是公有对象,所以多张表同时使用序列,会造成主键不连续。 如:[1, 2, 3, 4, 5, …, 20]

tableA: 1 2 4

tableB: 3 5 A、B表有可能主键不连续。

2. 回滚也可能造成主键不连续。 如:多次调用insert操作使用序列创建主键。但是当执行了rollback后再次使用insert借助序列创建主键的时候,nextval不会随着回滚操作回退。

3. 掉电等原因,也可能造成不连续。由于代表序列的数组保存在内存中,断电的时候内存的内容丢失。恢复供电时候,序列直接从21开始。

​​​​​​​索引:

索引,相当于书的目录,提高数据检索速度。提高效率(视图不可以提高效率)

  1. 一种独立于表的模式对象, 可以存储在与表不同的磁盘或表空间中
  2. 索引被删除或损坏, 不会对表产生影响, 其影响的只是查询的速度
  3. 索引一旦建立, Oracle 管理系统会对其进行自动维护, 而且由 Oracle 管理系统决定何时使用索引. 用户不用在查询语句中指定使用哪个索引
  4. 在删除一个表时, 所有基于该表的索引会自动被删除
  5. 通过指针加速 Oracle 服务器的查询速度

通过快速定位数据的方法,减少磁盘 I/O。

上图中:

  1. emp表中保存数据,其中包含部门号列。有10号部门,有20部门员工

2. 当 select * from emp where deptno=10 的时候。由于10号部门员工不连续,没规律。

为了提高访问速度,可以在数据库中,依照rowid给deptno列建立索引

SQL> create index myindex on emp(deptno)   

这样就建立了“索引表”可以通过rowid保存的行地址快速的找到表中数据。即使表中数据不连续。

3. 建立了索引以后,如果再执行select语句的时候,会先检查表上是否有索引表。如果有,可以通过有规律 的rowid找到不连续的数据。

4. Oracle的数据库中,索引有 B树索引(默认)和 位图索引两种。

5. 使用create index 索引表名 on 表名(列名1, 列名2…);来创建索引表。由数据库自动进行维护。 使用主键查询数据最快速,因为主键本身就是“索引”,所以检索比较快。   

索引使用的场景:

以下情况可以创建索引:

  1. 列中数据值分布范围很广
  2. 列经常在 WHERE 子句或连接条件中出现
  3. 表经常被访问而且数据量很大 ,访问的数据大概占数据总量的2%到4%

下列情况不要创建索引:

  1. 表很小
  2. 列不经常作为连接条件或出现在WHERE子句中
  3. 查询的数据大于2%到4%
  4. 表经常更新

删除索引:SQL> drop index myindex;

    1. synonym同义词:

就是指表的别名。

如:scott用户想访问hr用户下的表employees。默认是不能访问的。需要hr用户为scott用户授权:

SQL>  sqplus hr/11 或 conn hr/11(已登录界面, 切换登陆)

SQL>  grant select on employees to scott      hr用户为scott用户开放了employees表的查询权限。

  这时scott用户就可以使用select语句,来查询hr用户下的employees表的信息了。

SQL>  select count(*) from hr. employees   (若用户名叫zhangsanfeng则zhangsanfeng.employees)

hr.employees名字过长,为了方便操作,scott用户为它重设别名:

SQL>  create synonym hremp for hr.employees;   为hr.employees创建了同义词。

如有权限限制,那么切换管理员登录,给scott用户添加设置同义词权限

SQL>  conn / as sysdba

SQL>  grant create synonym to scott    

SQL>  select count(*) from hremp    使用同义词进行表查询操作。

 ——同义词、视图 等用法在数据保密要求较高的机构使用广泛,如银行机构。好处是既不影响对数据的操作,同时又能保证数据的安全。

OCA

OCP

OCM 认证 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/823268.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【算法与数据结构】56、LeetCode合并区间

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:本题比较简单。排序判断交集即可实现。博主给出两版代码,第一版运行时间稍长,占…

八皇后问题(C语言)

了解题意 在一个8x8的棋盘上放置8个皇后,使得任何两个皇后都不能处于同一行、同一列或同一斜线上。问有多少种方法可以放置这8个皇后? 解决这个问题的目标是找到所有符合要求的皇后摆放方式,通常使用回溯算法来求解。回溯算法会尝试所有可能…

简单vlan划分和dhcp中继(Cisco Packet Tracer模拟)

文章目录 1. 前言2. 功能实现2.1. dhcp服务器接入2.2. 学校web服务器2.3. 设置学校dns服务器2.4. 设置线路冗余2.5. 配置ac。 1. 前言 在这里我们的计网作业是使用思科的Cisco Packet Tracer进行对校园网的简单规划,这里我对校园网进行了简单的规划,功能…

模式识别与机器学习-集成学习

集成学习 集成学习思想过拟合与欠拟合判断方法 K折交叉验证BootstrapBagging随机森林的特点和工作原理: BoostingAdaBoost工作原理:AdaBoost的特点和优点:AdaBoost的缺点: Gradient Boosting工作原理:Gradient Boostin…

轻松实现iphone截图传电脑

目录 摘要 引言 用户登录工具和连接设备 生成截图 摘要 本篇博文介绍了克魔助手这款工具,解决了iPhone与Windows系统下图片传输的烦恼。通过连接同一Wi-Fi,使用克魔助手轻松实现了iPhone截图传输到电脑上的便捷操作。用户只需简单地下载并安装克魔助…

C#高级 08Json操作

1.概念 Json是存储和交换文本信息的语法。类似于XML。Json比XML更小、更快、更易解析。Json与XML一样是一种数据格式。Json是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。Json采取完全独立于语言的文本格式, 但是也使用了类似于C语言的习惯。这些特性使…

基于Python的B站排行榜大数据分析与可视化系统

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 本文介绍了一项基于Python的B站排行榜大数据分析与可视化系统的研究。通过网络爬虫技术,系统能够自动分析B站网址,提取大量相关文本信息并存储在系统中。通过对这些信息进行…

四.消息队列

目录 1 .消息队列概述 2.消息队列的特点 3.ftok函数 3 创建消息队列-msgget( ) 3.1发送消息-msgsnd( ) 3.2 接收消息-msgrcv( ) 4 消息队列的控制 1 .消息队列概述 消息队列是一种进程间通信的机制,允许不同进程在系统中传递数据。它们通常由内核维护&#x…

PEGASUS模型介绍

PEGASUS介绍 概述 模型论文为Pre-training with Extracted Gap-sentences for Abstractive Summarization,简称为PEGASUS。面向的情况主要是因为目前预训练语言任务主要为MLM和NSP任务,即为掩码预测任务和下一句预测任务,没有面向生成式文本…

普中STM32-PZ6806L开发板(HAL库函数实现-USART1 printf+scanf/gets)

简介 实现printfscanf/gets通过USART1 的发送接收。 电路原理图 板载USB CH340串口电路原理图主芯片串口引脚图 我的板子板子自带串口坏掉了, 所以使用USB转TTL线, 连接如下 电路原理图 实物图 其他知识 scanf是以空白符(空格、制表符、换行等等)为结束标志的,当遇到空白符…

Unity坦克大战开发全流程——开始场景——开始界面

开始场景——开始界面 step1:设置UI 反正按照这张图拼就行了 step2:写脚本 前面的拼UI都是些比较机械化的工作,直到这里写代码的时候才真正开始有点意思了,从这里开始,我们就要利用面向对象的思路来进行分析&#xff1…

AJAX:整理3:原生AJAX的相关操作

注意AJAX的步骤 // 1.创建对象 const xhr new XMLHttpRequest()// 2.初始化 设置 请求方法 和 url xhr.open("GET", "http://localhost:9090/server")// 3.发送 xhr.send()// 4.事件绑定 处理服务端返回的结果 // readyState 是xhr对象中的属性&#xff…

超维空间S2无人机使用说明书——51、基础版——使用yolov8进行目标跟踪

引言:为了提高yolo识别的质量,提高了yolo的版本,改用yolov8进行物体识别,同时系统兼容了低版本的yolo,包括基于C的yolov3和yolov4,以及yolov7。 简介,为了提高识别速度,系统采用了G…

Vue小练习--任务列表

这是一个非常实用的例子,主要实用的是v-model、v-on、v-for指令,javaScript的数组也会涉及一些,javaScript数组方法有很多,本文使用的添加元素和删除元素非常实用,可以记下来。 设计思路 很多例子看起来很难&#xf…

使用Google OSV工具扫描依赖安全漏洞

安全漏洞是软件工程化能力的试金石 2021年年底,Log4j的漏洞陆续被公开。因为该框架被大量的开源软件依赖,所以,漏洞影响面非常大。 面对这个漏洞,我们遇到的第一个问题是:如何知道我们哪些工程使用了Log4j?…

用python画最简单的图案,用python画小猫简单代码

本篇文章给大家谈谈用python画小猫简单100行代码,以及用python画最简单的图案,希望对各位有所帮助,不要忘了收藏本站喔。 Source code download: 本文相关源码 from turtle import * #两个函数用于画心 defcurvemove():for i in range(200): …

电池充电器、监控器和控制器AD7284WBSWZ、LT8490EUKJ、LTC4162EUFD-FAD、LTC4162IUFD-LAD【电源管理】

1、AD7284WBSWZ 8通道锂离子电池监控系统 IC 64LQFP AD7284 8通道锂离子电池监控系统包括对堆叠式锂离子电池进行通用监控所需的全部功能。AD7284具有支持四到八个电池管理单元的多路复用单元电压和辅助模数转换器 (ADC) 测量通道。设计人员可以使用四个辅助ADC输入通道进行温…

lag-llama源码解读(Lag-Llama: Towards Foundation Models for Time Series Forecasting)

Lag-Llama: Towards Foundation Models for Time Series Forecasting 文章内容: 时间序列预测任务,单变量预测单变量,基于Llama大模型,在zero-shot场景下模型表现优异。创新点,引入滞后特征作为协变量来进行预测。 获得…

Power Apps 学习笔记 - IOrganizationService Interface

文章目录 1. IOrganization Interface1.1 基本介绍1.2 方法分析 2. Entity对象2.1 Constructor2.2 Properties2.3 Methods 3. 相关方法3.1 单行查询 Retrive3.2 多行查询 RetriveMultiple3.3 增加 Create3.4 删除 Delete3.5 修改 Update 1. IOrganization Interface 1.1 基本介…

rax3000m刷openwrt固件

rax3000m刷机过程(nand版本) 刷机准备文件https://www.123pan.com/s/X5m9-6Ynj.html提取码:VtBW 接线关系:路由器lan口接电脑 1.上传配置开启ssh的配置文件(登录路由器后台管理界面在找到配置管理,上传配置文件rax3…