• Oracle学习第九课-视图,序列,索引,事务【Oracle暂时结束】


    视图(View)

    关键词: view

    创建视图: create view 视图名 as select语句

    含义: 将select语句的查询结果,作为视图,可以供查询使用.

    使用视图: view 就是一个虚拟表.

    select 列名,列名,列名
    from 视图名;

    优点:

    1. 简化SQL语句.

    2. 安全性,对开发人员屏蔽掉表和字段信息.

    注意:

    1. 视图提高查询效率 [错误说法]

    2. 视图本质就是存储了select语句, 视图基本不会占用硬盘空间.

    删除视图: drop view 视图名;


    序列(sequence)

    概念: oracle提供的工具,产生一系列连续且不重复的值.

    创建序列:

    create sequence 序列名 [start with 数字]

    使用序列获得值:

    序列名.nextval
    -- 从序列中获取一个值并展示出来.
    ​
    -- 查询序列中的值
    select 序列名.nextval
    from dual;
    ​
    -- 应用: 添加数据保证id主键是不重复?
    insert into 表名 values(序列名.nextval,......);

    删除序列

    drop sequence 序列名
    

    索引 Index[重要]

    问题: 数据量1000w(Oracle)会出现查询效率急剧降低?

    作用: 提高select查询效率.

    核心思路:

    创建索引: create index 索引名 on 表(字段)

    相当于: create index 索引名 on 字典表(拼音)

    使用索引: 不需要手动使用, 默认使用索引字段为条件进行查询时,数据库会自动使用索引查找数据.

    删除索引: drop index 索引名;

    索引特点:

    1. 索引会占用硬盘空间.

    2. 增删改操作,会牵涉索引的修改和维护, 降低了DML的效率.[缺点]

    3. PK(Primary key) UK(unique key) 主键和唯一约束的列,数据库会自动添加索引.


    事务[重要]

    问题:

    -- 张三将工行账号60000转给李四?
    account:[id,name,birth,mobile,balance]
    id, name,   birth,  mobile,         balance
    100 张三     ---     15533333333      60000
    101 李四     ---     15566666666      600000
    ​
    思路:
    1. 将张三balance 修改为0? -60000
    update account set balance = 0 where id = 100;
    2. 将李四的balance 修改为  660000
    update account set balance = 660000 where id = 101;
    ​
    问题: 多个sql语句,完成一个独立功能,出现了完成一半,影响功能的实现!!!!
    ​
    希望:
    1. 转账操作多个sql执行成功    √  
    2. 转账操作多个sql执行全部失败 √ 
    总结: 转账中的多个sql,要么全部成功,要么全失败!----将转账中的多个sql看做一个整体.

    概念: 数据库的最小执行单元,有多个sql组成的一个整体

    事务中的sql执行结果: 要么全部执行成功,要么全部执行失败.

    结论: 实际开发中,一个独立的功能中,包含的多个SQL,要作为一个事务来操作.

    事务的使用(边界):

    成功结束事务: commit(提交);-- 事务中多个sql执行生效.

    失败结束事务: rollback(回滚);-- 事务中的多个sql执行失效.

    类似于Java中的try-catch 

    try{
        1张三将工行账号60000转给李四?
        update account set balance = 0 where id = 100;
        2. 将李四的balance 修改为  660000
        update account set balance = 660000 where id = 101;
        成功结束事务: commit 提交.
    }catch(){
        失败结束事务: rollback 回滚.
    }

    事务的实现原理

    1. 数据库会为每个客户端都分配一个独立的回滚段(临时空间 rollback seagment), 临时存放当前客户端sql执行结果.

    2. commit: 将回滚段中的sql执行结果一次性同步到数据库中.

      rollback: 将回滚段中sql的执行结果,舍弃丢失.

    事务特性 ACID: [笔试]

    A (Atomic) 原子性: 事务中的多个sql语句是一个整体, 要么全部成功,要么全部失败.

    C (Consistency) 一致性: (数据的合理性),事务执行前后(无论失败还是成功),最终数据是合理的.

    I (Isolation) 隔离性: 事务与事务之间是相互独立的.

    D (Durability) 持久性: 事务结束(成功或失败),对数据库的数据修改时永久性的.


  • 相关阅读:
    scanf()常犯错误
    C语言,链表反转
    c语言: 冒泡排序
    判断一个数是否为2的若干次幂
    计算一个整数中含1的个数
    ELF文件的加载过程(load_elf_binary函数详解)--Linux进程的管理与调度(十三)
    Linux进程启动过程分析do_execve(可执行程序的加载和运行)---Linux进程的管理与调度(十一)
    Linux内核线程kernel thread详解--Linux进程的管理与调度(十)
    Linux下进程的创建过程分析(_do_fork do_fork详解)--Linux进程的管理与调度(八)
    Linux下2号进程的kthreadd--Linux进程的管理与调度(七)
  • 原文地址:https://www.cnblogs.com/chenpeisong/p/9775226.html
Copyright © 2020-2023  润新知