二、面试准备-数据库知识

1、Oracle中truncate和delete命令区别

执行速度truncate>delete。

delete语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作做为事务记录在日志中以便进行回滚操作。

truncate则是一次性的从表中删除所有的数据页并不把单独的删除操作记录记入日志保存。删除行是不能恢复的。

truncate是一个DDL(数据库定义语言)语言,执行完后会被隐式提交,不能对truncate使用rollback命令。

delete是一个DML(数据库操作语言)语言,执行完后能使用rollback命令恢复数据。

truncate不能触发任何delete触发器。

2、Oracle中char和varchar2数据类型区别

char的长度是固定的,而varchar2的长度是可以变化的。

比如,存储字符串"abc",对于char(20),表示存储的字符将占20个字节(包括17个空字符),在数据库中它是以空格占位的,而同样的varchar2(20)则只占用3个字节的长度,20只是最大值,当存储的字符小于20时,按实际长度存储。

标准的varchar类型可以存储空字符串。
Oracle的varchar2类型将在数据库中varchar列可以存储空字符串的特性改为存储null值。

varchar2比char节省空间、char的效率比varchar2高。 数据库设计上的“以空间换效率”。

3、主键和索引的区别

创建表时,不能在同一个字段上建立两个索引(主键默认建立唯一索引),可以在需要经常查询的字段字段上建立索引。比如已经是主键的字段不能再建立索引。

主键:该字段没有重复值,且不允许为空。
唯一索引:该字段没有重复值,但允许空值。

一个表只允许有一个主键,但可以创建多个唯一索引(unique index)。
可以为一张表的多个字段建立唯一索引。

函数索引:

如果在我们的查询条件使用了函数,那么索引就不可用了。
例如:select * from product where nvl(price,0.0)>1000.0;
这里,nvl(price,0.0)使用了函数,索引不能利用price字段上做的索引了。
可以用建立函数索引的方式,来解决这个问题。create index 索引名 on product(nvl(price,0.0));

创建索引:create unique index 索引名 on 表名(字段1,字段2);

删除索引:drop index 索引名;

唯一索引能极大的提高查询速度,而且还有唯一约束的作用。
一般索引,只能提高30%左右的速度。
经常插入,修改,应在查询允许的情况下,尽量减少索引,因为添加索引,插入,修改等操作,需要更多的时间。
a.主键一定是唯一索引,唯一索引并不一定就是主键。
b.一个表中可以有多个唯一索引,但只能有一个主键。
c.主键列不允许空值,唯一索引列允许空值。
d.索引可以提高查询速度。

主键和索引都是主键,不过主键是逻辑建,索引是物理键,也就是说主键不实际存在,而索引实际存在在数据库中。

4、存储过程与函数的区别

存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。

一个存储过程可以由SQL语句和一些特殊的控制结构组成。当希望在不同的应用平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。

存储过程的优点:
a.存储过程可以用流程控制语言编写,可以完成复杂的判断和运算,有很强的灵活性。
b.存储过程被创建后,可以在程序中被多次调用。
c.存储过程是预编译的,能够提高执行速度。

区别:

存储过程一般作为一个独立的部分执行,而函数可以作为SQL语句的一个部分来使用。
返回多个参数值使用存储过程,只有一个返回值可以使用函数。

猜你喜欢

转载自www.cnblogs.com/xiaolangzhong/p/10056474.html