2018年最新JAVA面试题总结之数据库(3)

转自于: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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • java 论坛模块设计方案

    权限管理:点开二级菜单进入三级菜单显示 角色(基础权限)和按钮权限 角色(基础权限): 分角色组和角色,独立分配菜单权限和增删改查权限。(一个用户可以多个角色) 按钮权限: 给角色…

    数据库 2023年6月6日
    081
  • Handler_read_*的总结

    在分析一个SQL的性能好坏时,除了执行计划,另外一个常看的指标是”Handler_read_*”相关变量。 Handler_read_key Handler…

    数据库 2023年6月11日
    084
  • MySQL实战45讲 12

    12 | 为什么我的MySQL会”抖”一下? 一条 SQL 语句,正常执行的时候特别快,但是 有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很难复现…

    数据库 2023年5月24日
    079
  • bat 脚本启用及禁用网卡

    启用网卡 需要以管理员身份运行bat脚本 netsh interface set interface "Npcap Loopback Adapter" enab…

    数据库 2023年6月9日
    0124
  • Postman安装及汉化

    1. 安装postman 各位根据各自需要可以参考下表自行下载,把链接内的”版本号”替换为指定的版本号 操作系统 下载链接 Windows64位 Windo…

    数据库 2023年6月14日
    096
  • 关于VUE中的mapState和mapActions的使用

    最近在开发一套系统,前端使用VUE开发,由于本人是后端开发,前端也会一点,但是VUE接触不多,在VUE项目开发遇到的一些坑记录一下,不是专业前端写好的不好,大家不要唝。。。 在VU…

    数据库 2023年6月9日
    083
  • [转]failed to recv data in handshakeReceive2Callback

    一直用的好好地Shadowsocks今天突然发现打不开网页了,看了下日志发现被”failed to recv data in handshakeReceive2Call…

    数据库 2023年6月14日
    082
  • 1001-MySQL学习-第一节自习课

    MySQL学习(第一节自习课) 一. 软件下载、安装 下载地址:https://dev.mysql.com/downloads/installer/ 位置:mysql->in…

    数据库 2023年5月24日
    098
  • 贪心算法原理及其应用

    概述 贪心算法应该算是那种”只闻其声不见其人”的算法,我们可能在好多地方都会听到贪心算法这一概念,并且它的算法思想也比较简单就是说算法只保证局部最优,进而达…

    数据库 2023年6月11日
    0145
  • 第五届蓝帽杯-溯源取证wp

    直接使用vmdk文件创建虚拟机,结果弹出提示 点击全部允许之后,进不去系统,到达了initramfs页面 由于提供的vmdk文件只有1G大小,将其转回raw文件,发现有10个G的大…

    数据库 2023年6月11日
    0110
  • Oracle扩展表空间

    Oracle扩展表空间 前言: Oracle表空间扩展最大为32G,目前我还未找到可以打破限制的办法。 一、查看表空间信息和使用情况 查看表空间的名字及文件所在位置 — &amp…

    数据库 2023年6月16日
    0102
  • python 里 certifi 库的作用

    安装了certifi之后,和requests库一样也有一个cacert.pem,可以用编辑器打开cacert.pem,里面包含了很多可信任知名公司的证书/公钥库的路径,我这里是py…

    数据库 2023年6月9日
    097
  • 栈和队列数据结构

    栈和队列都是常用的数据结构。栈的应用非常的广泛,其原理也是非常经典的。 一、栈 ①栈(stack)又名堆栈,他是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这…

    数据库 2023年6月11日
    0120
  • 处理mysql主从不同步问题

    问题描述:发现主库操作数据从库没有变动问题,可能原因是从库重启导致的无法同步问题。 排查思路: 1、查看主从复制状态 发现从库的IO 和SQL 进程都是no(正常状态应该是yes)…

    数据库 2023年5月24日
    079
  • [spring]spring静态代理和aop

    10.代理模式 代理模式的分类: 静态代理 动态代理 关系分析 抽象角色:一般会使用接口或者抽象类 真实角色:被代理的角色 代理角色:代理真实的角色,做一些附属的操作 客户:访问代…

    数据库 2023年6月16日
    091
  • Mysql的知识梳理

    数据准备: –建表 create table customer_jia(CID int(4), Cname varchar(20), Csex varchar(2), …

    数据库 2023年5月24日
    0114
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球