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.mzph.cn/news/590321.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Selenium教程04:鼠标+键盘网页的模拟操作

在webdriver 中,鼠标操作都封装在ActionChains类中,使用的时候需要导入这个包。 from selenium.webdriver import ActionChainsActionChains方法列表如下: click(on_elementNone) ——单击鼠标左键click_and_hold(on_elementNone) ——点击…

将PPT4页并排成1页

将PPT4页并排成1页打印 解决方法: 方法一 在打印时选择: 打开 PPT,点击文件选项点击打印点击整页幻灯片点击4张水平放置的幻灯平页面就会显示4张PPT显示在一张纸上 方法二 另存为PDF: 打开电脑上的目标PPT文件,点击文件点击…

可拖拽流程图组件开发

效果 说在前面 流程图在技术领域是一种常见的可视化工具,用于展示系统、应用或业务流程的各个步骤以及它们之间的关系。它们可以帮助开发人员和项目团队更好地理解和规划复杂的流程,从而提高工作效率和准确性。但是,传统的静态流程图有时无法…

《深入理解C++11:C++11新特性解析与应用》笔记七

第七章 为改变思考方式而改变 7.1 指针空值--nullptr 7.1.1 指针空值:从0到NULL,再到nullptr 传统C头文件里NULL是一个宏定义: 在函数重载同时出现int和char *参数版本的函数时,使用NULL作为参数调用函数会调用int参数版本&…

elasticsearch系列九:异地容灾-CCR跨集群复制

概述 起初只在部分业务中采用es存储数据,在主中心搭建了个集群,随着es在我们系统中的地位越来越重要,数据也越来越多,针对它的安全性问题也越发重要,那如何对es做异地容灾呢? 今天咱们就一起看下官方提供的…

【电商项目实战】商品详情显示与Redis存储购物车信息

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《电商项目实战》。🎯🎯 &am…

合伙企业有哪些分类

合伙企业分为:普通合伙企业和有限合伙企业。其中,普通合伙企业又包含特殊的普通合伙企业。 1、普通合伙企业由2人以上普通合伙人(没有上限规定)组成。 普通合伙企业中,合伙人对合伙企业债务承担无限连带责任。 特殊的普通合伙企业中&#xf…

软件测试/测试开发丨Python 封装 学习笔记

封装的概念 封装(Encapsulation) 隐藏:属性和实现细节,不允许外部直接访问暴露:公开方法,实现对内部信息的操作和访问 封装的作用 限制安全的访问和操作,提高数据安全性可进行数据检查&#x…

『番外篇九』SwiftUI 实战:打造一款“五脏俱全”的网络图片显示 App(上)

概览 俗话说得好:“读书破万卷,下笔如有神”。不过如果把这句话放到编程的学习上可就不那么贴切了。 要想熟练掌握一门编程语言,光看书是绝对不够的。我们还需尽可能的多撸码、早撸码,撸到无路可退、海枯石烂才有可能一窥门径。 在本篇和续篇博文中,我们将和小伙伴们一起…

c++_09_继承

1 继承 C的继承是弱继承 继承的语法: class 子类 : 继承方式1 基类1, 继承方式2 基类2, ... { ... }; 继承方式: 共有继承 public 保护继承 protected 私有继承 private 2 继承的基本属性(3种继承方式均有) 继承所…

Javaweb之JDBC的详细解析

2. JDBC介绍(了解) 2.1 介绍 通过Mybatis的快速入门,我们明白了,通过Mybatis可以很方便的进行数据库的访问操作。但是大家要明白,其实java语言操作数据库呢,只能通过一种方式:使用sun公司提供的 JDBC 规范。 Mybatis…

从 MySQL 的事务 到 锁机制 再到 MVCC

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、事务 1.1 含义 1.2 ACID 二、锁机制 2.1 锁分类 2.2 隔离级别 三、MVCC 3.1 介绍 3.2 隔离级别 3.3 原理 四、总结 前…

【2023年度总结】 何其有幸 年岁并进 一元复始 万象更新

🌙 新年将至,万物更新,旧疾当愈。 今年极度焦虑。发生太多事情,做出很多改变。 自律。早起、拍照、运动、读书、学习、认识了很多厉害的朋友,尝试影响周围的人。这是我生活正向能量的来源。 学习。今年依然是把大量…

C#上位机与欧姆龙PLC的通信06---- HostLink协议(FINS版)

1、介绍 对于上位机开发来说,欧姆龙PLC支持的主要的协议有Hostlink协议,FinsTcp/Udp协议,EtherNetIP协议,本项目使用Hostlink协议。 Hostlink协议是欧姆龙PLC与上位机链接的公开协议。上位机通过发送Hostlink命令,可…

python实现Ethernet/IP协议的客户端(二)

Ethernet/IP是一种工业自动化领域中常用的网络通信协议,它是基于标准以太网技术的应用层协议。作为工业领域的通信协议之一,Ethernet/IP 提供了一种在工业自动化设备之间实现通信和数据交换的标准化方法。python要实现Ethernet/IP的客户端,可…

【Linux】socket基础API

目录 1. 创建socket(TCP/UDP,客户端服务器) 1.1 第一个参数——domain 1.2 第二个参数——type 1.3 第三个参数——protocol 2. 绑定socket地址(TCP/UDP,服务器) 2.1 字节序及转换函数 2.2 IP地址及…

消融实验(ablation study)——全网最全解读

消融实验(ablation study) 是什么优势与劣势案例总结 是什么 消融实验是一种科学研究方法,用于确定一个条件或参数对结果的影响程度。当研究者提出了一个新的方案或方法时,消融实验通过逐一控制一个条件或参数,来观察…

6个火爆全网的AI开源项目,用上月10万+

标题月10万可能说的有点夸张和含糊,10万具体指的是你可以利用这些开源项目实现: 访问量10万 收入10万 用户10万 …… 开源项目只是免费的工具,具体怎么实现还需要你根据自己需求去深入运营。这里只是给你推荐一些比较热门的开源项目&…

基于QT开发的温室气体数据记录软件

1、概述 温室气体分析仪数据记录软件用于实现温室气体分析仪数据的获取与存储,阀箱数据的获取与存储、冷阱数据的获取与存储、采样单元数据的获取与存储、阀箱和采样单元的远程操作以及系统功能的管理。其主操作界面如下: 上述软件界面分为2各区域&…

用html,js和layui写一个简单的点击打怪小游戏

介绍&#xff1a; 一个简单的打怪小游戏&#xff0c;点击开始游戏后&#xff0c;出现攻击按钮&#xff0c;击败怪物后可以选择继续下一关和结束游戏。 继续下一个怪兽的血量会增加5点&#xff0c;攻击按钮会随机变色。 效果图&#xff1a; html代码&#xff1a; <!DOCTYPE…