目录

一、数据库对象

二、同义词synonym

三、序列

四、视图

五、索引

六、综合代码

1.同义词部分:

2.序列:

3.视图和索引


一、数据库对象

1.数据库对象
        2.同义词
        3.序列
        4.视图
        5.索引

数据库对象:
          又称模式对象,是逻辑结构的集合。
          最基本的数据库对象就是表。

数据逻辑结构:指的是存在一种或多种特定关系的数据元素集合。
    通俗点:就是把数据元素形象地进行了有规则排列,但不用考虑在计算机上如何实现。
    再通俗点:就是数据有规则的排列。表不就是有规则的排列吗?

数据库对象包括:
  同义词、序列、视图、索引、表、函数、包、过程、触发器等。

指针

二、同义词synonym

概念:

同义词——现有对象的一个别名。
    (同义司对网管而言是个非常霸气的东西)
    Oracle只有一个数据库,用户的访问是通过表空间分隔开的,一般来说两个用户之间不能相互访问,但现在A用户要B用户分享某个表中的数据,那B的表空间就要给A分配个权限。

如果只共享表空间中的某个表中的一部分数据,怎么共享?
    ----将某个表共享,但这也向其他用户曝露了表,存在安全问题。因此,我们给要共享的表设置个同义词(别名),将同义词共享给其他用户。

举例:
            同义词就好比我们要给这个对象取别名,也就是我们所称的“外号”,比如张新宇你们叫他“锤子”,“锤子”就是他的外号;如果某天来个IS来找“锤子”,他找得到么?找不到,“锤子”是不是很安全?IS找门卫问这里有个叫“锤子”的没有?门卫当他傻啊,如果说要找张新宇,找不找得到?找得到。

同义词分类:
            1.私有同义词;--  只有自己使用; 只能在其模式内访问,且不能与当前模式的对象同名。
            2.公有同义词;--  搞个别名给大家使用;公有同义词可被所有的数据库用户访问。

同义词作用:
            1. 提高安全性
            2. 主要用于资源共享。
                    模式==对象。
        1.私有同义词
          语法:

    Create [or replace]  Synonym  syn_emp  For  scott.emp;--Synonym   同义词--syn_emp   指scott.emp表的同义词(别名)--scott.emp 是模式名(对象名),其中emp是表名。

如果当前是用scott账户在操作,则可以省略scott.
        2.公有同义词
          语法:

    create public  synonym  syn_emp  for  scott.emp;--syn_emp  同义词名(别名)

注意:
  在创建私有同义词时,发现scott也没有权限创建,要让scott有创建的权限,就需要用管理员权限给scott授权。

   为某个账户授权同义词:

    grant create synonym to scott;

  注意:权限授出后,一定要收回(取消授权),否则会乱套。
          取消授权:

    revoke create synonym from scott;

以上是授权私有同义词,那么公有的同义词呢?
  公有的同义词不能授权,也就是普通账户不能创建公有同义词,除非是管理员账户。

    3.同义词的操作

              调用:

   select * from syn_emp;--syn_emp 为同义词名(别名)

                删除:

    Drop Synonym  syn_emp;        --删除私有同义词Drop Public Synonym  syn_emp;    --删除公有同义词

     创建或替换(修改):

    create or replace sysnonym syn_emp for scott.emp;

三、序列

概念:

oracle中没有标识列,就是序列,标识列可以做好多东西,有替代品---序列,比标识列麻烦的多。  序列+触发器
    1. 什么是序列?
            序列是用于生成唯一的、连续的序号 的对象。
            序列有升序和降序。一般都是升序。
        1,2,3,4,5,6,7,8

2. 序列有什么用?
            能为我们生成一组连续的,永远不重复的一组数字。
            主要用于提供主键值,做分页。

3. 序列就是我们所学的sql server中的标识列:
            标识种子——从什么数字开始,常用1
            标识增量——每次增加的数

1.创建序列语法<色'昆死>

    create sequence 序列名称[start with 1]               -- (种子)从n开始计数[increment by 1]             -- (增量)每次递增n,负数为递减  <英'克瑞门特>[maxvalue n | nomaxvalue]    --  最大值[minvalue n | nominvalue]    --  最小值,(没太多含义)[cycle | nocycle]             --  循环/不循环<塞叩>[cache n | nocache];         --  分配并存入到内存中

案例:

create sequence seq_110
start with 1
increment by 1
maxvalue 99999
minvalue 1;

     2.使用序列
            通过序列的伪列来访问序列的值。
            nextval——返回序列的下一个值(一直往下,永远不回头,取下一个,指针在下一个值上面)
            currval——返回序列的当前值(取当前的,指针永远在当前值上面)

id    1,2,3,6,4,5,
        案例:

    --查下一个(显示的值不会回头,没有回头的,有回头程序就有问题了)select seq_110.nextval from dual;(显示的值1,2,3,4,5,……,永远不会回头,显示相同的数字)--查当前select seq_110.currval from dual;

注意:
        1.序列不要轻易的删掉
                  在SQL Server中,有标识列1,2,3,4的数据,如果删除标识列4的,再增加一条记录,标识列是5。
  在Oracle中,如为某表定义了序列,删除中间的某条记录,情况和SQL Server中一样,但是如果把该表的序列删掉,再创建序列,那么情况就不一样了。

例:
        学生信息表
          1,2,3,4,5 , 6, 7,8,9, 10, 11, 13 ,1 ,2 ,3

序列,currval   nextval  13

学号为7的学生成绩表  7,90  80

1,2,3,4,5,6,7,8,9

所以创建序列这里就不能用:create or replace sequence seq_110;

2.create sequence seq_110; 不写了,可不可以?结果会是什么?
  就是标识列,默认的属性,种子1,递增1,最大值?我也不太清楚,无聊你们自己去试。
            思考:
                既然序列是一组唯一、有序的数字,那在触发器insert时,把序列当做id插入,是否就可以达到了标识列的效果呢?

insert into tb_name(tid,tname,tprice)values(1,'张三',100);
insert into tb_name(tid,tname,tprice)values(2,'李四',100);
insert into tb_name(tid,tname,tprice)values(3,'李四',100);
insert into tb_name(tid,tname,tprice)values(4,'李四',100);create sequence seq_110;  //创建一个序列insert into tb_name(tid,tname,tprice)values(seq_110.nextval,'张三',100);  --序列当前值的下一个值insert into tb_name(tid,tname,tprice)values(seq_110.nextval,'李国',100); select seq_110.currval from dual;  --序列当前值

要搞清楚这个思路:
            在往表里插入一条或多条数据时,会自动执行insert的触发器,
            那么我在编写insert触发器时,手动的将序列放入到触发器,
            每次执行插入一条数据时,添加了一个序列进去。

不过有些麻烦,要在oracle中做成标识列,要触发器。

(每次插入时搞个触发器,然后在他插入之前,去修改一下他插入的那张临时表inserted,把表里的值就调用这个序列的nextval,这样看上去就看是个标识列。)

比oracle要麻烦,要强大,有前触发,有后触发。

思考:如果有100个表,要写多少个序列?1个还是100个?都行,没有标准的。
    如果写一个,100个表共用一个序列,那会造成每个表中的标识列不连贯,比如:
            A表:
                    序列1,2,3,4,9,10,11,……
                            1,2,3,4,5,6,7,8
            B表:
                    序列5,6,7,8,12,13,14,……
                           1,2,3,4,

注意:尽量做到一个表一个触发器一个序列。

A表  seq_110
                        序列1,2,3,5。。。。。。

B表  seq_120  
                        序列1,2,3,4,5

4.更改和删除序列
            更改序列:

    alter sequence seq_110 maxvalue 5000 cycle;

注意:不能更改序列的start with参数 尽量不要修改,一旦修改会出问题,如果实在要改,先删了再创建序列。

删除序列:

   drop sequence seq_110;

四、视图

通过定制的方式显示来自一个或多个表的数据。
            说白了:视图就是一个虚拟表,就是一段查询的SQL语句。
            好处:安全性,降低了程序的复杂程度

--例如:emp查询每个员工的名字、薪水、奖金、收入、部门名称dept
--建议:先写查询语句,再去搞视图
--第1步写查询语句:
select a.ename 姓名,a.sal 薪水,a.comm 奖金,(a.sal+nvl(a.comm,0)) 收入,b.dname 部门 from emp a
inner join dept b
on a.deptno=b.deptno;

是不是每个人都要写这么长段代码?不用,我们根据这需求创建个视图,以后别人要看,就直接调用这个视图名就行了。

--创建这个需求的视图
create or replace view v_emps
as
select a.ename 姓名,a.sal 薪水,a.comm 奖金,(a.sal+nvl(a.comm,0)) 收入,b.dname 部门 from emp a
inner join dept b
on a.deptno=b.deptno;

注意:如果这时运行报错:没有权限,则要通过sys或system账户给scott赋view的权限。
    grant create view to scott;

--调用视图:
select * from v_emps;

思考:
--1. 视图是否可以调用视图?(肯定)
        --案例:我现在只要姓名,薪水,奖金3个列

create or replace view v_empb
as
select 姓名,薪水,奖金 from v_emps;

--2. 视图是否可以无限次嵌套?(应该不行,SQL Server最多是32层,Oracle中应该也差不多)

--3. 视图的数据是否可以直接修改?(视图的数据保存在表里,视图只是一张虚拟的表)
    理论上来说是可以修改的,这个修改是在修改基表上的数据;
    但有一种合成、聚合的数据,比如“收入”是由薪水+奖金,是不能被修改的。

-------联接视图(要操作)
关于+的,+号在右--->左联 left outer join
        +号在左--->右联 right outer join 
        左右都有+号--->全联  full outer join

-------视图上的DML语句

-------视图中的函数

五、索引

是数据库内部编排数据的一种方法。
            优点:提高查询速度

--创建索引
Create Index index_name on Tablename(colname,colname...)
tablespace 表空间名;--不能使用or replace--重建索引(修改)
Alter Index index_name Rebuild;--删除索引
Drop Index index_name;--唯一索引
Create Unique Index index_name On Tablename(colname);--组合索引
create index index_name on tablename(colname1,colname2,……);--反向键索引--位图索引--索引组织表

好处:把数据存储在与其关联的索引中

最大优点:访问数据都是基于组件

六、综合代码

1.同义词部分:

--SYS管理员
select * from emp;select * from scott.emp;select * from scott.tb_0214;create public synonym qrj for scott.tb_0214;select * from qrj;--通过私有同义词创建别名为tb_0214
create or replace synonym fsj for scott.tb_0214;select * from fsj;grant create synonym to scott;grant create public synonym to scott;select * from sb;revoke create public synonym from scott;grant create view to scott;
revoke create view from scott;-----------oracle数据库对象----------
#左侧导航窗口的所有文件夹名称都可以称之为数据库对象
#最基础的数据库对象=====数据表table
#常用的数据库对象:function函数 procedure存储过程 package程序包
#trigger触发器  table表格  index索引 view视图
#sequence序列 users用户 synonym同义词#所有数据库对象的操作必须动用SYS去管理#今日学习数据库对象:synonym同义词|sequence序列|视图|索引--synonym同义词
--一般为数据表起别名,方便查询使用
--也方便别人能够在有效的权限中进行访问。--角色:scott
select * from emp;--其实emp就是通过同义词创建的
select * from scott.emp;--创建表的同时复制emp表中的三个字段的所有结果集
create table tb_0214
as
select empno,ename,sal from emp;select * from tb_0214;--为tb_0214创建一个公开的同义词
--公开同义词的特点:全用户共享
--create public  synonym  syn_emp  for  scott.emp;
create public synonym qrj for scott.tb_0214;select * from qrj;select * from fsj;--给定当前scott用户授予创建同义词的权限-----SYS去授予
grant create synonym to scott;create public  synonym sb2 for scott.tb_0214;select * from sb;--注意事项:不管是公有同义词还是私有同义词都需要单独授予权限
--通过SYS角色授予
--私有同义词
grant create synonym to 用户角色名;
--公有同义词
grant create public  synonym to 用户角色名;--撤销权限
revoke create public synonym from 用户角色
revoke create  synonym from 用户角色

2.序列:

序列:sequence
生成一连串的有顺序的序号,类似rownum伪列
作用:当创建表时,该表的主键字段如果需要序号去标记(1,2,3,4,5...)
可以使用序列这个数据库对象进行标识。
#注意事项:最好一个序列只为一个表服务
/*
语法:create sequence 序列名start with 值      --该序列从什么值开始标识increment by 值    --该序列每次增长指定的值maxvalue 最大值minvalue 最小值
*/
create sequence stu_id
-----------------------
create sequence stu_id2
start with 100
increment by 1
maxvalue 1000
minvalue 1create table tb_02144
(sid number primary key,sname varchar2(20))
--序列中的两个伪列属性   currval 当前   nextval 下一个
select stu_id.nextval from dual;select stu_id.currval from dual;select * from tb_02144;
insert into tb_02144 values(stu_id2.nextval,'张三')

3.视图和索引

视图----view
作用:一张虚表,可以将一个复杂的结果集存储到一个视图容器内,
以后方便调用。
/*
create view 视图名称
asselect*/
--查询emp表和dept表一次查询
create view v_demo_01
as
select emp.*,dept.dname,dept.loc from dept inner join emp
on dept.deptno = emp.deptno where dept.deptno = 10;select * from v_demo_01drop view v_demo_01--grant create view to scott;  视图创建必须授予权限  SYS--索引index-------数据库中特定的一种数据排布方式。类似课本的目录
--索引创建的目的:加快查询的效率
--但是索引在一张表不能创建多个。反而会影响效率。create index i_mc
on emp(ename)select * from emp where ename like 'S%'drop index i_mc--改变url  驱动包  classfrom

Oracle 快速入门 同义词序列视图索引相关推荐

  1. Oracle Class4. 数据库对象(同义词,序列,视图,索引,簇)

    ------------------------2013-5-9------------------------ 索引的建立情况:经常用于查询,排序和分组的列(即经常在where,order或grou ...

  2. 【C/C++9】天气APP:Oracle的虚表/日期/序列,索引/视图/链路/同义词,数据库高可用性

    文章目录 1.虚表/日期/序列:SEQUENCE 2.索引/视图/链路/同义词:create index/view/link/synonym 3.表空间/数据文件/启动关闭/权限/备份恢复:exp/i ...

  3. Oracle 学习笔记 12 -- 序列、索引、同义词

    数据库的对象包括:表.视图.序列.索引和同义词.在前面的笔记中陆续学习了表和视图,那么本次笔记将学习剩 下的数据库对象,即:序列.索引和同义词. 序列:提供有规律的数值.可供多个用户用来产生唯一数值的 ...

  4. Oracle数据库中的序列、索引和同义词,详细笔记。

    文章目录 数据库中的序列.索引和同义词 1. 序列 1.1 什么是序列 1.2 创建序列 1.2.1 通过DDL语句创建序列 1.2.2 使用工具创建序列 1.3 使用序列 1.3.1 查询序列 1. ...

  5. Oracle快速入门 | 黑马

    目录 概述 特点 体系结构 基础语句 一.创建表空间.用户.授权 二.数据类型 字符型 数值型 日期类型 特殊 三.创建表.修改表和删除表 四.序列 用户 system用户 scott用户 查询语句 ...

  6. 总结:Oracle快速入门

    2019独角兽企业重金招聘Python工程师标准>>> 一:数据库分类 小:access/foxbase等 中:mysql/sql server/informix等 大:oracle ...

  7. Oracle 快速入门 基本操作(必知)

    目录 一.需要启动的服务(必知): 二.常用数据表(常识) 二.关于Oracle数据库的开发环境(必知) 三.PL/SQL Developer 集成开发环境 四.新建SQL窗口(必知) 五.账户.表空 ...

  8. Oracle 快速入门 110个常用函数

    1. ASCII 返回与指定的字符对应的十进制数; SQL> select ascii(A) A,ascii(a) a,ascii(0) zero,ascii( ) space from dua ...

  9. Oracle 快速入门 触发器游标

    目录 一.触发器 1.什么是触发器(概念)? 2.创建触发器语法(史上最难的oracle语法,没有之一) 3. 触发器组成三部分: 4. 前触发与后触的原理图 5. 在级联表中创建触发器案例 二.程序 ...

最新文章

  1. 收藏/一文弄清楚强弱电机房位置大小及布置如何选择?
  2. 结合随机微分方程,多大Duvenaud团队提出无限深度贝叶斯神经网络
  3. 个性化 服务器运行失败,VirtualBox 运行失败
  4. JAVA ReentrantLock 分析
  5. 最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用41
  6. 【渝粤教育】电大中专新媒体营销实务 (11)作业 题库
  7. Linux创始人数据结构,Linux 通用数据结构说明
  8. 【java笔记】模拟B/S服务器
  9. Java JDK新特性探究-精简的JRE
  10. Android6.0 dump h264/h265编码裸流(二)
  11. HashMap和LinkedHashMap的遍历和插入顺序
  12. 搜狗微信临时链接转换成永久链接
  13. 对于目标文件系统,文件过大放不到U盘里
  14. TIPTOP、T100系统程序的内置函数使用详解
  15. 三维人脸表情识别综述学习笔记
  16. 摄像头相关控制器集合
  17. doom3关卡编辑器代码的一些分析
  18. 一张图,区分NPN于PNP型三极管的工作原理
  19. 【问题】连接mysql报错errorCode 0, state 08S01
  20. 服务器端口不稳定怎么解决,网络不稳定的原因分析,以及解决方法

热门文章

  1. SpringBoot banner图样
  2. Codeforces Round #670 (Div. 2) C D E
  3. 计算机教育软件排名,电脑教学软件
  4. (ECCV-2018)用于视频识别的多光纤网络
  5. IP核的使用之ROM(Vivado)
  6. 以STM32F103RCT6为例分析单片机的RAM以及ROM使用情况
  7. 北大计算机录取分数线2017,北大2017年高考在全国31省市录取分数线人数对比
  8. 怎么将图片压缩到最小,用什么方法
  9. 基于js实现的简易记账小本
  10. 一度智信:拼多多店铺怎么盈利