Oracle数据库相关经典面试题

Oracle数据库相关经典面试题_第1张图片

金九银十的面试季节,最近我会多发一些面试题相关的文章,因为墨白也要开始找工作了大家一起加油哈 ! ! !

  • oracle下有自动增长类型的字段吗?若无,如何实现自增长的功能 ?

答∶ 没有,实现自增长需要序列与DML触发器的配合。 

  • 有哪几种事务隔离级别,他们都什么区别?   

答∶ ORACLE中有两种事务 只读事务与读写事务。隔离级别 未提交读,提交读,可重复读,串行读,ORACLE支持提交读与串行读,默认隔离级别为提交读。 

  • 实例与数据库的关系 ?

答∶ 实例管理一个数据库的内存空间与一组进程,一个实例必须对应一个数据库,一个数据库起码包含一个实例。 

  • 事务的理解,如事务的特点,oracle中何时开始,何时结束?

答∶ ORACLE事务在执行第一条可执行的SQL语句时开始,到一条COMMIT、ROLLBACK语句或退出数据库时事务结束。

利用ROLLBACK语句可以在COMMIT命令前随时撤消或回退一个事务。可以回退整个事务,也可以会退部分事务,但是不能回退一个已经被提交的事务。

回退部分事务的ROLLBACK命令为:ROLLBACK to savepoint 

存储点名存储点是用户放入事务中的标记,用来表示一个可被回退的位置。存储点通过在事务中放入一个SAVEPOINT命令而被插入。

该命令的语法是:SAVEPOINT 存储点名如果在ROLLBACK语句中没有给出存储点名,则整个事务被回。 

  • 实例的理解,与数据库的对应关系

答∶ Oracle是用实例来进行数据库管理的,实例在用户和orale数据库之间充当中间层的角色。每当在服务器上启动数据库时,就在内存中创建一个Oracle实例,即Oracle为数据库分配内存和创建并启动一个或多个Oracle进程,然后由实例加载并打开数据库,最后由这个实例来访问和控制硬盘中的数据文件。

  • 触发器中能用COMMIT,为什么?

答∶ 在触发器中不能使用COMMIT;等事务控制语句。因为触发器是事务触发的如果有事务控制语句就会影响到触发它的事务。即连带触发它的语句之前的已经完成的没有提交的语句都要受到影响。这是会影响到数据的一致性的

  • 解释函数,存储过程,包

答∶ 都是命名块,函数与过程是pl/sql代码的集合,通常是为了完成一个业务,过程可以不返回任何值,但函数必须有返回值。包是为了完成某个完整功能的一组函数与过程的集合。 

  • 比较truncate和delete命令?

答∶ 两者都可以用来删除表中所有的记录。区别在于:truncate是DDL(data defining language数据定义语言),不需要rollback segment(处理事务回滚操作)   而Delete是DML(data manufacturing language数据操作语言)操作,需要rollback segment(处理事务回滚操作)且花费较长时间。 

  • Oracle 悲观锁和乐观锁

答∶ 悲观锁是对数据的冲突采取一种悲观的态度,假设数据肯定会冲突,在数据开始读取的时候就把数据锁定住。乐观锁就是认为数据一般情况下不会造成冲突,只有在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让用户返回错误的信息,让用户决定如何去做。悲观锁是通过在sql语句上加入 for update乐观锁可以通过增加一列version或者timestamp在应用程序中实现,Hibernate采用乐观锁的版本戳。 

  • 索引的作用?和它的优点缺点是什么?

答∶ 索引就一种特殊的查询表数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中书的目录不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度同时也增加了数据库的尺寸大小。 

  • 触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和行级触发有何区别?

答∶ 事前触发器运行于触发事件发生之前,而事后触发器运行于触发事件发生之后。通常事前触发器可以获取事件之前和新的字段值。语句级触发器可以在语句执行前或后执行,而行级触发在触发器所影响的每一行触发一次。

通过索引查询数据比全表扫描要快.但是我们也必须注意到它的代价索引需要空间来存储,也需要定期维护, 每当有记录在表中增减或索引列被修改时,索引本身也会被修改. 这意味着每条记录的INSERT,DELETE,UPDATE将为此多付出4,5 次的磁盘I/O. 因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢.使用索引查询不一定能提高查询性能。 

  • PL/SQL语句块包含哪些部分?

答∶  Pl/sql 的块结构包括:定义部分,执行部分,异常处理部分。 

  • Oracle中字符串用什么符号链接?

答∶ Oracle中使用 || 这个符号连接字符串 如 ‘abc’ || ‘d’

  • Oracle是怎样分页的?

答∶ Oracle中使用rownum来进行分页, 这个是效率最好的分页方法,hibernate也是使用rownum来进行oralce分页的。 

SELECT

FROM

( SELECT rownum r, a FROM tabName WHERE rownum <= 20 ) 

WHERE

r > 10

  • 数据库事务的特性?

答∶ 原子性、一致性、隔离性、持久性。 

  • 数据库优化?

答∶ 建索引、使用游标、批处理、使用分页、使用存储过程、设置缓存尽可能设大一点。 

  • sql语句执行顺序?

答∶ FROM:对FROM子句中的前两个表执行笛卡尔积(Cartesian product)(交叉联接),生成虚拟表VT1

ON:对VT1应用ON筛选器。只有那些使为真的行才被插入VT2。

OUTER(JOIN):如 果指定了OUTER JOIN(相对于CROSS JOIN 或(INNER JOIN),保留表(preserved table:左外部联接把左表标记为保留表,右外部联接把右表标记为保留表,完全外部联接把两个表都标记为保留表)中未找到匹配的行将作为外部行添加到 VT2,生成VT3.如果FROM子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤1到步骤3,直到处理完所有的表为止。

WHERE:对VT3应用WHERE筛选器。只有使为true的行才被插入VT4.

GROUP BY:按GROUP BY子句中的列列表对VT4中的行分组,生成VT5.

CUBE|ROLLUP:把超组(Suppergroups)插入VT5,生成VT6.

HAVING:对VT6应用HAVING筛选器。只有使为true的组才会被插入VT7.

SELECT:处理SELECT列表,产生VT8.

DISTINCT:将重复的行从VT8中移除,产生VT9.

ORDER BY:将VT9中的行按ORDER BY 子句中的列列表排序,生成游标(VC10).

TOP:从VC10的开始处选择指定数量或比例的行,生成表VT11,并返回调用者。

你可能感兴趣的:(Oracle数据库相关经典面试题)