没有合适的资源?快使用搜索试试~ 我知道了~
数据库mysql+oracle面试题
需积分: 50 31 下载量 48 浏览量
2017-11-08
20:59:58
上传
评论 2
收藏 133KB DOCX 举报
温馨提示
试读
30页
通过面试积累 。 。
资源推荐
资源详情
资源评论
1.范式的理解:
第一范式:确保每列的原子性.
如果每列(或者每个属性)都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一
范式.
例如:顾客表(姓名、编号、地址、……)其中"地址"列还可以细分为国家、省、市、区等。
第二范式:在第一范式的基础上更进一层,目标是确保表中的每列都和主键相关.
如果一个关系满足第一范式,并且除了主键以外的其它列,都依赖于该主键,则满足第二范式.
例如:订单表(订单编号、产品编号、定购日期、价格、……),"订单编号"为主键,"产品编
号"和主键列没有直接的关系,即"产品编号"列不依赖于主键列,应删除该列。
第三范式:在第二范式的基础上更进一层,目标是确保每列都和主键列直接相关,而不是间接相关.
如果一个关系满足第二范式,并且除了主键以外的其它列都不依赖于主键列,则满足第三范式.
为了理解第三范式,需要根据 Armstrong 公里之一定义传递依赖。假设 A、B 和 C 是关系
R 的三个属性,如果 A-〉B 且 B-〉C,则从这些函数依赖中,可以得出 A-〉C,如上所述,依
赖 A-〉C 是传递依赖。
例如:订单表(订单编号,定购日期,顾客编号,顾客姓名,……),初看该表没有问题,满足
第二范式,每列都和主键列"订单编号"相关,再细看你会发现"顾客姓名"和"顾客编号"相
关,"顾客编号"和"订单编号"又相关,最后经过传递依赖,"顾客姓名"也和"订单编号"相关。
为了满足第三范式,应去掉"顾客姓名"列,放入客户表中。
2 数据库优化
语句优化
常见的简化规则如下:
)不要有超过 个以上的表连接()
)考虑使用临时表或表变量存放中间结果。
)少用子查询
)视图嵌套不要过深一般视图嵌套不要超过 个为宜。
优化建议:
)使用临时表存放 表的结果能大大减少 (或返回行数)的操作要优先执行。
仔细分析语句,你会发现 中的条件全是针对表 的,所以直接使用上面的 子
句查询表 ,然后把结果存放再临时表# 中:
!"和上面的 一样#
)再把# 和其他表进行连接$
%&'(
%&'(
)修改 )程序,去掉前置百分号。) 语句却因为前置百分号而无法使用索引
)从系统设计的角度修改语句,去掉 '(。
)考虑组合索引或覆盖索引消除 '*。
上面 和 点建议立即消除了 )+,性能提高了几倍以上,效果非常明显。
)使用存储过程
可以考虑使用存储过程封装那些复杂的 ,% 语句或商业逻辑,这样做有几个好处。
一是存储过程的执行计划可以被缓存在内存中较长时间,减少了重新编译的时间。
二是存储过程减少了客户端和服务器的繁复交互。
三是如果程序发布后需要做某些改变你可以直接修改存储过程而不用修改程序,避免需要
重新安装部署程序。
《 数据库技术内幕 》
处理百万级以上的数据提高查询速度的方法:
应尽量避免在 子句中使用-.或/0操作符,否则将引擎放弃使用索引而进行全表扫
描。
对查询进行优化,应尽量避免全表扫描,首先应考虑在 及 +1涉及的列上建
立索引。
应尽量避免在 子句中对字段进行 '值判断,否则将导致引擎放弃使用索引而进
行全表扫描,如:
!'!'
可以在 '! 上设置默认值 2,确保表中 '! 列没有 ' 值,然后这样查询:
!'!.2
应尽量避免在 子句中使用 来连接条件,否则将导致引擎放弃使用索引而进行全
表扫描,如:
!'!.2'!.2
可以这样查询:
!'!.2
'
!'!.2
下面的查询也将导致全表扫描:"不能前置百分号#
!!)34+45
若要提高效率,可以考虑全文检索。
6和 也要慎用,否则会导致全表扫描,如:
!'!"#
对于连续的数值,能用 +就不要用 了:
!'!+
3 数据库事务的四大特性以及事务的隔离级别
⑴ 原子性(7!1)
原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博
客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,
如果操作失败则不能对数据库有任何影响。
⑵ 一致性(81)
一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说
一个事务执行之前和执行之后都必须处于一致性状态。
拿转账来说,假设用户 7 和用户 9 两者的钱加起来一共是 222,那么不管 7 和 9 之间
如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是 222,这就是事务的
一致性。
⑶ 隔离性(:)
隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户
开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
即要达到这么一种效果:对于任意两个并发的事务 ; 和 ;,在事务 ; 看来,; 要么
在 ; 开始之前就已经结束,要么在 ; 结束之后才开始,这样每个事务都感觉不到有其他
事务在并发地执行。
关于事务的隔离性数据库提供了多种隔离级别,稍后会介绍到。
⑷ 持久性(<'+1)
持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即
便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
现在来看看 MySQL 数据库为我们提供的四种隔离级别:
= >+"串行化#:可避免脏读、不可重复读、幻读的发生。
② ?@+"可重复读#:可避免脏读、不可重复读的发生。
③ ?!!"读已提交#:可避免脏读的发生。
④ ?'!!"读未提交#:最低级别,任何情况都无法保证。
4. SQL Select 语句完整的执行顺序:
from 子句组装来自不同数据源的数据;
where 子句基于指定的条件对记录行进行筛选;
group by 子句将数据划分为多个分组;、使用聚集函数进行计算;
使用 having 子句筛选分组;计算所有的表达式;
使用 order by
对结果集进行排序。
select 集合输出。
4Oracle 的 EMP 表,查询每个部门工资前三名的员工信息,
1. selectdeptno,ename,sal
2. fromempe1
3. where
4. (
5. selectcount(1)
6. fromempe2
7. wheree2.deptno=e1.deptnoande2.sal>=e1.sal
8. )<=3/*这里的数值表示你想取前几名*/
9. orderbydeptno,saldesc;
5.oracle 分页查询
!@! !
"A'! !!@@.2'!/#
0
6mysql 分页查询
查询第 10 条到第 20 条的数据的 sql 是:select * from table limit 10,20;!
7 左外连接
SELECT*
FROMTESTA
LEFTOUTERJOINTESTB
ONTESTA.A=TESTB.A
//(代表 testA 若有一些值搭配不上,则代表设置为空)
8jdbc 连接 mysql 数据库
public static void main(String[] args) throws Exception {
Connection conn = null;
String sql;
String url = "jdbc:mysql://localhost:3306/sdesm?"
剩余29页未读,继续阅读
资源评论
logytar
- 粉丝: 17
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功