Oracle笔记整理

1.什么是关系型数据库?
基于关系模型所提出来的一种数据库。什么是关系模型?用一个二维表行和列的方式来保存数据。

2.NoSql Not Only Sql?
相当于java中的Map类型来存储数据。

3.什么是集群?
1)负载均衡,减轻服务端的压力。例如:tomcat的集群,同时进来1000个请求,如果只有一个服务器VS三个服务器。
2)失败迁移,事务操作,提高系统的可靠性。例如:Oracle的集群,客户端同时插入1000条数据,oracle1插入到200个时出问题,用oracle2,oracle3。

4.Oracle的体系文件?
1)数据文件(.dbf):储存数据
多个数据文件组成一个表空间,数据文件只能属于一个表空间。
2)控制文件(.ctl):
3)日志文件(.log):

5.用户如何通过java代码操作数据库?
用户通过jdbc操作”内存“中的”实例“

6.Oracle和MySql的区别?
1)Oracle中有用户的概念,orcl数据库中有很多个用户,每个用户下面有表。
2)oracle中select必须要有from,没有表的时候就写dual,dual仅仅满足select的要求,伪表,伪列
3)对字符串,Oracle区分大小,mysql不区分大小写
4)MySql手动开启事务,start transaction;Oracle自动开启事务
5)MySql中日期类型有date(年月日)和datetime(年月日时分秒),Oracle中只有date
6)Oracle有闪回机制,执行delete再commit,Oracle可以恢复。
7)Oracle中delete的效率比truncate高,MySql中的delete效率比MySql低,Oracle中存在undo数据
8)Oracle事务的隔离级别和MySql中事务隔离级别不一样

7.Sql优化原则:
1)尽量使用列名的方式代替*,oracle会解析*代表哪些列名
2)where的解析顺序,右边---->左边
3)where语句优于having,where后不可以使用多行函数
4)多表查询优于子查询,每一次子查询,访问数据库一次;子查询执行时转换成多表查询来执行;通过sql语句的执行计划可以看出
5)尽量不要使用集合运算,访问数据库的次数更多


8.Oracle中Sql的Null值问题,滤空函数nvl(a,b);nv12();
1)nvl(a,b);如果a为null,结果为b,否则,结果为a。
2)空值不等于空值,null!=null,使用null is null。
3)如果集合中含有空值,不可以使用not in,但是可以使用in。not in等价于<>all。
4)order by和null:nulls last,null值最大。

9.Oracle中的别名,有三种
1)as "别名"
2)"别名"
3)别名,不能用纯数字和关键字

10.distinct作用于后面的所有列。

11.oracle中的连接符。
1)||
2)concat();

12.日期函数
months_between(date1,date2);#两个日期相差的月数
add_month(date1,num);num个月后的日期
last_day(date);#date的下一个日期
next_day(sysdate,'星期?');#下一个星期?的日期,自动备份数据库,异地容灾
round(sysdate,'month');#日期四舍五入

13.group by语句的增强rollup(a,b);
group by rollup(a,b)
=
group by a,b
+
group by a
+
没有
group by

14.多表连接查询
左外连接写法:where a.deptno=b.deptno(+)
右外连接写法:where a.deptno(+)=b.deptno
自连接:给表起别名,不适合操作大表
层次查询:level(层)
select
from emp
connect by 上一层的员工=老板
start with 起始条件
=
select
from emp
connect by prior =老板
start with mgr is null

15.子查询注意的问题,单行子查询(返回一条记录),多行子查询
1)可以在主查询的where、select、having、from后面使用子查询
select后只能是单行子查询;
2)不可以在group by使用子查询
3)一般不在子查询中排序;但在top-n分析问题中,必须对子查询排序
4)一般先执行子查询,再执行主查询;但在相关子查询例外
5)单行子查询只能使用单行操作符,多行子查询只能使用多行操作符
in:子查询中集合,等价于<>all
not in:等价于=any
any:和子查询集合中的任意一个值比较
all:和子查询集合中的所有值进行比较
6)子查询中的null

16.sql的执行计划

17.集合运算
1)并集union/union all(交集会有两份)
2)交集intersert
3)差集minus只属于一部分
要求:
1)列数相同,to_number(null),to_char(null)
2)order by在最后

18.SQL类型
DML:数据库的增删改查
DDL:(针对对象)表的增删改查,视图的创建删除,序列的创建,索引的创建
DCL:grant,revoke授予撤销权限

19.Oracle中的地址符,&,写在SQL中,执行的时候弹出提示添加相应的内容

20.海量插入数据:
1)insert 语句可以嵌套子查询
2)数据泵(PLSQL程序)
    dbms_datapump(程序包)
3)SQL*Loader
4)外部表

21.delete和truncate的区别
1)delete逐条删除;truncate先摧毁表,再重建
2)delete是DML语句,truncate是DDL语句;DML语句可以回滚,DDL语句不能回滚。
3)delete不会释放空间,truncate会释放空间。
4)delete会产生碎片(影响查询效率),truncate不会产生碎片。
5)delete可以闪回(flashback),truncate不可以。commit之后还能撤销
6)

22.整理碎片
1)alter table<> move;
2)数据的导出,导入
         exp    imp
         expdp  impdp

23.Oracle中的事务
1)起始标志:事务中的第一条DML语句
2)结束标志:提交1)显式commit
                 2)隐式退出DDL,DCL,执行完之后会默认commit
             回滚1)显示rollback
                 2)隐式:非正常退出,系统出错
                 3)保存点,不用回滚到事务的开始
                    savepoint a
                    rollback savepoint a
                    
24.事务的隔离级别
set transaction read only;

25.Oracle中的伪列
1)level层次
2)rownum行号

26.rownum需要注意的问题
1)rownum永远按照默认的顺序生成
2)rownum只能使用<、<=、不能使用>、>=。oracle数据库为行式数据库,rownum永远从1开始

27.Oracle中的表
1)标准表
2)索引表
3)临时表:创建方式
            1)create global temporary table ();
            2)自动创建:排序会自动创建
            当事务或者会话结束时,表中的数据自动删除。

28.相关子查询,先执行主查询,再执行子查询。
定义:将主查询中的值,作为参数传递给子查询。

29.行转列的函数
wm_concat(carchar2) 多行函数,没有包含在这个函数中的列,必须在group by之后

30.表空间可以创建一张一张的表,create tablespace,默认的表空间为user
创建用户的时候也可以将它归为表空间

31.rowid:行地址

32.使用子查询创建语句,更换table为view就是创建视图
create table emp10 
as 
select * from emp where 1=2

33.drop table语句,将表放到oracle中的回收站里面。
回收站(普通用户才有)
show recyclebin;查看回收站
purge recyclebin;清空回收站
闪回删除-->回收站
flashback table TestSavePoing to before drop;

34.密码认证、主机认证(登录操作系统的用户必须为管理员)

35.Oracle中约束级别,列级约束,表级约束(联合主键)
主键约束(Primary key):
非空约束(Not Null):
外键约束(Foreign Key):子表的外键,必须是父表的主键。
        1)删除时:删除子表的记录,再删除父表的内容。将子表中相关依赖的外键值记录为null。
        2)级联操作:级联置空,on delete set null
唯一约束(Unique Key):
检查性约束(Check):性别的列的值,只能是集合中的值。

36.视图是一个虚表,视图是一个封装起来的sql语句,和表一样。
优点:简化复杂的查询。
with check option:只能操作看得到的数据
with read only:只读

37.序列,是一个数组,存在于内存当中,提高访问效率。
产生序列的不连续:
1)回滚
2)系统异常
3)多个表共用一个序列

38.索引:用于加速数据存取的数据对象。
工作原理:类似于书的目录。先查索引,再查表。
创建索引时,会创建一个索引表(类似于书的目录),会将索引rowid存入(oracle中自己维护),索引里面的rowid都是有规律的,
            oracle中查询有规律的数据快于无规律的数据,sql执行计划。一个索引一个索引表。
执行计划:1)explain plan for select...
          2)select * from table(dbms_xplan.displary);
没有索引:1)table access full;cpu的花费
有索引:1)index range scan;
索引类型:
1)B树索引:一颗有规律的树,一个父节点有多个子节点,内部算法。
2)位图:
索引不一定能提高查询的速度,在数据量大的时候。
以下情况下适合建立索引:
1)表大的情况下。
2)列名不会拼接在where子句中。
3)查询的数据大于2%到4%。
4)表经常被更新,索引的列的值易变化,目录也一直的变化。

39.PL/SQL语言。
1)使用PL/SQL的效率高于使用Java来操作数据库的效率高
2)不用将sql语句写在代码里面
3)将存储过程写在PL/SQL里面

猜你喜欢

转载自blog.csdn.net/qq_35341771/article/details/83051336