转自于:https://zhuanlan.zhihu.com/p/39804394
1、MySQL的delete与truncate区别?
回答:delete语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行回滚操作,不清空AUTO_INCREMENT记录数;
2、MySQL的存储过程是什么?
回答:存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它;
创建存储过程:”pr_add”是个简单的MySQL存储过程,这个MySQL存储过程有两个int类型的输入参数”a”,”b”,返回这两个参数的和。
1)drop procedure if exists pr_add;
2)计算两个数之和
create procedure pr_add( a int , b int )begin declare c int;
if a is null then set a = 0;
end if;
if a is null then set b = 0;
end if;
set c = a+b;
select c as sum ;
3、谈谈你对索引的理解?
回答:索引是对数据库中一对多个列值的排序,帮助数据库高效获取数据的数据结构。假如我们用类比的方法,数据库中的索引就相当于书籍中的目录一样,当我们想找到书中的某个知识点,我们可以直接去目录中找而不是在书中每页的找,但是这也抛出了索引的一个缺点,在对数据库修改的时候要修改索引,导致时间变多。
索引分为:普通索引,唯一索引,主键索引,全文索引
优点:加快检索速度;唯一索引确保每行数据的唯一性;在使用索引的过程可以优化隐藏器,提高系统性能
缺点:插入删除,修改,维护速度下降;占用物理和数据空间;
4、简单描述一下数据库的事务?
回答:应用的场景:存在并发数据访问时才需要事务
ACID四大特性:a)原子性:整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间的某个环节。任何一项操作的失败都会导致整个事务的失败;
b)一致性:在事务开始之前和事务结束之后,数据库的完整性约束没有被破坏;
c)隔离性:并发执行的事务彼此无法看到对方的中间状态;
d)持久性:在事务完成以后,该事务所对数据库所操作的更改便持久的保存在数据库之中,并不会被回滚。
问题:a)脏读:一个事务读取到另一个事务未提交的数据
b)不可重复读:一个事务中两次查询的数据不一致 –>一个事务读到了另一个事务,已经提交数据(update 操作)
c)虚读(幻读):一个事务中两次查询的数据不一致 –>一个事务读到了另一个事务,已经提交数据(insert 操作)
隔离级别:安全从低到高,性能从高到低;
a)读未提交:也叫脏读,是事务可以读取其他事务未提交的数据。—>未解决任何问题
b)读已提交:在事务未提交之前所做的修改其它事务是不可见的。—>解决脏读问题
c)可重复读:保证同一个事务中的多次相同的查询的结果是一致的。—>解决脏读,不可重复读的问题
d)可串行化:保证读取的范围内没有新的数据插入,比如事务第一次查询得到某个范围的数据,第二次查询也同样得到了相同范围的数据,中间没有新的数据插入到该范围中。—>解决脏读,不可重复读,虚读(幻读)问题。
常用数据库默认隔离级别:
MySQL:可重复读;Oracle:读已提交;SQLServe:读已提交。r
5、Oracle是怎么样分页的?
回答:Oracle中使用rownum来进行分页,这个是效率最好的分页方法,hibernate也是使用rownum来进行Oracle分页的;
select * from
(select round r,a from tabName where round
回答:1、对查询进行优化,应尽量避免全表扫描,首先应考虑在where 及 order by 涉及的列上建立索引。
2、应尽量避免在where 字句中对字段进行null 值判断,否则将导致引擎放弃使用索引二进行全表扫描。
3、应尽量避免在where 字句中使用or 来连接条件,否则将导致引擎放弃使用索引二进行全表扫描。
4、应尽量避免在where字句中使用!=或<>操作符,否则引擎将放弃使用索引二进行全表扫描。
5、in 和 not in 也要慎用,否则会导致全表扫描。
6、索引并不是越多越好,索引固然可以提高相应的select 的效率,但同时也降低了 insert 及 update 的效率,因为insert 或update时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常用到的列上建的索引是否有必要。
7、查询结果不要用 * 来查询所有字段,要明确指明结果字段。
8、根据查询条件,简历索引,如果查询条件不止一个时,使用组合索引。
9、在查询条件表达式的左侧尽量不要使用函数,否则索引失效。
10、如果有like话,尽量避免%xxx%两侧都有%的条件,单侧%可以使用索引,多侧不可以。
11、建立索引时字段不能有null值
10、MySQL数据库优化有哪些?
回答:1. EXPLAIN 你的 SELECT 查询;2. 当只要一行数据时使用 LIMIT 1;3. 使用 ENUM 而不是 VARCHAR;4. 固定长度的表会更快;5. 分库分表
11、Oracle数据库优化有哪些?
回答:1、调整数据结构的设计。2、调整操作系统参数。3、调整应用程序结构设计。4、调整数据库SQL语句。5、调整服务器内存分配。6、调整硬盘I/O。
Original: https://www.cnblogs.com/incognitor/p/9907636.html
Author: 無名之徒
Title: 2018年最新JAVA面试题总结之数据库(3)
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/619819/
转载文章受原作者版权保护。转载请注明原作者出处!