java|2020Java初级面试题一数据库

前言

  • 少年易老学难成,一寸光阴不可轻。未觉池塘春草梦,阶前梧叶已秋声 。—朱熹《劝学诗》
  • 勤奋才是改变你命运的唯一捷径。
  • 整理不易,各位看官点赞再看更舒适,养成好习惯(●′?`●)
1.1 简单说一说drop、delete与truncate的区别 【java|2020Java初级面试题一数据库】drop 用于删除结构:数据库、表
delete 删除数据,可以回滚
truncate 删除结构重建构建,不可以回滚
基于mysql
delete不重置自动增长列的计数值
truncate重置自动增长列的计数值
1.2 什么是主键?什么是外键?并说出它们的作用 主键:唯一标识一条记录的字段或字段的组合称为主键。
主键不能重复,也不允许为空
外键:用来维护两个表之间数据的一致性,。
外键可以有重复的, 也允许有空值
作用:
主键:用来保证数据完整性,保证记录的唯一性
外键:通过设置外键和其他表建立关联关系(一对一,一对多,多对多)
1.3 说出char和varchar的区别,及它们的适用场景 char是一种固定长度的字符串类型,
varchar是一种可变长度的字符串类型;
适用场景:
char一般用来存储长度固定字段,如:手机号,身份证号等
varchar一般用来存储不固定长度的字段:如:用户名,昵称等
1.4 说出不小于3种mysql数据库支持的约束,并说明它们的使用场景
  1. 主键约束:在主键上使用
  2. 外键约束:建立俩个表之间的关系时使用
  3. 唯一约束:保证数据表中某个字段数据的唯一性时使用
  4. 非空约束:需要保证数据库字段值不为空时使用
  5. 自动增长列:数据值自增时使用,字段类型必须是整数,且必须使用主键修饰。
1.5 说出5种SQL中常用的聚合函数,并说明它们的作用
  1. avg():返回指定组中的平均值,空值被忽略;
  2. count():返回指定组中的项目个数
  3. max():返回指定数据中的最大值;
  4. min():返回指定数据中的最小值;
  5. sum():返回指定数据的和,只能用于数字列,空值忽略;
1.6 说出SQL中内连接、左连接、右连接的区别 内连接:是从结果表中删除与其他被连接表中没有匹配行的所有行
内连接 inner join
左连接(左外连接):以左表作为基准进行查询,左表数据都显示,连接条件成立右表数据显示,条件不成立显示null
左外连接 left outer join
右连接(右外连接):以右表作为基准进行查询,右表数据都显示,连接条件成立左表数据显示,条件不成立显示null
右外连接 right outer join
1.7 谈谈数据库连接池的作用 作用:
1.资源重用,避免了数据库连接频繁建立、关闭的开销
2.更快的系统响应速度,直接从连接池中获取连接,响应速度加快
3.控制资源的使用,连接池能自动维护池中的连接数量,提高资源的利用率。
常用的数据库连接池:DBCP、C3P0、Druid
1.8 数据库有100条数据,怎么查询第50,51条 select * from table_name limit 49, 2
原因:MySQL的limit用法:
select * from table limit m,n
其中m是指记录开始的index,从0开始,表示第一条记录;n是指从第m+1条开始,取n条。
1.9 什么是数据库事务 事务:业务中的一组操作,要么全部成功,要么全部失败,不可分割的工作单位。
1.10 数据库事务的四大特性 数据库事务的四大特性为:ACID,分别是原子性、一致性、隔离性和持久性
原子性:不可分割的工作单位,操作要么全部成功,要么全部失败;
一致性:一个事务执行前后,表中数据必须保持一致。比如:如果从A账户转账到B账户,不可能因为A账户扣了钱,而B账户没有加钱;
隔离性:事务的隔离性是指在并发环境中,并发的事务是互相隔离的,一个事务的执行不能被其它事务干扰;
持久性:事务一旦提交后,数据库中的数据必须被永久的保存下来。
1.11 事务并发访问会产生的问题 脏读:一个事务读取到了另一个事务中尚未提交的数据
不可重复读:一个事务读取到了另一个事务中已经提交的数据,通常为update时引发的问题
幻读:一个事务读取到了另一个事务中已经提交的数据,通常为insert或delete时引发的问题
1.12 事务的四种隔离级别 读未提交:任何问题都没有解决;
读已提交:解决了脏读问题;
可重复读:解决了脏读和不可重复读问题;
串行化:解决了脏读、不可重复读和幻读问题。
1.13 MySQL是怎么管理事务的 操作开始前开启事务,操作成功完成提交事务,操作失败回滚事务。
开启事务:start transaction
提交事务:commit
回滚事务:rollback
1.14 谈谈对事务的保存点理解 在事务的处理过程中,业务操作执行了一部分,可以记录一个保持点,程序继续执行,如果程序出现异常,可以回滚所有,也可以回滚到保持点,从而保证已经执行的部分操作可以进行事务的提交。
事务的保存点,类似单击游戏的存档和读档:
1、如果没有游戏的存档功能,每次玩单机游戏都会从第一关重新开始。
2、如果使用了游戏的存档功能,下次在玩游戏时,就会从存档处开始。
1.15 数据库去重 distinct 对查询结果去重。
借助group by 进行分组,也可以出现去重效果。
1.16 group by 的注意事项 1.SELECT子句中的列名必须为分组列或聚合函数
2.聚合函数对于GROUP BY子句定义的每个组各返回一个结果
3.必须在GROUP BY 子句之前指定 WHERE 子句
4.having对分组结果进行过滤。
1.17 什么是索引? 索引是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。
索引的实现通常使用B树及其变种B+树。
索引相当于字典的目录,作用在于提升查询效率。
1.18 索引的分类 据数据库的功能,可以在数据库设计器中创建三种索引:唯一索引、主键索引和聚集索引。
唯一索引:不允许其中任何两行具有相同索引值的索引。
主键索引:在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。
聚集索引:表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。聚集索引通常提供更快的数据访问速度。
1.19 索引的优缺点 索引的优点:
  1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性;
  2. 可以大大加快数据的检索速度,这也是创建索引的最主要的原因;
    索引的缺点:
  3. 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加;
  4. 索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大;
  5. 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度
    参考:https://blog.csdn.net/u013310119/article/details/52527632
1.20 什么情况应该使用索引?什么情况下又不应该使用? 适用场景:
  1. 加快条件的判断速度;
  2. 在作为主键的列上,强制该列唯一
  3. 在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;
  4. 在经常需要排序的列上创 建索引,因为索引已经排序
不适用场景:
  1. 查询少的列
  2. 数据内容少的列
  3. text, image和bit数据类型的列不应该增加索引
  4. 修改多于查询的列不能加索引。
1.21 主键(primary key)和唯一索引(unique index)区别 1, 主键一定是唯一性索引,唯一性索引并不一定就是主键。
2, 一个表中可以有多个唯一性索引,但只能有一个主键。
3, 主键列不允许空值,而唯一性索引列允许空值。
注意:唯一索引也称为唯一约束
1.22 什么是视图? 视图是一个虚拟表,其内容由查询定义。
从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据。
从数据库系统内部来看,一个视图是由SELECT语句组成的查询定义的虚拟表。创建视图时候,可以是一个数据表的一部分,也可以是多个基表的联合,
从数据库系统外部来看,视图就如同一张表一样,对表能够进行的一般操作都可以应用于视图,例:查询,插入,修改,删除操作等。
1.23 表和视图的关系 用来创建视图的表叫做基表 base table
视图(view)是在基表之上建立的,它的结构(即所定义的列)和内容(即所有数据行)都来自基表,它依据基表存在而存在。一个视图可以对应一个基表,也可以对应多个基表。
区别:
1、视图是已经编译好的sql语句;而表不是。
2、视图没有实际的物理记录;而表有。
3、视图是窗口;表是内容
4、表占用物理空间而视图不占用物理空间
5、视图的建立和删除只影响视图本身,不影响对应的基本表。
1.24 mysql查询条件里如何拼接字符串 1.合并字段concat
select concat(user_name, password ) from tb_user;
下述只有mysql才有:
2.使用指定连接符合并字段 concat_ws
#是连接符:select concat_ws("#" , user_name , password ,id ) from tb_user;
3.合并结果group_concat,将所有结果显示在一个单元格中
:select group_concat(user_name , password ) from tb_user;
1.25 列举几种表连接方式, 有什么区别? 1.交叉连接:交叉连接不带WHERE子句,它返回被连接的两个表所有数据行的笛卡尔积
2.左右外连接:左连接以左表为基表,右表为从表,基表全部展示,从表数据对应匹配条件进行展示,没有匹配显示null
3.内连接:还可以被称为普通连接或者自然连接,内连接是从结果表中删除与其他被连接表中没有匹配行的所有行。
1.26 having是什么 having关键字通常是与group by关键字联合使用
group by 进行分组,having对分组结果进行过滤。
1.27 在数据库中查询语句速度很慢,如何优化? 1 避免在where子句中进行null判断
2 避免在where子句中使用!=
3 避免在where子句中进行or条件连接
4 避免使用select*,而应该使用具体的字段名
5 避免使用like关键字
1.28 union和union all有什么不同? 都是集合运算,求的是并集:用于合并两个或多个 SELECT 语句的结果集
union:不允许出现重复的记录
union all:允许出现重复的记录
1.29 在数据库中你怎么把时间进行格式化 在数据库中可以使用 DATE_FORMAT(date,format)进行时间格式化
date 参数是合法的日期
format 参数规定日期/时间的输出格式
1.30 count(*)和count(1)的效率哪个更高? count()和count(1)执行的效率是完全一样的
count(1)的执行计划将转化为count(
)
参考:https://www.cnblogs.com/sueris/p/6650301.html
https://blog.csdn.net/moni_mm/article/details/82056021
1.31 count(*)和count(1)的结果一样吗? 一样
1.32 超键、候选键、主键、外键分别是什么? 主键:唯一标识一条记录的字段或字段的组合称为主键。 主键不能重复,也不允许为空
外键:用来维护两个表之间数据的一致性,外键可以有重复的, 也允许有空值,其他没有学过
1.33 数据库图形化工具的好处 可以直观的操作数据 查看数据,可以借助图形化界面轻松完成对数据库的常用操作
1.34 你做过那些Mysql数据库优化 Mysql的优化,大体可以分为三部分:
1.索引的优化,2.sql语句的优化,3.表的优化
1.索引的优化
(1)只要列中含有NULL值的字段,不使用索引
(2)尽量使用短索引
(3)经常在where子句使用的列,尽量使用索引,有多个列where或者order by子句的,应该建立复合索引,对于like语句,以%或者‘-’开头的不会使用索引,以%结尾会使用索引
(4)尽量不要在列上进行运算
(5)尽量不要使用not in和<>操作
2.sql语句的优化
(1)查询时,能不要就不用,尽量写全字段名
(2)查询时,尽量使用连接查询代替子查询
(3)多表连接时,尽量小表驱动大表,即小表 join 大表
3.表的优化
(1)表的字段尽可能用NOT NULL
(2)字段长度固定的表查询会更快
(3)把数据库的大表按时间或一些标志分成小表
(4)将表分区
1.35 数据库主键,不设置主键会怎么样 1.主键用于表示数据(记录)的唯一性, 不设置主键会导致数据表中可能存在完全相同的数据;
2.一个表的外键必须是另一个表的主键,不设置主键将无法建立俩个表之间的关联关系;
3.设置主键时,会自动增加索引,有利于提高数据的检索速度;
1.36 MySQL的数据引擎有了解吗? MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MYSQL。
常见的引擎:Innodb、MyISAM。
InnoDB是默认的MySQL引擎,支持事务,支持行锁定和外键。
MyISAM拥有较高的插入、查询速度,但不支持事物。

    推荐阅读