mysql数据库面试题

目录

1.事务是什么?事务的特性?主要作用?一致性是啥,隔离级别,分别解决了什么问题?默认是什么级别?序列化是啥,可重复度读是啥。。。

2.索引是什么、结构、原理以及优缺点;为什么使用B+树;什么情况下不建议使用索引;在一列添加索引,什么情况下索引什么并没有生效,如何改进;索引什么时候都能加快查询吗?

3.数据库锁?死锁是什么?什么情况下会发生死锁?如何避免?

4.视图的作用、优缺点

5.数据库建表存储引擎怎么选(innodb,myisam的区别)?同一条SQL语句在InnoDB和MyISAM下哪个执行快?

6.数据库连接泄漏的含义

7.数据库char和varchar的区别

8.主键和外键的区别?

9.count和sum的区别,count(列名)和count(*)的区别

10..drop、delete以及truncate的区别

11.数据库左连接、右连接是什么,区别?内连接和外连接区别

12.group by 和having

13.数据库的范式

14.数据库的优化的思路

15. Mysql 是什么类型的数据库 还有什么其他类型的数据库? Mysql的优势是什么?

16.select * 为什么不好呢?

17.建立索引和主键怎么考虑

18.数据库的完整性和一致性可以使用什么方法保证

19.五张关联表 如何快速查询 什么方法可以提升查询效率

20.给你一个5亿行的数据,如何设计表?

21.select语句的执行逻辑

22.存储过程

23.数据库数据量大的时候怎么处理

24.一个 SQL 执行的很慢

25.某个表有10条一样的数据,删除其中的9条

26.授权命令,收回用户权限的命令

27.数据库给一个表把年龄23-30之间的人的总数查出来

28.查找学生信息表里姓名第一个字为‘王’的学生姓名

29.给一个成绩表,查找一个班级里平均分大于90的学生姓名

30.删除表和删除字段分别用什么关键词

31.怎么把所有重复的字段查询出来

32.怎么修改一个表的某个字段长度

33.数据库有几种语言?


1.事务是什么?事务的特性?主要作用?一致性是啥,隔离级别,分别解决了什么问题?默认是什么级别?序列化是啥,可重复度读是啥。。。

定义:事务是一个完整的业务逻辑单元,不可再分

特性

(1)原子性:最小的工作单元,不可再分

(2)一致性:事务要求所有的DML语句操作的时候,必须保证同时成功或者同时失败

(3)隔离性:多个事务并发执行,互不影响

(4)持久性:已被提交的事务应永久保存在数据库中

隔离级别:

(1)读未提交

存在脏读现象:当前事务可以读取到对方未提交的数据。

(2)读已提交

解决了: 脏读现象。

存在不可重复读:一个事务范围内的两个相同的查询却返回了不同数据(update)

(3)可重复读

       解决了:不可重复读问题。

存在幻读:同一个事务内多次查询返回的结果集不一样(比如增加了或者减少了行记录insert)。

(4)序列化读

解决了所有问题。效率低。需要事务排队

默认:可重复读

可重复读:事务开启,不允许其他事务的UPDATE修改操作

序列化:这种级别下,事务一个一个排队执行。

 

2.索引是什么、结构、原理以及优缺点;为什么使用B+树;什么情况下不建议使用索引;在一列添加索引,什么情况下索引什么并没有生效,如何改进;索引什么时候都能加快查询吗?

定义: 索引就相当于一本书的目录,通过目录可以快速的找到对应的资源。

结构:B + Tree

原理:通过B +Tree缩小扫描范围,底层索引进行了排序,分区,通过索引检索获取到关联的物理地址,通过物理地址定位表中的数据。

优点

(1)可以大大加快数据的检索速度

缺点: 

(1)创建索引需要进行动态的维护

(2)索引需要占用时间和空间

原因:B+树的磁盘读写代价更低;B+树的查询效率更加稳定;

(1)数据唯一性差的字段

(2)频繁更新的字段不要使用索引

(3)字段不在where语句出现时不要添加索引

(4)数据量少的表不要使用索引

 

(1)条件中有or,即使其中有条件带索引也不会使用

(2)模糊查询的时候,第一个通配符使用的是%,这个时候索引是失效的。

 

在有大量插入操作的时候,频繁重建B+树,会有大量的开销,导致速度慢

 

3.数据库锁?死锁是什么?什么情况下会发生死锁?如何避免?

解决丢失更新、脏读、不可重复读等问题

MySQL大致可归纳为以下3种锁:

 表级锁开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。

行级锁开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般

 

 从数据库系统的角度来看:分为独占锁(即排它锁),共享锁和更新锁 

共享锁:允许并发事务读取 (SELECT) 一个资源

排它锁:可以防止并发事务对资源进行访问。其它事务不能读取或修改排它 (X) 锁锁定的数据。 

更新锁:在修改操作的初始化阶段用来锁定可能要被修改的资源,这样可以避免使用共享锁造成的死锁现象。

 

从程序员的角度看:分为乐观锁和悲观锁。

乐观锁数据库不做加锁处理。

悲观锁整个数据处理过程中,处于锁定状态。

 

死锁是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。

 

(1)资源互斥使用。 

(2)多个进程保持一定的资源,但又请求新的资源。 

(3)资源不可被剥夺。 

(4)多个进程循环等待

 

加锁顺序

加锁时限

死锁检测

 

4.视图的作用、优缺点

视图可以隐藏数据的实现细节,保护数据;简化检索,加快查询

优点:简化了操作;安全;逻辑上独立性

缺点:性能差;修改有限制

 

5.数据库建表存储引擎怎么选(innodbmyisam的区别)?同一条SQL语句在InnoDBMyISAM下哪个执行快?

(1)InnoDB支持事务,MyISAM不支持。

(2)InnoDB支持外键,而MyISAM不支持。

(3)InnoDB是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。而MyISAM是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。

(4)Innodb不支持全文索引,而MyISAM支持全文索引,查询效率上MyISAM要高。

 

6.数据库连接泄漏的含义

在某次使用后没有正确的关闭Connection、Statement和ResultSet资源,在每次执行后都会留下一些没有关闭的连接,这些连接不能重新使用,造成数据库连接泄漏

 

7.数据库charvarchar的区别

Char:类型时定长

Varchar:类型是可变长

 

8.主键和外键的区别?

主键:能确定一条记录的唯一标识

外键:用于与另一张表的关联

 

9.countsum的区别,count(列名)和count*)的区别

count和sum的区别:求和用sum();求行的个数用count()

count(*):包含所有列,不会忽略为null的列

count(列名):只包括列名那一项,会忽略值为null的计数

 

10..dropdelete以及truncate的区别

drop:删除内容和定义,释放空间。(表结构和数据一同删除)
truncate:删除内容,释放空间,但不删除定义。(表结构还在,数据删除)
delete:删除内容,不删除定义,也不释放空间。
效率一般来说:drop> truncate > delete

 

11.数据库左连接、右连接是什么,区别?内连接和外连接区别

内连接:A表和B表能够匹配上的记录查询出来,这就是内连接。

外连接:AB两张表中有一张表是主表,一张表是副表,当副表中的数据没有和主表中的数据匹配上,副表自动模拟出NULL与之匹配。

 

左连接:左边有的,右边没有的为null

右连接:右边有的,左边没有的为null

内连接:显示左边右边共有的

 

12.group by having

group by :按照某个字段或者某些字段进行分组。

having :having是对分组之后的数据进行再次过滤。

 

13.数据库的范式

第一范式:任何一张表都应该有主键,并且每一个字段原子性不可再分。

第二范式:建立在第一范式的基础之上,所有非主键字段完全依赖主键,不能产生部分依赖。

第三范式:建立在第二范式的基础之上,所有非主键字段直接依赖主键,不能产生传递依赖。

 

14.数据库的优化的思路

(1)硬件优化

(2)结构优化

       1)范式优化:消除冗余

       2)反范式优化:适当增加冗余

       3)避免数据维护中出现更新、插入和删除异常

       4)拆分表:垂直拆分和水平拆分

(3)SQL语 句优化

 

15. Mysql 是什么类型的数据库 还有什么其他类型的数据库? Mysql的优势是什么?

关系型数据库

还有非关系型数据库   nosql

(1)支持多种操作系统。AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等

(2)为多种编程语言提供了API。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。

(3)支持多线程,充分利用CPU资源。

(4)优化的SQL查询算法,有效地提高查询速度。

(5)提供多种数据库连接途径。TCP/IP、ODBC和JDBC等

(6)支持大型的数据库。

(7)支持多种存储引擎。

(8)Mysql是开源的,免费。

 

16.select * 为什么不好呢?

要通过查询数据字典完成的,这意味着将耗费更多的时间

 

17.建立索引和主键怎么考虑

(1)主键属于索引的一种。

(2)根据数据库的功能,可以在数据库设计器中创建三种索引:唯一索引、主键索引和聚集索引。而主键只是其中的一种。

 

18.数据库的完整性和一致性可以使用什么方法保证

(1)尽可能使用约束,如主键、非空字段等

(2)使用触发器

 

19.五张关联表 如何快速查询 什么方法可以提升查询效率

(1)确保连接的字段有索引

(2)尽可能把限制条件写在前面(取尽可能少的行)

(3)每次只取必须的数据列(取尽可能少的列)

 

20.给你一个5亿行的数据,如何设计表?

分库分区,根据主键的范围或者哈希来分

 

21.select语句的执行逻辑

select            6

from              1

join on           2

where            3

group by        4            (按照某个字段或者某些字段进行分组)

having           5            (对分组之后的数据进行再次过滤)

order by         7

 

22.存储过程

存储过程是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。类似于C语言中的函数。

 

23.数据库数据量大的时候怎么处理

限定数据范围

读写分离

垂直分区

水平分区

 

24.一个 SQL 执行的很慢

大多数情况下很正常,偶尔很慢,则有如下原因

(1)、数据库在刷新脏页,例如 redo log 写满了需要同步到磁盘。

(2)、执行的时候,遇到锁,如表锁、行锁。

这条 SQL 语句一直执行的很慢,则有如下原因。

(1)、没有用上索引:例如该字段没有索引;由于对字段进行运算、函数操作导致无法用索引。

(2)、数据库选错了索引。

 

25.某个表有10条一样的数据,删除其中的9

delete * from 表名 limit 9;

 

26.授权命令,收回用户权限的命令

Grant

Revoke

 

27.数据库给一个表把年龄23-30之间的人的总数查出来

select  count(*) from 表名 where age>=23 and age<=30;

between。。and

 

28.查找学生信息表里姓名第一个字为‘王’的学生姓名

模糊查询:%代表任意多个字符,_代表任意1个字符。

select name from 表名 where name like ‘王%’

 

29.给一个成绩表,查找一个班级里平均分大于90的学生姓名

  1. select avg(grade), sname from s

join sc

on s.sno = sc.sno

group by sname

2.select sname, sno, avg(grade) from s

join sc

on s.sno = sc.sno

group by sname

having avg(grade)>90

 

30.删除表和删除字段分别用什么关键词

删除表:drop table tablename;

删除字段:delete from tablename  where  username = '123';

 

31.怎么把所有重复的字段查询出来

select 字段名 from 表名 group by 字段名 having (count(字段名)>1)

 

32.怎么修改一个表的某个字段长度

alter table 表名 modify 字段名 char(20)

 

33.数据库有几种语言?

SQL语言共分为四大类:

数据查询语言DQL

数据操纵语言DML

数据定义语言DDL

数据控制语言DCL

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值