ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

12.12 Oracle数据库相关面试题精简版(后续继续完善)

2020-09-07 07:31:43  阅读:283  来源: 互联网

标签:面试题 精简版 数据库 事务 查询 索引 12.12 Oracle 数据


  1. oracle数据库
    1. MYSQL和Oracle的区别
      1. 事务提交方式
        1. MySQL默认是自动提交,而Oracle默认不自动提交,需要用户手动提交,需要在写commit;指令或者点击commit按钮
        2. 分页查询: MySQL是直接在SQL语句中写"select... from ...where...limit  x, y",有limit就可以实现分页;而Oracle则是需要用到伪列ROWNUM和嵌套查询
        3. 事务隔离级别:   MySQL是read commited的隔离级别,而Oracle是repeatable read的隔离级别
        4. MySQL是轻量型数据库,并且免费,没有服务恢复数据。Oracle是重量型数据库,收费,Oracle公司对Oracle数据库有任何服务
        5. MySQL的分区表还不太成熟稳定。    Oracle的分区表和分区索引功能很成熟,可以提高用户访问db的体验。
    2. 三种语言类型
      1. DML 数据操纵语言,用于查询和修改数据
        1. 增:INSERT 表 INTO (表字段)VALUES (值)
        2. 删:truncate、delete、drop的区别
          1. 用法:truncate 表名;delete from 表名 where...;drop table 表名;
          2. truncate、drop是不可以rollback的,但是delete是可以rollback的;原因是:delete删除是一行一行的删除,会触发触发器,删除可以返回行数,每删除一行会进行一次日志记录,所以可回滚;而truncate删除是删除表的所有数据,通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放,所以不能回滚,可以重置自增字段的计数器;Drop语句将删除表的结构、被依赖的约束(constrain)、触发器 (trigger)、索引(index);依赖于该表的存储过程/函数将保留,但是变为invalid状态。
          3. 注意:drop、truncate不能删除有外键约束的表。
        3. 改: UPDATE 表名SET 修改的数据字段 = 值 WHERE 条件
        4. 查:
          1. 单表查询:公式是SELECT 字段 FROM 表名 WHERE 条件 GROUP BY(分组)HAVING ORDER BY
          2. 多表查询:自关联,左关联,右关联,子查询
      2. DCL 定义数据库权限
        1. 给用户授权
          1. GRANT 权限 TO 用户
          2. 收回权限REVOKE 权限 TO 
      3. DDL数据定义语言
        1. 创建表
        2. 修改表
        3. 删除表
    3. 常用函数
      1. DISTINCT()  去重函数
      2. SUM()求和 MAX()最大值 
      3. LOWER()变小写UPPER()变大写
      4. length长度、to_date转化日期、
      5. to_char转化字符、to_number转化数字
      6. Ltrim去左边空格、rtrim去右边空格、
      7. substr截取字符串、add_month增加或减掉月份
    4. 数据库性能优化相关
      1. 索引的意义
        1. 索引是满足某种特定查找算法的数据结构,而这些数据结构会以某种方式指向数据,从而实现高效查找数据。
        2. 具体来说 MySQL 中的索引,不同的数据引擎实现有所不同,但目前主流的数据库引擎的索引都是 B+ 树实现的,B+ 树的搜索效率,可以到达二分法的性能,找到数据区域之后就找到了完整的数据结构了,所有索引的性能也是更好的。
      2. 索引创建 create index 索引名 on 表名(列名)
        1. 主键,外键,有特殊意义适合当索引
        2. 较频繁作为查询条件的字段才去创建索引
        3. 首先应考虑在 where 及 order by 涉及的列上建立索引
        4. 定义有外键的数据列一定要建立索引
        5. 更新频繁字段不适合创建索引
        6. 若是不能有效区分数据的列不适合做索引列、
        7. 对于那些查询中很少涉及的列,重复值比较多的列不要建立索引
      3. SQL查询优化
        1. 对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引
        2. 减少交互次数
        3. 尽量避免在 where 子句中使用 != 或 <> 操作符以及is null、不用or 来连接条件、in和 not in 也要慎用
      4. 数据库优化
        1. 调整数据库结构的设计:需要考虑是否使用分区功能、是否建立索引等
        2. 调整数据库的SQL语句
        3. 调整服务器的内存分配
        4. 调整硬盘I/O
        5. 调整操作系统参数
    5. 数据库三范式是什么?
      1. 第一范式:每个列都不可以再拆分。
      2. 第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。
      3. 第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。
    6. 数据库事务四大特性ACID(数据库的事务管理)
      1. 事务的意义
        1. 事务可以将一系列的数据操作捆绑成一个整体进行统一的管理,如果某一事务执行成功,则该事务中进行的所有数据均会提交,成为数据库中的永久组成部分。如果事务执行时遇到错误,则就是必须取消或回滚。取消或回滚后,数据将全部恢复到操作前的状态,所以数据更改均被消除。
        2. Mysql 通过事务保证数据的一致性
      2. 四大特性
        1. 原子性:一个事务是一个不可分割的最小工作单元,其操作要么全部成功,要么全部失败
        2. 一致性:数据库总是从一个一致性状态转换为另一个一致性状态。所谓一致性状态,就是数据库的所有完整性约束(尤其注意用户定义约束)都被遵守,以银行转账为例,“转账操作必然导致一个账户减少金额,另一个账户增加金额,且这两个账户总金额之和不变”就是一个完整性约束。
        3. 持久性:一旦事务提交,则其所作的修改就会永久保存到数据库中。
        4. 隔离性:隔离性用于定义事务之间的相互隔离程度,存在四个隔离级别。
      3. 事务隔离
        1. 脏读: 表示一个事务能够读取另一个事务中还未提交的数据。比如,某个事务尝试插入记录 A,此时该事务还未提交,然后另一个事务尝试读取到了记录 A。
        2. 不可重复读: 是指在一个事务内,多次读同一数据。比如,事务A要读取数据两次,先读取了一次,然后事务B更改了此数据,当事务A再读取时与第一次读的不是同一个数据。
        3. 幻读: 指同一个事务内多次查询返回的结果集不一样。比如同一个事务 A 第一次查询时候有 n 条记录,但是第二次同等条件下查询却有 n+1 条记录,这就好像产生了幻觉。发生幻读的原因也是另外一个事务新增或者删除或者修改了第一个事务结果集里面的数据,同一个记录的数据内容被修改了,所有数据行的记录就变多或者变少了。
        4. READ-UNCOMMITTED:未提交读,最低隔离级别、事务未提交前,就可被其他事务读取(会出现幻读、脏读、不可重复读)。
        5. READ-COMMITTED:提交读,一个事务提交后才能被其他事务读取到(会造成幻读、不可重复读)。
        6. REPEATABLE-READ:可重复读,默认级别,保证多次读取同一个数据时,其值都和事务开始时候的内容是一致,禁止读取到别的事务未提交的数据(会造成幻读)。
        7. SERIALIZABLE:序列化,代价最高最可靠的隔离级别,该隔离级别能防止脏读、不可重复读、幻读。
      4. 索引注意的点
        1. MYSQL有索引的最左原则
      5. 存储过程和函数
      6. 数据库恢复和克隆

 

标签:面试题,精简版,数据库,事务,查询,索引,12.12,Oracle,数据
来源: https://www.cnblogs.com/Smileing/p/13624688.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有