Oracle SQL(四)

5. SQL高级--表优化相关(序列、视图等)

5.1 INDEX(索引)

可以在表中创建索引,以便更加快速高效地查询数据。

用户无法看到索引,它们只能被用来加速搜索/查询。

PS:更新一个包含索引的表需要比更新一个没有索引的表花费更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。

5.2 索引新增

--在表上创建一个简单的索引。允许使用重复的值
CREATE INDEX 索引名
ON 表 (列)

--在表上创建一个唯一的索引。不允许使用重复的值:唯一的索引意味着两个行不能拥有相同的索引值。
CREATE UNIQUE INDEX 索引名
ON 表 (列)

--若希望索引不止一个列(联合索引),可以在括号中列出这些列的名称用逗号隔开
CREATE INDEX 索引名
ON 表 (列1, 列2)

5.3 索引查询

--查询某个表的索引
SELECT * FROM USER_INDEXES WHERE TABLE_NAME=UPPER(‘表名‘);

--根据“索引名”查询索引的字段
SELECT * FROM USER_IND_COLUMNS WHERE INDEX_NAME=(‘索引名‘);

--根据“索引名”查询创建的索引(PS:第一个参数INDEX是固定写法)
SELECT DBMS_METADATA.GET_DDL(‘INDEX‘,‘索引名‘) FROM DUAL ;

5.4 DROP(撤销/删除)

--删索引
DROP INDEX 索引名

--删表(表结构也删)
DROP TABLE 表

--删表(只删数据)
TRUNCATE TABLE 表

--删库(这个有点刺激哈,别乱整~)
DROP DATABASE 数据库名称

5.5 ALTER(增、删、改)

--增加一列
ALTER TABLE 表
ADD 列 数据类型

--删除一列
ALTER TABLE 表
DROP COLUMN 列

--改列的数据类型(Oracle 10G 以后的版本可以省略COLUMN关键字)
ALTER TABLE 表
MODIFY COLUMN 列 数据类型

5.6 AUTO INCREMENT(自增)

Auto increment 会在新记录插入表中时生成一个唯一的数字,可以利用这一特性自动生成主键序列号。

在 Oracle 中,必须通过 sequence 对象(该对象生成数字序列)创建 auto-increment 字段。

--创建序列
CREATE SEQUENCE 序列名
MINVALUE 1--最小值
START WITH 1--1为起始
INCREMENT BY 1--以1为递增量
CACHE 10--缓存10个值

--调用nextval函数自增
INSERT INTO 表 (ID,列2,列3)
VALUES (序列名.nextval,值2,值3)

5.7 VIEWS(视图)

视图是基于 SQL 语句的结果集的可视化的表。

视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。

可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,也可以呈现数据,就像这些数据来自于某个单一的表一样。

  • 视图的作用:

    视图隐藏了底层的表结构,简化了数据访问操作,客户端不再需要知道底层表的结构及其之间的关系。

    视图提供了一个统一访问数据的接口。(即可以允许用户通过视图访问数据的安全机制,而不授予用户直接访问底层表的权限)

    从而加强了安全性,使用户只能看到视图所显示的数据。视图还可以被嵌套,一个视图中可以嵌套另一个视图。

--创建视图
CREATE VIEW 视图名称 AS 查询语句

--更新视图
CREATE OR REPLACE VIEW 视图名称 AS 查询语句

--撤销视图
DROP VIEW 视图名称

6. DBLINK

6.1 DBLINK 学习

目的:为了解决跨库访问的需求。

场景如下:tnsnames.ora(oracle的库配置文件)下配置了2个库的环境地址,现在要实现跨库访问。

PS:DBLINK和是否同一个主机无关,只要跨库,不管2个库是不是在一台主机上,都要使用DBLINK进行通信(前提条件:两个库端口要通,可以使用telnet命令来测试)

6.2 赋予权限

--在创建database link(DBLINK)之前需要判断,登陆的用户是否具备创建database link 的权限

PS:注意,此时登陆的账号是需要创建dblink的账号(用这个库去调用其他库)

-- 1、查看当前登陆的账号是否具备创建database link 权限
select * from user_sys_privs where privilege like upper(‘%DATABASE LINK%‘) AND USERNAME=‘当前登陆的账号‘;
PS:如果查询有返回行,则表示具备创建database link权限,否则,则需要使用sys登陆orcl为当前登陆的账号赋予创建权限

-- 2、给当前登陆的账号授予创建dblink的权限
grant create public database link to ‘当前登陆的账号‘;

-- 3、 再次执行第一条查看是否具备权限的sql语句,会发现有返回行,表示,当前登陆的账号已经具备创建database link的权限
select * from user_sys_privs where privilege like upper(‘%DATABASE LINK%‘) AND USERNAME=‘当前登陆的账号‘;

6.3 创建 dblink

方式1:pl/sql developer 图形化创建

方式2:sql语句创建

-- 1、注意一点,如果密码是数字开头,用“”括起来
CREATE PUBLIC DATABASE LINK DBLINK名称 CONNECT TO 当前登陆账号 IDENTIFIED BY "密码" USING ‘连接的数据库‘
--例:
CREATE PUBLIC DATABASE LINK TESTDBLINK CONNECT TO ZHANGHAO IDENTIFIED BY "123456" USING ‘TESTDATABASE‘

-- 2、sql中直接写入库配置
CREATE DATABASE LINK DBLINK名称 CONNECT TO 当前登陆账号 IDENTIFIED BY "密码" USING ‘
     (DESCRIPTION =
          (ADDRESS_LIST =
              (ADDRESS =
                 (PROTOCOL = TCP)
                 (HOST = XXX.XXX.XXX)
                 (PORT = 1521)
                                )
                        )
              (CONNECT_DATA =
                  (SERVICE_NAME = XXXX)
                                )
                )
‘;

6.4 操作

首先,我们需要在ORCL2库中新建一张表,并插入部分数据,如下图:

现在,我们通过database link 在orcl中访问这张属于orcl2库中WANGYONG的表COMPANY

从截图中可以看到,在ORCL中可以成功访问到ORCL2中用户WANGYONG的表

下面,利用同样的方式,进行插入,修改,删除操作,依次看截图,每一次操作后均执行查询语句,可对比执行效果:

6.4.1 插入

6.4.2 修改

6.4.3 删除

6.5 创建同义词(简化操作)

-- 创建同义词
create synonym TESTSYNONYM(同义词) FOR [email protected];

PS:创建同义词以后,查询、插入、修改、删除中可直接用 TESTSYNONYM 代替[email protected],例如查询语句可改成如下方式(插入,修改,删除类似):

SELECT * FROM TESTSYNONYM(同义词) order by id -- 查询ORCL2中WANGYONG用户的表COMPANY

参考资料:

Oracle DBLINK 简单使用(特此感谢!)



Oracle SQL(四)

原文地址:https://www.cnblogs.com/cy-8593/p/12559310.html

时间: 2024-11-08 23:34:47

Oracle SQL(四)的相关文章

Oracle学习-Power Designer、visio 2003、Oracle sql developer、OEM、expdp

Oracle的体系太庞大了.对于刚開始学习的人来说,难免有些无从下手的感觉. 经过一学期的学习对Oracle学习有了一些深入的了解,由于之前学习过Oracle的一些主要的知识.所以学习起来上手比較快一点. 这次Oracle项目让我又一次对Oracle的基本知识进行了运用,而且对软件project也有了新的认识.从需求分析.概念结构设计.逻辑结构设计.物理结构设计.数据库的建立和測试.数据库执行和维护. 尽管说数据库设计的周期比較长将近用了三周左右,可是每一步做的还是非常认真的对待.我选择的是舰队

oracle sql优化

第一掌 避免对列的操作 任何对列的操作都可能导致全表扫描,这里所谓的操作包括数据库函数.计算表达式等等,查询时要尽可能将操作移至等式的右边,甚至去掉函数. 例1:下列SQL条件语句中的列都建有恰当的索引,但30万行数据情况下执行速度却非常慢: select * from record where  substrb(CardNo,1,4)='5378'(13秒) select * from record where  amount/30< 1000(11秒) select * from recor

Oracle SQL执行计划基线总结(SQL Plan Baseline)

一.基础概念 Oracle 11g开始,提供了一种新的固定执行计划的方法,即SQL plan baseline,中文名SQL执行计划基线(简称基线),可以认为是OUTLINE(大纲)或者SQL PROFILE的改进版本,基本上它的主要作用可以归纳为如下两个: 1.稳定给定SQL语句的执行计划,防止执行环境或对象统计信息等等因子的改变对SQL语句的执行计划产生影响! 2.减少数据库中出现SQL语句性能退化的概率,理论上不允许一条语句切换到一个比已经执行过的执行计划慢很多的新的执行计划上! 注意:

Oracle SQl优化总结

连续两个公司都作为外派人员到客户方工作,缺少归属感的同时,对数据库技术的热爱是我唯一的安慰,毕竟这是自己喜欢的事情,还可以做下去. 因为客户项目的需要,我又开始接触Oracle,大部分工作在工作流的优化和业务数据的排查上.为了更好的做这份工作,我有参考过oracle达人,Oracle.10g性能分析与优化思路,基于海量数据的数据库设计与优化等书籍,以及案例学习SQL优化的视频等.基本上我工作中接触的主要是Oracle SQl的优化,基于长时间做SQL优化工作,现在对Oracle的SQL优化做一下

oracle sql 高级编程 历史笔记整理

20130909 周一 oracle sql 开发指南 第7章 高级查询 1.层次化查询select level,ttt.*,sys_connect_by_path(ttt.col1,',') from ttt start with .. Connect by prior -因为先建立树,再进行where过滤的.在where中过滤和在cooonect by中过滤是不一样的. 2.rollup cube高级查询 select grouping(col1) .. From ttt group by

oracle sql 基础(二):select 语句

为了从数据库中查询数据,你需要用SQL语言中使用最多的SELECT语句.我们分别介绍SELECT语句的基础语法.子查询.从多表中查询数据,然后再进行实例解析. 一.SELECT语句的基础语法 SELECT语句就像叠加在数据库表上的过滤器,即选择查询用于定位数据库特定的列和行.下面是SELECT语句的基础语法.  SELECT [ALL|DISTINCT SELECT_LIST FROM {table_name|view_name} [WHERE search_condition] [GROUP

使用Oracle Sql Developer将SQL SERVER 2008数据库移植到Oracle 11g

ORACLE官方提供的Sql Developer自带的Oracle Migration Workbench. 什么是Oracle SQL Developer?在官方页面上,是这样介绍它的: Oracle SQL Developer is a free and fully supported graphical tool for database development. With SQL Developer, you can browse database objects, run SQL st

oracle -sql模式匹配

下面是条件 like与regexp_like条件 下面是函数 regexp_instr regexp_replace regexp_substr select * from tis_ft_user_infowhere  regexp_like (credential_number,'^5'); ORACLE中的支持正则表达式的函数主要有下面四个:1,REGEXP_LIKE :与LIKE的功能相似2,REGEXP_INSTR :与INSTR的功能相似3,REGEXP_SUBSTR :与SUBSTR

【重磅干货】看了此文,Oracle SQL优化文章不必再看!

听“俊”一席话,胜读十年书.看了这篇由DBA+社群联合发起人丁俊大师(网名:dingjun123)分享的SQL优化大作,其他Oracle SQL优化文章都不必再看了! 专家简介 丁俊 网名:dingjun123 DBA+社群联合发起人 性能优化专家,Oracle ACEA,ITPUB开发版资深版主.8年电信行业从业经验,在某大型电信系统提供商工作7年,任资深工程师,从事过系统开发与维护.业务架构和数据分析.系统优化等工作.擅长基于ORACLE的系统优化,精通SQL.PL/SQL.JAVA等.电子