python全栈学习

Mysql数据库相关面试题总结(30道)

2018-08-31  本文已影响21人  SlashBoyMr_wang

1、列举常见的关系型数据库和非关系型都有那些?

两种数据库之间的区别:

关系型数据库:
非关系型数据库

2、MySQL常见数据库引擎及比较?

3、简述数据三大范式?

4、什么是事务?什么是锁?MySQL如何支持事务?

- 锁:是实现事务的关键,所可以保证事务的完整性和并发行,与现实生活中的锁一样,可以使某些数据的拥有者,在某段时间内不能使用某些数据或者数据结构。

注意:MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。

5、简述数据库设计中一对多和多对多的应用场景?

6、简述触发器、函数、视图、存储过程?

7、MySQL索引种类

8、索引在什么情况下遵循最左前缀的规则?

9、主键和外键的区别?

10、MySQL常见的函数?

11、列举创建索引但是无法命中索引的8种情况。

12、如何开启慢日志查询?

[mysqld]
slow_query_log = ON
slow_query_log_file = /usr/local/mysql/data/slow.log
long_query_time = 1    

修改完参数后重启数据库服务就可以了

13、数据库导入导出命令(结构+数据)?

14、 数据库优化的思路

- 1.SQL语句优化
1)应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
2)应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null
可以在num上设置默认值0,确保表中num列没有null值**,然后这样查询:
select id from t where num=0
3)很多时候用 exists 代替 in 是一个好的选择
4)用Where子句替换HAVING 子句 因为HAVING 只会在检索出所有记录之后才对结果集进行过滤

- 2.索引优化
合理使用:普通索引、唯一索引(主键索引、唯一索引)、联合索引、全文索引、空间索引

- 3.数据库结构优化
1)范式优化:
比如消除冗余(节省空间。。)
2)反范式优化:
比如适当加冗余等(减少join)
3)拆分表:
分区将数据在物理上分隔开,不同分区的数据可以制定保存在处于不同磁盘上的数据文件里。这样,当对这个表进行查询时,只需要在表分区中进行扫描,而不必进行全表扫描,明显缩短了查询时间,另外处于不同磁盘的分区也将对这个表的数据传输分散在不同的磁盘I/O,一个精心设置的分区可以将数据传输对磁盘I/O竞争均匀地分散开。对数据量大的时时表可采取此方法。可按月自动建表分区。
4)拆分其实又分垂直拆分和水平拆分:
案例: 简单购物系统暂设涉及如下表:
1.产品表(数据量10w,稳定)
2.订单表(数据量200w,且有增长趋势)
3.用户表 (数据量100w,且有增长趋势) 以mysql为例讲述下水平拆分和垂直拆分,mysql能容忍的数量级在百万静态数据可以到千万。
垂直拆分:解决问题:表与表之间的io竞争 。不解决问题:单表中数据量增长出现的压力。
方案: 把产品表和用户表放到一个server上 订单表单独放到一个server上
水平拆分: 解决问题:单表中数据量增长出现的压力 不解决问题:表与表之间的io争夺。
方案: 用户表通过性别拆分为男用户表和女用户表,订单表通过已完成和完成中拆分为已完成订单和未完成订单, 产品表、未完成订单放一个server上;已完成订单表和男用户表放一个server上;女用户表放一个server上(女的爱购物 哈哈)
- 4.服务器硬件优化

15、char和varchar的区别?

16、简述MySQL的执行计划?

在工作过程中,有时候会对慢查询进行调优。对于MySQL的SQL语句调优,MySQL本身提供了强大的explain关键字用于查询分析执行计划。

详细了解请点链接:http://www.cnblogs.com/micrari/p/6583482.html

17、在对name做了唯一索引前提下,简述以下区别:

18、1000w条数据,使用limit offset 分页时,为什么越往后翻越慢?如何解决?

19、什么是索引合并?

索引合并:是把几个索引的范围扫描合并成一个索引。索引合并的时候,会对索引进行并集,交集或者先交集再并集操作,以便合并成一个索引。这些需要合并的索引只能是一个表的。不能对多表进行索引合并。

20、什么是覆盖索引?

MySQL可以利用索引返回SELECT 列表中的字段。而不必根据索引再次读取数据文件。 包含所有满足查询需要的数据的索引成为覆盖索引(Covering Index)。也就是平时所说的不需要回表操作

21、left join、right join以及inner join的区别

22、写出一条Sql语句:取出表A中第31到第40记录 (Mysql)

23、什么是数据库约束,常见的约束有哪几种?

数据库约束用于保证数据库、表数据的完整性(正确性和一致性)。可以通过定义约束\索引\触发器来保证数据的完整性。
总体来讲,约束可以分为:
主键约束:primary key;
外键约束:foreign key;
唯一约束:unique;
检查约束:check;
空值约束:not null;
默认值约束:default;

24、从数据库中随机取50条数据

25、什么是sql注入?

SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。

26、关于sql语句应该考虑哪些安全性?

1.防止sql注入,对特殊字符进行转义,过滤或者使用预编译的sql语句绑定变量。
2.最小权限原则,特别是不要用root账户,为不同的类型的动作或者组建使用不同的账户。
3.当sql运行出错时,不要把数据库返回的错误信息全部显示给用户,以防止泄漏服务器和数据库相关信息。

27、一张表,里面有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把Mysql重启,再insert一条记录,这条记录的ID是18还是15 ?

28、怎么把这样一个数据库表

year   month amount
1991   1     1.1
1991   2     1.2
1991   3     1.3
1991   4     1.4
1992   1     2.1
1992   2     2.2
1992   3     2.3
1992   4     2.4
查成这样一个结果
year m1   m2   m3   m4
1991 1.1 1.2 1.3 1.4
1992 2.1 2.2 2.3 2.4 
答案、
select year, 
(select amount from   aaa m where month=1   and m.year=aaa.year) as m1,
(select amount from   aaa m where month=2   and m.year=aaa.year) as m2,
(select amount from   aaa m where month=3   and m.year=aaa.year) as m3,
(select amount from   aaa m where month=4   and m.year=aaa.year) as m4
from aaa   group by year

29、简述数据库的读写分离?

30、简述数据库分库分表?(水平、垂直)

上一篇下一篇

猜你喜欢

热点阅读