首页 > 代码库 > Oracle回顾

Oracle回顾

       回来之后录了几集视频,开始录得时候还不知道怎么录,录了几集就没什么了,每一集十几分钟录得不好了可以重新录,过程中也也把Oracle数据库这部分看了一遍,收获也挺多的,学习是重复积累的过程,对于一些零散的知识点又回顾了一下,重新复习一遍其中有些已经学过,有些仅仅是有一点点印象,记得有一句话叫做“一本书只要其中有一句话对你很有帮助,那么它是有价值的”,看完这个视频也学习和加深了一些知识的离家,并总结如下,大家可以作为参考。

数据库理解

       计算机就如同我们的身体各个部分,数据库=大脑,五官=编程语言,血液=数据总线,操作系统=人体。

       在大脑里面存储着各种信息,通过我们的眼、耳等五官输入到我们的大脑里面,因此五官就像我们平时使用的各种编程语言,而操作系统就好比我们的身体支撑着我们个个部分的结构完整,保证它们能够正确运行,计算机和我们的身体是一样的,大同小异,毕竟是人发明了电脑。

Oracle用户

超级管理员sys/chage_on_install

普通管理员system/manage

普通用户scott/triger

Oracle中的函数

单行函数

      字符函数

         substr(),截取字符串

      数字函数

         round()随机函数

         mod()取摸函数

      日期函数

          Sysdate()取得当前日期

          对于日期,加减一个数,等于若干天之后或之前的一个日期

转换函数

       to_char(),To_char(‘12345678‘.‘999,999‘)

       to_date(),例如To_date(SYSDATE,‘yyyy-mm-dd‘)

通用函数

       NVL(),将一个null的字段值变为0,例如select NVL(name,0) from table1 ,如果name为null时,将输出0而不是null

      decode(),判断一个字段等于多少,然后,输出多少,例如上面name=1.输出张三;name=2输入李四

多表查询

      一般超过两个表一起查询就会差生笛卡尔积的现象,查询出来的结果为两个表的记录数乘机,我们需要利用等值条件消除笛卡尔积,只是查询出来的结果进行了消除,但是从本质上看并没有消除,还是有笛卡尔积的现象,因此,并不建议使用多表查询,多表查询影响查询效率,尤其是在多表大数据查询时更不建议使用联合查询,

在真正的大数据系统中 通常在查询数据之前,需要先看一下里面有多少数据,只查询出自己想要的数据即可。

分组查询

        对于复杂的SQL语句需要自己多练习才可以灵活掌握,并想它们之间的关系和每个SQL语句的作用,随着使用的加深会对每个SQL语法理解更深刻,如果再出现类似的查询会出现的思路变多。

查询时PS:

      1. 通常子查询写在from或where关键字之后;作用是形成新的表和结果集,可以从新的结果集中查询或得到条件。

      2.where条件在group by之前执行,即先进行条件过滤,把过滤后的结果按照某一个字段进行分组。

      3.如果分组之后还需要对结果进行过滤,那么就得使用HAVING字段设置过滤条件了。

      4.排序关键系ORDER BY在SQL语句的最后执行。

只要记住这几个原则,再加上多多练习复杂一些的查询,SQL语句应该是没有什么问题的,再难的查询也不过是这些单词的拼接和组合。

序列的使用

      以前也听说过序列,但是自己没用过。因为总觉得很麻烦,所以没有使用过。这次项目中用到了,而且视频也讲到了,才发现,很简单很实用。

语法:

CREATE SEQUENCE myseq

     INCREMENT BY 1   -- 每次加几个

     START WITH 1     -- 从1开始计数

     NOMAXVALUE       -- 不设置最大值

     NOCYCLE          -- 一直累加,不循环

     CACHE 10;

使用的时候,例如插入,只用在对应的列赋值myseq.NEXTVAL即可。

例如

INSERT INTO emp VALUES (myseq.nextval, ‘LEWIS‘);

事务处理

       对于操作数据库的每一次连接,它是同数据库建立了一个session,即一个会话这个会话虽然不是web层的会话但同那个会话也很类似,在一个session中对数据库进行各种操作即是在同一个事务中,这种事物是本地事务,如果是更新操作上一个事物没有更新完成,下一个事物不能进行提交和操作,因为在更新的时候数据库会自动枷锁,知道更新操作完成才会释放锁。

数据伪列

       指的不是我们设计数据库的人自己添加的列,而是隐含的列我们可以使用,Oracle中常见的两个伪列为ROWNUM、ROWID,经常用到的是ROWNUM这个列,ROWID为记录的物理地址,我们可以利用这一点实现分页效果,看下面代码

Select * from(select ROMNUM rm,id whereROMNUM<=10) temwhere tem>5

ROWNUM;每次查询都变不固定

ROWID:数据记录的物理地址

闪回技术

         从Oracle10g之后的数据库都提供了闪回技术,相当于一个回收站的功能,删除的数据或者表什么的可以从回收站里面找回来,这个功能在有时候挺实用的,值得我们去了解了解。

简单命令:

查看回收站里面内容show recyclebin

找回删除的表:Flashback table tablename to before drop

清空回收站:Purge recyclebin

约束

非空

一个字段不能为空,not null

唯一性

该约束是对某个具体字段而言,将某个字段设为唯一则该字段不会出现重复记录,但要记住null是可以的,只要不重复就行。

主键

主键=非空+唯一性

外键

如果一个表的主键再另一个表中当做外键,那么这个键就是外键约束,外键和主键约束是同时存在的。

检查

即对一个字段做一些限制,例如性别:在数据库中限制只能输入男或女。

联合查询

连接两个表的查询结果


Union:联合查询,相同的部分不显示

Union all:相同的部分显示

Intsersect:只显示相同的部分

Minus:只显示不同部分

视图

第一类 on with check option

这种视图是待查询条件的视图,可以更新,但是不能更新查询条件

第二类 with read only

该视图为只读的,不可以对该视图中的任何一个字段

索引

        索引的主要功能就是用于提升数据库的操作性能。
       
         Select * from table1 where id>10000
            i. 上面的语句是逐行进行判断,没有加索引
            ii. 加索引之后会对加索引的那列,二叉树排列,如下
                1)
                2) 再执行上面语句,只查询部分记录
                3) 如果某列是主键约束,则自动建立索引
                4) 手工创建,在某一个列上建立
            iii. 这种索引有一个问题,即:如果想要性谁能提高,则必须维持以上的这棵树,如果数据需要频繁修改的话,则代码性能会下降。
            iv. 所以,一般索引只使用在不会频繁修改的表中,而如果一张表上频繁修改数据切又使用索引,性能会降低,所以,性能提升永远是相对的。
            v. 这种所以是Oracle十几种索引中的一种,也是最简单一种称为:B树索引。还有位图索引、函数索引等

数据库备份

       在上线的项目中,数据库备份是很重要的一个工作。

导入导出

冷备份

      先把数据库停止运行了,再进行备份,类似于热插拔。

数据库监听

 1.监听客户端连接

     监听为数据库实例服务,当用户第一次登陆实例时先通过监听,再连接,第二次连接就不通过监听了
        b. Oracle开始没有在window上,后来移植到了window所以,提供监听了
        c. 当安装到window上之后,适应了些window操作习惯,可以傻瓜登陆,window模式
        e. 监听需要判断是普通用户登录还是sysdba登录,如果是普通用户就去数据库验证;如果是dba就是密码文件或操作系统验证
        f. 操作系统验证
            i. 对于DBA,首先是操作系统验证,所以,不写密码或则随便写都可以登录,因为他是操作系统用户
                1) 如果把操作系统认证 取消,则进行密码文件验证,再不写密码就不行了

2.管理实例

     多个数据库实例可以同时注册到一个监听器上,它们把自己的实例名等参数信息在监听器注册,当客户端连接监听器时就可以通过这些参数来找到数据库实例,在客户端与实例之间实现了一个桥梁的作用。

3.负载均衡

    一个小小的监听器具有均衡客户端连接的作用,如果有一个实例的连接数量非常的多,那么监听器会自动将多一部分连接转移到其它实例上面。


Oracle回顾