Oracle汇总
1.数据库事务并发会产生那些问题?有哪些隔离级别,分别能够避免什么错误,而无法避免什么错误?
a.事务并发会导致三种问题:脏读、不可重复读、幻象读
脏读:读取了未提交的数据
不可重复读:前后读取同一行数据不一致(两次读取中间有其他事物修改了(update)该行数据的内容)
幻象读:前后读取的数据行数不一致(两次读取中间有其他事物增加(insert)或删除(delete)了该表的记录)
b.隔离级别一般分为四种,由低到高分别为:未提交读、提交读、可重复读、可串行读
未提交读:相当于没有锁的状态(会导致脏读、不可重复读、幻象读)
提交读:数据必须在事务提交后读取(可避免脏读;会导致不可重复读、幻象读)
可重复读:允许添加但不允许更新(可避免脏读、不可重复读;会导致幻象读)
可串行读:隔离级别最高,必要时才会采用(三种错误均可避免)
2.简述索引的作用,并示例创建索引的语法
a.索引是为了提高数据检索性能而建立的,利用索引可以快速的确定所要检索信息所在记录的物理存储地址,因此,使用索引可以提高表的访问速度;
b.索引独立于基表存在,在对基表进行插入,更新,删除时,Oracle会自动更新索引,因此索引提高了查询速度,但一定程度影响了了增删改速度;
c.索引中字段(有序性):用户经常查询的表字段(建立索引时Oracle会自动根据该字段进行排序),该字段所在记录的物理地址
d.索引信息的碎片化(使用一段时间,由于不定期的增删会导致索引碎片化)会导致读写性能的降低,因此可以定期对索引进行重建
e.索引分类:标准索引、唯一索引、组合索引、反向索引、位图索引
索引的创建:create index 索引名 on 表名(字段名)
查看索引:select * from USER_INDEXES
删除索引:drop index 索引名
3.范式
第一范式就是无重复的列或列不可分割(不能将所有信息放在一列显示,也不能两列或多列合并显示,并且一条记录只出现一次)
例如:员工信息表,不能将员工信息都放在一列中显示,也不能将其中的两列或多列在一列中显示;
员工信息表的每一行只表示一个员工的信息,一个员工的信息在表中只出现一次。
第二范式就是非主属性非部分依赖于主关键字(即一个主键决定了一条记录的唯一性,非主键属性完全依赖主键)
1.第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。
2.第二范式(2NF)要求实体的属性完全依赖于主关键字
第三范式就是属性不依赖于其它非主属性(外键关联表id,仅通过id确认联系,实体之间相关联必须关联主关键字,而不能关联非主属性)
例如:存在一个部门信息表,其中每个部门有部门编号(dep_id)、部门名称、部门简介等信息。
那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。
如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。