MySQL相关面试题

1.概述drop、delete、truncate的区别

drop关键字用于删除结构,用来删除数据库或者表
delete用来删除数据,可以回滚
truncate删除结构然后重建,不可以回滚
在mysql中
delete删除数据时不会重置自动增长列的值
truncate删除结构然后重建会重置自动增长列的值

2.什么是主键?什么是外键?它们有什么作用?

主键:唯一标识一条记录的字段或多个字段的组合称为主键
一个表只能有一个主键,主键的值不能为空,不能重复
外键:用来保证两表数据的一致性
一个表可以有多个外键,外键上的值可以重复
主键:用来保证数据的唯一性,完整性
外键:通过设置外键与其他表建立关联关系(一对一、一对多、多对多)

3.char和varchar有什么区别,分别适用于什么场景?

char不可变字符串类型
varchar可变字符串类型
char常用于字段长度固定的列,比如身份证,手机号等等
varchar常用于字段长度不固定的列,比如用户名,昵称

4.说出不小于3种mysql数据库约束,并说明它们适用的场景

主键约束:在主键上使用
外键约束:用来与其他表建立关联关系
唯一约束:用来保证数据表中某列数据的唯一性
非空约束:用来保证数据表中某列数据值不能为null(空)

5.说出5种SQL中常用的聚合函数,并说出它们的作用

avg:求一组数据的平均值
sun:求一组数据的和
count:求一组数据的个数
max:求一组数据中的最大值
min:求一组数据中的最小值

6.说出SQL中的内连接、左链接、外连接的区别

内连接:从结果表中删除其他被连接表中没有匹配行的所有行
左连接:以左边的表为基表,左边表的数据全部显示,当连接条件成立时,右边的数据显示,否则显示null
右连接:以右边的表为基表,右边表的数据全部显示,当连接条件成立时,左边的数据显示,否则显示null

7.数据库连接池有什么作用?

1.资源重用:避免数据库连接频繁的建立,需要进行连接时可以直接到连接池中取连接,关闭开销
2.更快的系统响应速度:当需要建立连接时直接到连接池中取连接,这样系统的响应速度会更快
3.资源统一管理,提升资源的利用率:连接池会自动维护池中的连接数量,提升资源的利用率

8.数据库有100条数据,怎么查询第50~51条

使用limit关键字,limit关键字有两个值;
第一个值为起始值,第二个值是偏移量;
查询第50~51条 limit 49,2

9.什么事数据库事务?

业务上的一组操作要么全部成功,要么全部失败

10.数据库事务的四大特征什是什么?

数据库事务的四大特征简称为:ACID,分别是原子性,一致性,隔离性、持久性
1.原子性:一组操作时不可分割的原子单位,要么全部成功,要么全部失败
2.一致性:在事务提交后,数据库表中的数据必须与其保存一致
3.隔离性:事务的隔离性是指在并发环境下,事务之间相互隔离,一个事物的执行不会受到其他事物的影响
4.持久性:事务一旦提交,数据库必须永久保存数据

11.事务并发访问会产生什么问题?

脏读:一个事物读取到另一个事物未提交的数据
幻读:一个事物读取到另一个事物以提交的数据,一般修改操作会引发的问题
不可重复读:一个事物读取到另一个事物以提交的数据,一般添加和删除操作会引发的问题

12.事务的四种隔离级别是什么?

读未提交:没有结果任何并发是产生的问题 读以提交:解决了脏读问题
可重复读:解决了脏读和不可重复读问题
串行化:解决了脏读、幻读、不可重复读

13.MySQl是怎么管理事务的?

操作前开启事物,操作完成提交事物,发生异常回滚事物
开启事物:start transaction
提交事物:commit
回滚事物:rollback

14.谈谈对事务保存点的理解

事务在处理过程中,业务已经执行了部分,此时可以设置一个保存点,程序继续运行,当发生异常时可以回滚所有,也可以回滚到保存点,这样可以保证对已执行业务进行事务提交

15.数据库去重如何实现

使用distinct关键字对查询结果进行去重
使用group by关键字对数据进行分组,实现去重

16.group by的注意事项

1.select字句中必须时分组字段或者聚合函数
2.聚合函数会对group by分组的每组结果都有一个返回值
3.where关键字必须在group by之前使用
4.对分组后的结果可以使用having关键字进行过滤

17.什么是索引?

索引就是数据库管理系统中的一种排序数据结构,以助于快速查询,更行数据库表中的数据。
索引的实现通常使用B树或者变种B+树实现
索引相当于字典的目录,作用在于提升查询效率

18.索引的分类

根据数据库的功能,可以在数据库设计器中可创建三种索引:唯一索引、主键索引和聚合索引
1.唯一索引:不允许其他两行具有相同索引值的缩影
2.主键索引:在数据库关系设计图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型,该索引要求主键中的每一个值都唯一。当在查询中使用主键索引时,它还运行对数据的快速访问
3.聚合索引:表中行的物料顺序与键值的逻辑顺序(通常是主键那一列 索引)相同。一个表只能包含一个聚集索引,聚集索引通常提供更快的数据访问速度。

19.索引的优缺点

索引的优点:
1.通过创建唯一索引,可以保证数据库表中的的每行数据的唯一性
2.可以大大的加快数据的检索效率,这也是创建索引的最主要原因
索引的缺点:
1.创建索引和维护索引要消耗时间,这种时间随着数量的增加而增加
2.索引需要占用物理空间,除了数据表占物料空间之外,每个索引还要占一定的物料空间,如果要建立聚集索引,那么需要的空间就会更大。
3.当对表中的数据进行增加、删除和修改是,索引也需要动态维护,这样就降低了数据的维护效率

20.什么情况下应该适用索引?什么情况下又不应该使用索引?

适用场景:
1.在作为主键的列上,强制改列唯一
2.在经常用在连接的列上,这些列主要是一些外键,可以加快连接速度
3.在经常需要排序的列上创建索引,因为索引已经排序
不适用场景:
1.查询少的列
2.text,image和bit数据类型的列不应该增加索引
3.修改多余查询的列

21.主键(primary key)和唯一索引(unique index)的区别

1.主键一定是唯一性索引,唯一性索引不一定就是主键
2.一个表中可以有多个唯一性索引,但是只能有一个主键
3.主键列不允许有空值,而唯一性索引列允许空值
注意:唯一索引也称为唯一约束

22.什么是视图?

视图是一个虚拟表,其内容由查询定义。
从用户角度来看,一个视图是从一个特定的角度去查看数据库中的数据
从数据库系统内部来看,一个视图是由select语句组成的查询定义的虚拟表。视图可以时表的一部分,也可以时多张基表的联合
从数据库外部来看,视图就如同一张表一样,对表能够进行的一般操作都可以应用于视图。(CRUD)

23.表和视图的区别

用来创建视图的表叫做基表
视图就是在基表之上建立的,它的结构(即所定义的列)和内容(即所有数据行)都来自基表,它依据基表存在而存在。
一个视图可以对应一个基表,也可以对应多个基表。

24.mysql查询条件中如何拼接字符串?

1.合并字段 concat
例:select concat(user_name,password) from tb_user;
在mysql中还有两个关键字可以用来合并字段
1.使用指定的连接符合并字段:concat_ws
例:select concat_ws(‘#’,user_name,password) from tb_user;
2.合并结果,将所有结果显示在一个单元格中 group_concat
例:select group_concat(user_name,password) from tb_user;

25.列举mysql中的几种连接方式,有什么区别?

1.内连接(自然连接、普通连接):从结果表中删除其他连接表中没有匹配行的所有行
2.左连接:以左边的表为基表,左边表的数据全部显示,当连接条件成立时右边的表的数据显示,否则显示null
3.右连接:以右边的表为基表,右边表的数据全部显示,当连接条件成立时左边的表的数据显示,否则显示null
4.交叉连接:返回两个表所有数据的笛卡尔积

26.having是什么?

having关键字通常是与group by关键字联合使用
group by对数据进行分组,having对分组结果进行过滤

27.在数据库中查询语句速度很慢,如何优化?

1.避免在where字句中进行null值判断
2.避免在where字句中使用!=
3.避免在where字句中进行or条件连接
4.避免使用select*,应该使用具体的字段名
5.避免使用like关键字

28.union和union all有什么区别?

都是集合运算,求的是并集:用于合并两个或者多个select语句的结果集
union:不允许出现重复记录
union all:允许出现重复数据

29.在数据库中你怎么把时间进行格式化?

在数据库中可以使用DATA_FORMAT(data, format)进行时间格式化
data参数是合法的日期
format参数规定日期/时间的输出格式

30.count(*)和count(1)的结果一样吗?那个效率高一些?

结果一样,count()和count(1)执行效率完全一样。
count(1)的执行计划将转换成count(
)

31.你做过那些Mysql数据库优化?

Mysql的优化,大体可以分为三部分
1.索引优化
2.sql语句的优化
3.表的优化
1.索引的优化
1.只要列中含有null值的字段,不使用索引
2.尽量使用短索引
3.经常在where字句使用的列,尽量使用索引。有多个列where或者order by字句的,应该建立复合索引。
4.尽量不要使用not in 和 <> 操作,这样会导致索引失效
5.经常用于查询的列,可以使用索引
2.SQL语句优化
1.查询时,select字句中能不用就不用,尽量使用字段名
2.查询时,尽量使用连接查询代替子查询
3.多表连接时,尽量小表驱动大表,即小表join大表
3.表的优化
1.表的字段尽可能使用not null
2.字段长度固定的表查询会更快
3.把数据库的大表按时间或一些标识拆分成小表
4.将表分区

32.数据库主键,不设置主键会怎么样?

1.主键用于表示数据的唯一性,不设置主键会导致数据表中可能存在完全相同的数据
2.一个表的外键必须是另一个表的主键,不设置主键将无法建立两表之间的关联关系
3.设置主键时,会自动增加索引,有利于数据的检索速度

猜你喜欢

转载自blog.csdn.net/ScholarTang/article/details/114031442
今日推荐