数据库面试必备

1、 ORACLE和MySQL的区别

oracle是大型数据库,Mysql是中小型数据库,mysql是开源的,Oracle支持大并发,大访问量

MYSQL的主键一般使用自动增长,oracle主键自增长需要使用序列

MYSQL的单引号双引号都表示字符串

ORACLE的单引号表示字符串,双引号是区分大小写的字符串

MYSQL用LIMIT分页orcale用rownum分页

空字符串的处理使用is null  is not null

长字符串处理mysql是varchar,orcale的长字符串是 varchar2,varchar2的长度是4000

 

2、存储过程和函数的区别【重点】

函数是一个特殊的存储过程,都是预编译的(一次编译多次执行)

不同点

   一、标识符不同,函数的标识符为function,过程的标识符为:procedure

   二、函数中有返回值,且必须返回,而过程没有返回值,但是可以通过out返回

   三、函数可以在任何地方调用,存储过程只能在plsql中使用。

相同点

   两者都可以有一个参数或多个参数

 

3、Oracle导入和导出方式

使用oracle工具 exp/imp导入/导出,导入/导出的是二进制的数据,可以防止乱码

 

4、Oracle中有哪几种文件?

数据文件(一般后缀为.dbf或者.ora)存储表数据

日志文件(后缀名.log) 保证事务的原子性,

控制文件(后缀名为.ctl)

一般在安装目录下的\oradata\orcl

 

5、优化Oracle数据库,有几种方式(重点)

优化数据库在于IO读写磁盘速度慢,尽量降低IO操作次数,把数据放入内存中。

可分为物理优化和逻辑优化

物理优化:

优化oracle的运行环境, 优化网络带宽,优化硬件(更换更高级的硬盘)。

修改oracle的最大连接数、禁止回收站的功能,建立合适的索引。

将索引数据和表数据分开在不同的表空间上,降低IO冲突。

建立表分区,将数据分别存储在不同的分区上,以空间换取时间,降低IO。

逻辑优化:

按照规定编写sql语句,sql语句要使用占位符语句,效率高。

在使用select子句查询时避免使用*号。

一些耗时的操作可以在用户较少的情况下操作,避开系统使用的高峰期,提高数据库性能。

使用Exits (艾克塞死)代替In 、 Not Exits 替代Not In

使用缓存

6、Oracle是怎样分页的?

Oracle中使用rownum来进行分页, 这个是效率最好的分页方法

 

7、Oralce怎样存储文件,能够存储哪些文件?

Oracle 能存储 clob、nclob、 blob、 bfile

Clob  可变长度的字符型数据,也就是其他数据库中提到的文本型数据类型

Nclob 可变字符类型的数据,不过其存储的是Unicode字符集的字符数据

Blob 可变长度的二进制数据

Bfile 数据库外面存储的可变二进制数据

 

8、Oralce解释冷备份和热备份的不同点以及各自的优点?

冷备份发生在数据库已经正常关闭的情况下,将文件拷贝到另外位置

热备份是在数据库运行的情况下,使用oracle工具 exp/imp导入/导出的方式备份

冷备的优缺点: 
1).是非常快速的备份方法(只需拷贝文件)  
2).容易归档(简单拷贝即可)  
3).容易恢复到某个时间点上(只需将文件再拷贝回去)   
冷备份不足:  
1).单独使用时,只能提供到“某一时间点上”的恢复。  
2).在冷备份过程中,数据库必须是关闭状态。  
3).若磁盘空间有限,只能拷贝到磁带等其它外部存储设备上,速度会很慢。  
4).不能按表或按用户恢复。  

备份方式:(备份所有的数据文件 控制文件 重做日期文件和密码文件 )

 

热备的优缺点 
1).可在表空间或数据文件备份,备份时间短。  
2).备份时数据库仍可使用。  
3).可达到秒级恢复(恢复到某一时间点上)。  
4).可对几乎所有数据库实体作恢复。  
5).恢复是快速的,在大多数情况下在数据库仍工作时恢复。  
热备份的不足是:  
  1).不能出错,否则后果严重。  
  2).若热备份不成功,所得结果不可用于时间点的恢复。  
  3).因难于维护,所以要特别仔细小心,不允许“以失败而告终”。 

备份的方式:  exp imp  expdp  impdp

 

9、比较truncate和delete命令

Truncate 和delete都可以将数据实体删掉,truncate 的操作并不记录到日志,所以操作速度较快,但同时这个数据不能恢复 
Delete操作不腾出表空间的空间 
Truncate 不能对视图等进行删除 
Truncate是数据定义语言(DDL),而delete是数据操纵语言(DML) 

 

10、解释什么是死锁,如何解决Oracle中的死锁?


加了锁而没有解锁,可能是使用锁没有提交或回滚事务,如果是表级锁则不能操作表,客户端处于等待状态,如果是行级锁则不能操作锁定行。

解决:

一、 查找出被锁的表 

select b.owner,b.object_name,a.session_id,a.locked_mode 

from v$locked_object a,dba_objects b 

where b.object_id = a.object_id; 

     

select b.username,b.sid,b.serial#,logon_time 

from v$locked_object a,v$session b 

where a.session_id = b.sid order by b.logon_time; 

二、 杀进程中的会话 

alter system kill session "sid,serial#"; 

 

强制杀进程:

SQL语句执行很慢的情况,强制关闭(v$sql+v$session=sid,serial#);

出现死锁(v$clocked_object+v$session=sid,serial#);

重新启动数据库。

 

11、简述oracle中 dml、ddl、dcl的使用 

Dml 数据操纵语言,如select、update、delete,insert 
Ddl 数据定义语言,如createtable 、drop table 等等 
Dcl 数据控制语言, 如 commit、 rollback、

TCL 事物控制语言,grant、 invoke等 

 

12、说说oracle中的经常使用到得函数 


Length: 长度、

lower: 小写、

upper: 大写,

to_date: 转化日期,

to_char: 转化字符 
Ltrim: 去左边空格、

rtrim:去右边空格,

substr:取字串,

add_month:  增加或者减掉月份、

to_number: 转变为数字 
1.单行函数:

     a) 字符串:lower(char),upper(char),length(char),initcap(x)

     b) 数字:round(number,n)

     c) 日期时间:sysdate 返回数据库所在操作系统的当前日期时间。

                          systimestamp 返回数据库所在操作系统的当前时间戳。

        last_day(d) 返回指定日期当月的最后一天的日期时间

        trunc(d[,unit]) 截断日期时间,unit: 'year', 'month', 'day'

     d) dual表是Oracle提供给任何用户的一个表,常用在没有目标表的SELECT语句中。

     e) 转换函数:

        to_char(datatime[,format]), format: yyyy,mm,dd,hh24,mi,ss

        to_char(number[,format]), format: l, 9, ','

        to_char(char[,format])

        to_date(char[,format]), 字符串-->日期时间

        to_timestamp(char[,format]), 字符串-->日期时间戳

        to_number(expr[,format])

     f)其它函数:

        nvl(expr1,expr2)  如果expr1为空,返回expr2的值,否则返回expr1。

        nvl2(expr1,expr2, expr3)  如果expr1不为空,返回expr2,否则返回expr3。

        decode(expr, search1,result1,search2,result2,...)

        case expr when search1 then result1

                  when search2 then result2

                  ...

                  else resultn

        end

2.  聚合函数:聚合函数同时可以对多行数据进行操作,并返回一个结果。比如 SUM(x)返回结果集中 x 列的总合。


13、rowid, rownum的定义


rowid和rownum都是虚列 
rowid是物理地址,用于定位oracle中具体数据的物理存储位置 
rownum则是sql的输出结果排序

 

14、 使用oracle 伪列删除表中重复记录: 

Delete  table t  where t.rowid!=(select  max(t1.rowid)  from  table1 t1 where  t1.name=t.name)


15.、如何设计数据库

使用POWERDISINE工具的使用,一般满足第三范式就可以了

 1  列是不可再分

 2  一张表只能做一件事情

 3  列不允许间接依赖

 

 

16、 数据的隔离级别是什么分别解决什么问题

数据库事务的隔离级别有4个,

由低到高依次为Read uncommitted、读未提交

Read committed、读已提交

Repeatable read、可重复读

Serializable, 串行化

这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。

 

17、什么是ER图 画个例子描述ER

就是表与表之间的概念模型图,是用来体现实体与实体关系的图。一般有三种关系: 多对一,一对多,一对一。 讲解使用powerdesigner设计概念模型图

 

18、 什么是视图 普通视图和物化视图的区别

视图:是虚表,是数据库中查询的SQL语句,内容由查询定义。

物化视图:是包括一个查询结果的数据库对象,它是远程数据的的本地副本。

物化视图是自动刷新或者手动刷新的,视图不用刷新

物化视图也可以直接update,但是不影响基表,对视图的更新反映到基表上

物化视图主要用于远程数据访问,物化视图中的数据需要占用磁盘空间,视图中不保存 数据

Oracle数据库存在(对象权限,角色权限,系统权限)

 

19、索引的优缺点

优点:快速查询

缺点:数据量大 需要加大索引的维护量

 

20、 说一下 什么是笛卡尔积,内连接,左外连接,右外连接,全连接 并且举例

  笛卡尔积:简单的说就是两个集合相乘的结果。这里用于多表查询中。

  内连接:inner join,将满足条件的数据保留。

  左外连接:left join,右外连接:right join,都是以主表为主,能关联的显示,不能关联的也会保留主表数据。

 

21、 描述你写过最大的存储过程

这个不怎么写,存储过程的执行会占用数据库的计算能力,数据库压力很大,虽然存储过程是预编译的,执行速度比一般sql执行速度更快 ,但是不同数据库之间迁移的话很麻烦,需要大量的修改,代码量大,维护起来比较难,所以都不太适应去使用。

posted @ 2020-11-18 21:37  紫陌红尘拂面来  阅读(143)  评论(0编辑  收藏  举报