oracle概念

01、DDL 数据定义语言
create alter drop truncate

02、DML 数据操作语言
insert delete update select

03、TCL 事务控制语言
commit rollback

04、DCL 数据控制语言
rovoke grant
sql分类
A(Atomicity):原子性
    一个事务是一个不个分割的工作单位,要么所有的语句都执行成功,
    要么所有的语句都不执行。

C(Consistency):一致性
    事务必须是是一个数据库从一个一致性状态变到另一个一致性状态。

I(Isolation):隔离性
     一个事务的执行不能被其他事务干扰,在一个事务中添加修改的数据,  
    不能被另一个事务读取或修改。

D(Durability):持久性
    指一个事务提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
ACID
 1 Read Uncommitted(读取未提交内容)
 2        在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。
 3 
 4 Read Committed(读取提交内容)Oracle默认的级别
 5        这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别也支持所谓的不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。
 6 
 7 Repeatable Read(可重读)
 8        这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读(Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。
 9 
10 Serializable(可串行化) 
11        这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。
事务隔离级别
数据库设计(Database Design):针对用户特定的需求,我们能够创建最合适的数据库模型,然后将数据有效的存储!

数据库涉及的内容:01、需求分析
                          02、概念结构设计
                          03、逻辑结构设计
                          04、物理结构的设计
                          05、数据库的实施
                          06、数据库的运行和维护                            

数据库的三大范式:
01、确保每列的原子性:每一列的值都是不可再分的最小数据单元!
02、在满足第一范式的前提下,确保列中的每列都和主键相关!
03、在满足第二范式的前提下,确保每列都和主键有直接关系,而不是间接依赖!

A>B  B>C  B依赖于A,C依赖于B,我们就说C间接依赖于A,这种关系我们称之为:传递依赖。
数据库设计
1、建议不用“*”代替所有的列名
2、删除所有的数据用TRUNCATE代替DELETE
3、用NOT EXISTS 代替 NOT IN
4、用EXISTS 代替 IN
5、用EXISTS 代替 DISTINCT
6、驱动表的选择
    6.1from 后面靠右的那个表是驱动表(表都没索引的情况)
    6.2、再有索引的情况下,应该是没索引的那张表是驱动表
    6.3、驱动表要选择小表(过滤后的数据量小)
7where 子句的连接顺序
    7.1、过滤记录越多的条件子句应放置到后面
    7.2、表连接关系放在前面
    

8、索引-通过索引,执行效率更高
    8.1、单列索引:就是一个列的索引
    8.2、组合索引:就是多列索引
    8.3、分区索引:基于分区表
    8.4、B树索引:普通索引
    8.5、唯一索引:在索引里面增加了唯一约束
    8.6、反向键索引
    8.7、位图索引
    8.8、函数索引
    

9、表分区
    把表中数据划分成若干部分,并存储在不同的位置
优点:
    改善查询性能
    表更容易管理
    便于备份和恢复
    提高数据安全性
表分区种类
    散列分区:根据hash值自动分配
    列表分区:明确的指定列表
    复合分区:上面几种的复用
    其他分区:例如外键分区
sql优化
    
数据库对象:
  数据库对象-模式对象
        逻辑结构的集合,最基本的数据库对象是表
        同义词
        视图
        序列
        索引-通过索引,执行效率更高DBLink
        约束
        触发器
        存储过程
        ...
        
        
 数据库对象-视图
        视图View-虚拟的表
            限制对表中的一组行为访问
            隐藏数据的复杂性
            简化了用户的SQL
            基表定义修改隔离
            通过重命名列,从另一个角度提供了数据
        DML操作的限制
            只能对基表进行操作
            注意权限问题
            
数据字典
    静态数据字典
        dba_***:包含了数据库拥有的所有对象和权限的信息
        all_***:包含了用户当前可以访问的全部对象和权限的信息
        user_***:包含了用户拥有的对象的信息
        常用的:
        select * from user_tables --用户表
        select * from user_tab_cols -- 表的列
        select * from user_tab_comments; --查看表的注释
        select * from user_views; --所有的视图
        select * from user_sequences; --所有序列
        select * from dba_data_files;  --需要dba权限,
        才可以查看所有用户的tablespace以及其数据文件的存放位置
    动态数据字典   v$**
        v$sqlarea   --通过这个查看sql,优化sql
        v$session    --通过这个查看当前都哪些用户登录连接着数据库还可以看到实例
        v$tablespace --查看表空间
        v$database    --查看数据库
        v$instance  --查看实例
        ...
        
数据库对象-DBLink
    DBLink
        访问远程数据库(只读权限)
    创建步骤:
        为远程数据库建立网络服务名(Net Manager)
        创建DBLink
        注:一般的dblink都是公用的,所以使用system用户创建DBLink即可
        
数据库对象-同义词
    同义词(Synoyms)
        匿名,屏蔽对象的名字及其持有者
        为用户简化SQL语句
            不同数据库之间通过DBLink访问,建立同义词
            同一数据库下不同用户之间,建立同义词
    分类
        公用
        专用
数据库对象

 

posted @ 2017-06-22 22:26  羽哲  阅读(248)  评论(1编辑  收藏  举报