ToB企服应用市场:ToB评测及商务社交产业平台

标题: MySQL(面试题 - 同类型归纳面试题) [打印本页]

作者: 丝    时间: 2024-11-24 13:44
标题: MySQL(面试题 - 同类型归纳面试题)
目次

一、MySQL 数据类型
1. 数据库存储日期格式时,怎样思量时区转换问题?
2. Blob和text有什么区别?
3. mysql里记录货币用什么字段类型比较好?
4. MySQL怎样获取当前日期?
5. 你们数据库是否支持emoji心情存储,假如不支持,怎样操纵?
6. varchar(50)中50的涵义
7. mysql中int(20)和char(20)以及varchar(20)的区别
8. 字段为什么要求界说为not null?
9. 假如要存储用户的暗码散列,应该利用什么字段举行存储?
10. MySQL中DATETIME和TIMESTAMP的区别
11. MySQL中TEXT数据类型的最大长度
二、关联查询
1. Mysql 的内连接、左连接、右连接有什么区别?(已整合)
2. 什么是内连接、外连接、交叉连接、笛卡尔积呢?
3. 谈谈六种关联查询,利用场景。
4. UNION与UNION ALL的区别?
三、主键问题
1. 怎样选择合适的分布式主键方案呢?
2. 数据库自增主键可能遇到什么问题
3. 主键利用自增ID还是UUID,为什么?
4. mysql自增主键用完了怎么办?
四、MySQL架构
1. 说说MySQL 的基础架构图
2. Mysql的binlog有几种录入格式?分别有什么区别?
3. InnoDB引擎的4大特性,相识过吗
五、存储引擎
1. InnoDB与MyISAM的区别
2. InnoDB引擎中的索引策略,相识过吗?
六、索引问题
1. MySQL 索引利用有哪些注意事项呢?
2. 数据库索引的原理,为什么要用 B+树,为什么不用二叉树?
3. 聚集索引与非聚集索引的区别
4. 怎样写sql可以或许有效的利用到复合索引
5. Hash索引和B+树区别是什么?你在计划索引是怎么决议的?
6. 索引有哪些优缺点?
7. 索引有哪几种类型?
8. 创建索引有什么原则呢?
9. 创建索引的三种方式
10. 百万级别或以上的数据,你是怎样删除的?
11. 什么是最左前缀原则?什么是最左匹配原则?
12. B树和B+树的区别,数据库为什么利用B+树而不是B树?
13. 覆盖索引、回表等这些,相识过吗?
14. B+树在满意聚簇索引和覆盖索引的时间不需要回表查询数据?
15. 何时利用聚簇索引与非聚簇索引
16. 非聚簇索引肯定会回表查询吗?
17. 组合索引是什么?为什么需要注意组合索引中的顺序?
18. 列值为NULL时,查询是否会用到索引?
七、SQL优化
1. SQL优化的一般步骤是什么,怎么看执行计划(explain),怎样理解其中各个字段的含义。
2. 假如某个表有近千万数据,CRUD比较慢,怎样优化
3. 说一下大表查询的优化方案
4. 关心过业务系统里面的sql耗时吗?统计过慢查询吗?对慢查询都怎么优化过?
5. 怎样优化长难的查询语句?有实战过吗?
6. 优化特定类型的查询语句
7. 谈谈MySQL的Explain

八、锁问题
1. MySQL 遇到过死锁问题吗,你是怎样解决的?
2. 在高并发环境下,怎样做到安全的修改同一行数据?
3. 数据库的乐观锁和灰心锁
4. select for update有什么含义,会锁表还是锁行还是其他。
5. Mysql中有哪几种锁,列举一下?
6. 隔离级别与锁的关系
7. 按照锁的粒度分,数据库锁有哪些呢?锁机制与InnoDB锁算法
8. 从锁的类别角度讲,MySQL都有哪些锁呢?
9. MySQL中InnoDB引擎的行锁是怎么实现的?
10. 什么是死锁?怎么解决?
11. Mysql一条SQL加锁分析
九、事务
1. 事务的隔离级别有哪些?MySQL的默认隔离级别是什么?
2. 什么是幻读,脏读,不可重复读呢?
3. MySQL事务得四大特性以及实现原理
4. MVCC熟悉吗,它的底层原理?
5. 什么是数据库事务?
6. Innodb的事务实现原理?
7. Innodb的事务与日志的实现方式
十、SQL执行过程
1. 一条SQL语句在MySQL中怎样执行的?
2. 一条sql执行过长的时间,你怎样优化,从哪些方面入手?
3. 一条Sql的执行顺序?
十一、视图 & 游标 & 存储过程 & 存储函数 & 触发器等
1. 为什么要利用视图?什么是视图?
2. 视图有哪些特点?哪些利用场景?
3. 视图的优点,缺点,讲一下?
4. 什么是游标?
5. 什么是存储过程?有哪些优缺点?
6. 什么是触发器?触发器的利用场景有哪些?
7. MySQL中都有哪些触发器?
十二、分布式问题
1. 说说分库与分表的计划
2. 数据库中间件相识过吗,sharding jdbc,mycat?
3. MYSQL的主从耽误,你怎么解决?
4. 读写分离常见方案?
5. MySQL的复制原理以及流程
6. 你是否做过主从一致性校验,假如有,怎么做的,假如没有,你打算怎么做?
十三、生产实际问题
1. 日常工作中你是怎么优化SQL的?
2. MySQL数据库cpu飙升的话,要怎么处理呢?
3. 500台db,在最快时间之内重启
4. 你是怎样监控你们的数据库的?你们的慢日志都是怎么查询的?
十四、别的问题
1. mysql中in和exists的区别
2. MYSQL数据库服务器性能分析的方法命令有哪些?
3. 说一下数据库的三大范式
4. mysql有关权限的表有哪几个呢?
5. 一个6亿的表a,一个3亿的表b,通过外间tid关联,你怎样最快的查询出满意条件的第50000到第50200中的这200条数据记录
6. count(1)、count(*) 与 count(列名) 的区别?
7. 超键、候选键、主键、外键分别是什么?
8. SQL 约束有哪几种呢?
9. drop、delete与truncate的区别
10. SQL的生命周期?
11. Mysql驱动程序是什么?
12. 什么是数据库连接池?为什么需要数据库连接池呢?


一、MySQL 数据类型

1. 数据库存储日期格式时,怎样思量时区转换问题?


变,除非手动修改它。

值都会被自动更新。
怎样思量时区转换问题/看一下这个吧:数据库存储日期格式时,怎样思量时区转换问题?
2. Blob和text有什么区别?


序和比较。
3. mysql里记录货币用什么字段类型比较好?


被用于生存与金钱有关的数据。

小数点后的位数。存储在salary列中的值的范围是从-9999999.99到9999999.99。

4. MySQL怎样获取当前日期?

  1. SELECT CURRENT_DATE();
复制代码
5. 你们数据库是否支持emoji心情存储,假如不支持,怎样操纵?

更换字符集utf8-->utf8mb4
6. varchar(50)中50的涵义


7. mysql中int(20)和char(20)以及varchar(20)的区别


8. 字段为什么要求界说为not null?

null值会占用更多的字节,并且null有很多坑的。
9. 假如要存储用户的暗码散列,应该利用什么字段举行存储?

暗码散列,盐,用户身份证号等固定长度的字符串,应该利用char而不是varchar来存储,如许可以节省空间
且提高检索效率。
10. MySQL中DATETIME和TIMESTAMP的区别

存储精度都为秒
区别:

11. MySQL中TEXT数据类型的最大长度


二、关联查询

1. Mysql 的内连接、左连接、右连接有什么区别?(已整合)


2. 什么是内连接、外连接、交叉连接、笛卡尔积呢?


匹配关系的记录。

3. 谈谈六种关联查询,利用场景。


4. UNION与UNION ALL的区别?

1. 显示结果差别
union会自动压缩多个结果聚集中的重复结果,而union all则将所有的结果集全部显示出来
2. 对重复结果的处理差别
union all是直接连接,取到的是所有值,记录可能有的重复;union是取唯一值,记录没有重复。
以是union在举行表链接后会筛选掉重复的记录,union all不会去除重复记录。
3. 对排序的处理差别
union会按照字段的顺序举行排序;union all 只是将两个结果聚集并后就返回。
结论:从效率上讲,union all要比 union快的多,以是假如确定合并的两个结果集中没有重复且不
需要排序就用Union all。
三、主键问题

1. 怎样选择合适的分布式主键方案呢?


2. 数据库自增主键可能遇到什么问题


解决方案的话,简单点的话可以思量利用UUID哈

3. 主键利用自增ID还是UUID,为什么?

假如是单机的话,选择自增ID;假如是分布式系统,优先思量UUID吧,但还是最好自己公司有一套分布式唯
一ID生产方案吧。

能有问题。

4. mysql自增主键用完了怎么办?

自增主键一般用int类型,一般达不到最大值,可以思量提前分库分表的。
四、MySQL架构

1. 说说MySQL 的基础架构图



Mysql逻辑架构图主要分三层:

2. Mysql的binlog有几种录入格式?分别有什么区别?

有三种格式哈,statement,row和mixed。

志量,节省了IO,提高性能。由于sql的执行是有上下文的,因此在生存的时间需要生存相关的信息,同
时尚有一些利用了函数之类的语句无法被记录复制。

全部记下来但是由于很多操纵,会导致大量行的改动(比如alter table),因此这种模式的文件生存的信息
太多,日志量太大。

3. InnoDB引擎的4大特性,相识过吗


五、存储引擎

1. InnoDB与MyISAM的区别


2. InnoDB引擎中的索引策略,相识过吗?


索引下推优化是 MySQL 5.6 引入的, 可以在索引遍历过程中,对索引中包含的字段先做判断,直接过滤掉不
满意条件的记录,减少回表次数。
这篇文章非常不错,各人去看一下吧:聊一聊 InnoDB 引擎中的这些索引策略
六、索引问题

1. MySQL 索引利用有哪些注意事项呢?

可以从三个维度答复这个问题:索引哪些环境会失效,索引不适合哪些场景,索引规则
索引哪些环境会失效

后端程序员必备:索引失效的十大杂症
索引不适合哪些场景

索引的一些潜规则

2. 数据库索引的原理,为什么要用 B+树,为什么不用二叉树?

可以从几个维度去看这个问题,查询是否够快,效率是否稳定,存储数据多少,以及查找磁盘次数,为什么不
是二叉树,为什么不是平衡二叉树,为什么不是B树,而偏偏是B+树呢?
为什么不是一般二叉树?
假如二叉树特殊化为一个链表,相称于全表扫描。平衡二叉树相比于二叉查找树来说,查找效率更稳定,总体
的查找速度也更快。
为什么不是平衡二叉树呢?
我们知道,在内存比在磁盘的数据,查询效率快得多。假如树这种数据结构作为索引,那我们每查找一次数据
就需要从磁盘中读取一个节点,也就是我们说的一个磁盘块,但是平衡二叉树但是每个节点只存储一个键值和
数据的,假如是B树,可以存储更多的节点数据,树的高度也会低落,因此读取磁盘的次数就降下来啦,查询
效率就快啦。
那为什么不是B树而是B+树呢?
页的默认大小是16KB,假如不存储数据,那么就会存储更多的键值,相应的树的阶数(节点的子节点树)
就会更大,树就会更矮更胖,云云一来我们查找数据举行磁盘的IO次数有会再次减少,数据查询的效率也
会更快。
查找,排序查找,分组查找以及去重查找变得非常简单。
可以看这篇文章哈:再有人问你为什么MySQL用B+树做索引,就把这篇文章发给她
3. 聚集索引与非聚集索引的区别


磁盘上行的物理存储顺序差别。

聚簇索引的叶节点仍旧是索引节点,只不过有一个指针指向对应的数据块。

何时利用聚集索引或非聚集索引?


4. 怎样写sql可以或许有效的利用到复合索引

复合索引,也叫组合索引,用户可以在多个列上创建索引,这种索引叫做复合索引。
当我们创建一个组合索引的时间,如(k1,k2,k3),相称于创建了(k1)、(k1,k2)和(k1,k2,k3)三个索引,这就是
最左匹配原则。
  1. select * from table where k1=A AND k2=B AND k3=D
复制代码
有关于复合索引,我们需要关注查询Sql条件的顺序,确保最左匹配原则有效,同时可以删除不必要的冗余索
引。
5. Hash索引和B+树区别是什么?你在计划索引是怎么决议的?


法举行含糊查询。
6. 索引有哪些优缺点?

优点:

缺点:

7. 索引有哪几种类型?


8. 创建索引有什么原则呢?


9. 创建索引的三种方式

1:在执行CREATE TABLE时创建索引
  1. CREATE TABLE `employee` (
  2. `id` int(11) NOT NULL,
  3. `name` varchar(255) DEFAULT NULL,
  4. `age` int(11) DEFAULT NULL,
  5. `date` datetime DEFAULT NULL,
  6. `sex` int(1) DEFAULT NULL,
  7. PRIMARY KEY (`id`),
  8. KEY `idx_name` (`name`) USING BTREE
  9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
复制代码
2:利用ALTER TABLE命令添加索引
  1. ALTER TABLE table_name ADD INDEX index_name (column);
复制代码
3:利用CREATE INDEX命令创建
  1. CREATE INDEX index_name ON table_name (column);
复制代码
10. 百万级别或以上的数据,你是怎样删除的?


11. 什么是最左前缀原则?什么是最左匹配原则?


在最左边。

这就是最左匹配原则。。
12. B树和B+树的区别,数据库为什么利用B+树而不是B树?


放键和值。


查找,排序查找,分组查找以及去重查找变得非常简单。.

中页的默认大小是16KB,假如不存储数据,那么就会存储更多的键值,相应的树的阶数(节点的子节点
树)就会更大,树就会更矮更胖,云云一来我们查找数据举行磁盘的IO次数有会再次减少,数据查询
的效率也会更快.
13. 覆盖索引、回表等这些,相识过吗?


据,这种通过二级索引查询出来的过程,就叫做回表。
网上这篇文章讲得很清楚:mysql覆盖索引与回表
14. B+树在满意聚簇索引和覆盖索引的时间不需要回表查询数据?


是聚簇索引和非聚簇索引。 在InnoDB中,只有主键索引是聚簇索引,假如没有主键,则挑选一个唯一键
创建聚簇索引。假如没有唯一键,则隐式的天生一个键来创建聚簇索引。

15. 何时利用聚簇索引与非聚簇索引



16. 非聚簇索引肯定会回表查询吗?

不肯定,假如查询语句的字段全部掷中了索引,那么就不必再举行回表查询
(哈哈,覆盖索引就是这么回事)。
举个简单的例子,假设我们在门生表的上创建了索引,那么当举行select age from student where age <
20的查询时,在索引的叶子节点上,已经包含了age信息,不会再次举行回表查询。
17. 组合索引是什么?为什么需要注意组合索引中的顺序?

组合索引,用户可以在多个列上创建索引,这种索引叫做组合索引。
因为InnoDB引擎中的索引策略的最左原则,以是需要注意组合索引中的顺序。
18. 列值为NULL时,查询是否会用到索引?

列值为NULL也是可以走索引的
计划对列举行索引,应只管避免把它设置为可空,因为这会让 MySQL 难以优化引用了可空列的查询,同时增
加了引擎的复杂度
七、SQL优化

1. SQL优化的一般步骤是什么,怎么看执行计划(explain),怎样理解其中各个字段的含义。


(这点非常重要,日常开辟中用它分析Sql,会大大低落Sql导致的线上变乱)
看过这篇文章,觉得很不错:优化sql 语句的一般步骤
2. 假如某个表有近千万数据,CRUD比较慢,怎样优化

分库分表
某个表有近千万数据,可以思量优化表结构,分表(水平分表,垂直分表),当然,你如许答复,需要预备好
面试官问你的分库分表相关问题呀,如

索引优化
除了分库分表,优化表结构,当然尚有以是索引优化等方案~
有爱好可以看这篇文章哈~
后端程序员必备:誊写高质量SQL的30条建议
3. 说一下大表查询的优化方案

为了有好的查询效率,表结也要改动,做肯定的冗余,应用也要改,sql中只管带sharding key,将数
据定位到限定的表上去查,而不是扫描全部的表;
limit 1000000,10这种查询其实也是有可以优化的余地的. 这条语句需要load1000000数据然后根本上全
部丢弃,只取10条当然比较慢. 当时我们可以修改为select * from table where id in (select id from
table where age > 20 limit 1000000,10).如许虽然也load了一百万的数据,但是由于索引覆盖,要查询的
所有字段都在索引中,以是速度会很快. 同时假如ID连续的好,我们还可以select * from table where id >
1000000 limit 10,效率也是不错的,优化的可能性有很多种,但是核心思想都一样,就是减少load的数据.
看大概按照给定的蹊径走,
4. 关心过业务系统里面的sql耗时吗?统计过慢查询吗?对慢查询都怎么优化过?


优化慢查询:

有爱好可以看这篇文章哈~后端程序员必备:誊写高质量SQL的30条建议
5. 怎样优化长难的查询语句?有实战过吗?


6. 优化特定类型的查询语句

平时积累吧:

有爱好可以看这篇文章哈~后端程序员必备:誊写高质量SQL的30条建议
7. 谈谈MySQL的Explain

Explain 执行计划包含字段信息如下:分别是 id、select_type、table、partitions、type、possible_keys、
key、key_len、ref、rows、filtered、Extra 等12个字段。
我们重点关注的是type,它的属性排序如下:
system > const > eq_ref > ref > ref_or_null >
index_merge > unique_subquery > index_subquery >
range > index > ALL
推荐各人看这篇文章哈:面试官:不会看 Explain执行计划,简历敢写 SQL 优化?


八、锁问题

1. MySQL 遇到过死锁问题吗,你是怎样解决的?

我排查死锁的一般步骤是酱紫的:

可以看我这两篇文章哈:

2. 在高并发环境下,怎样做到安全的修改同一行数据?

要安全的修改同一行数据,就要包管一个线程在修改时别的线程无法更新这行记录。
一般有灰心锁和乐观锁两种方案~
利用灰心锁
灰心锁思想就是,当前线程要进来修改数据时,别的线程都得拒之门外~
比如,可以利用select…for update ~
  1. select * from User where name=‘jay’ for update
复制代码
以上这条sql语句会锁定了User表中所有符合检索条件(name=‘jay’)的记录。
本次事务提交之前,别的线程都无法修改这些记录。
利用乐观锁
乐观锁思想就是,有线程过来,先放过去修改,假如看到别的线程没修改过,就可以修改成功,假如别的线程
修改过,就修改失败大概重试。
实现方式:乐观锁一般会利用版本号机制或CAS算法实现。
可以看一下我这篇文章,主要是思路哈~
CAS乐观锁解决并发问题的一次实践
3. 数据库的乐观锁和灰心锁

灰心锁:
灰心锁她专一且缺乏安全感了,她的心只属于当前事务,时时候刻都担心着它心爱的数据可能被别的事务修
改,以是一个事务拥有(得到)灰心锁后,其他任何事务都不能对数据举行修改啦,只能等待锁被释放才可以
执行



乐观锁:
乐观锁的“乐观情绪”体如今,它以为数据的变更不会太频繁。因此,它允很多个事务同时对数据举行变更。
实现方式:乐观锁一般会利用版本号机制或CAS算法实现。


之前转载了的这篇文章,觉得作者写得挺具体的~
图文并茂的带你彻底理解灰心锁与乐观锁
4. select for update有什么含义,会锁表还是锁行还是其他。

select for update 含义
select查询语句是不会加锁的,但是select for update除了有查询的作用外,还会加锁呢,而且它是灰心锁
哦。
至于加了是行锁还是表锁,这就要看是不是用了索引/主键啦。
没用索引/主键的话就是表锁,否则就是是行锁。
select for update 加锁验证
表结构:
  1. //id 为主键,name为唯一索引
  2. CREATE TABLE `account` (
  3. `id` int(11) NOT NULL AUTO_INCREMENT,
  4. `name` varchar(255) DEFAULT NULL,
  5. `balance` int(11) DEFAULT NULL,
  6. PRIMARY KEY (`id`),
  7. KEY `idx_name` (`name`) USING BTREE
  8. ) ENGINE=InnoDB AUTO_INCREMENT=1570068 DEFAULT CHARSET=utf8
复制代码
id为主键,select for update 1270070这条记录时,再开一个事务对该记录更新,发现更新壅闭啦,其实是加
锁了。如下图:


我们再开一个事务对另外一条记录1270071更新,发现更新成功,因此,假如查询条件用了索引/主键,会加行
锁~


我们继续一路向北吧,换普通字段balance吧,发现又壅闭了。因此,没用索引/主键的话,select for update
加的就是表锁


5. Mysql中有哪几种锁,列举一下?



假如按锁粒度分别,有以下3种:

有爱好的小伙伴可以看我这篇文章,有先容到各种锁哈:后端程序员必备:mysql数据库相关流程图/原理图
6. 隔离级别与锁的关系

答复这个问题,可以先阐述四种隔离级别,再阐述它们的实现原理。隔离级别就是依赖锁和MVCC实现的。
可以看我这篇文章哈:一文彻底读懂MySQL事务的四大隔离级别
7. 按照锁的粒度分,数据库锁有哪些呢?锁机制与InnoDB锁算法




8. 从锁的类别角度讲,MySQL都有哪些锁呢?

从锁的类别上来讲,有共享锁和排他锁。

锁兼容性如下:


9. MySQL中InnoDB引擎的行锁是怎么实现的?

基于索引来完成行锁的。
  1. select * from t where id = 666 for update;
复制代码
for update 可以根据条件来完成行锁锁定,并且 id 是有索引键的列,假如 id 不是索引键那么InnoDB将实验
表锁。
10. 什么是死锁?怎么解决?

死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现象。
看图形象一点,如下:



死锁有四个必要条件:互斥条件,请求和保持条件,环路等待条件,不剥夺条件。
解决死锁思路,一般就是堵截环路,只管避免并发形成环路。

有爱好的朋友,可以看我的这篇死锁分析:
手把手教你分析Mysql死锁问题
select * from b , (select tid from a limit 50000,200) a where b.id = a .tid;
11. Mysql一条SQL加锁分析

一条SQL加锁,可以分9种环境举行:

九、事务

1. 事务的隔离级别有哪些?MySQL的默认隔离级别是什么?


Mysql默认的事务隔离级别是可重复读(Repeatable Read)
可以看我这篇文章哈:一文彻底读懂MySQL事务的四大隔离级别
2. 什么是幻读,脏读,不可重复读呢?


可以看我这篇文章哈:一文彻底读懂MySQL事务的四大隔离级别
3. MySQL事务得四大特性以及实现原理





事务ACID特性的实现思想

4. MVCC熟悉吗,它的底层原理?

MVCC,多版本并发控制,它是通过读取汗青版本的数据,来低落并发事务冲突,从而提高并发性能的一种机制。
MVCC需要关注这几个知识点:

可以看我这篇文章哈:[一文彻底读懂MySQL事务的四大隔离级别](
5. 什么是数据库事务?

数据库事务(简称:事务),是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操纵序列构成,这些操纵要么全部执行,
要么全部不执行,是一个不可分割的工作单位。
6. Innodb的事务实现原理?


7. Innodb的事务与日志的实现方式

有多少种日志
innodb两种日志redo和undo。
日志的存放情势

(fwrite),然后再同步到磁盘文件( fsync)。

innodb_undo_tablespaces 参数把 undo log 存放在 ibdata之外。
事务是怎样通过日志来实现的

页修改的 redo。 Redo(里面包括 undo 的修改) 肯定要比数据页先持久化到磁盘。

事务没有对应的 commit 记录,那么需要用 undo把该事务的修改回滚到事务开始之前。

十、SQL执行过程

1. 一条SQL语句在MySQL中怎样执行的?

先看一下Mysql的逻辑架构图吧~



查询语句:

这篇文章非常不错,各人去看一下吧:
一条SQL语句在MySQL中怎样执行的
2. 一条sql执行过长的时间,你怎样优化,从哪些方面入手?


3. 一条Sql的执行顺序?



十一、视图 & 游标 & 存储过程 & 存储函数 & 触发器等

1. 为什么要利用视图?什么是视图?

为什么要利用视图?
为了提高复杂SQL语句的复用性和表操纵的安全性,MySQL数据库管理系统提供了视图特性。
什么是视图?
视图是一个虚拟的表,是一个表中的数据经过某种筛选后的显示方式,视图由一个预界说的查询select语句组成。
2. 视图有哪些特点?哪些利用场景?

视图特点:

视图用途: 简化sql查询,提高开辟效率,兼容老的表结构。
视图的常见利用场景:

3. 视图的优点,缺点,讲一下?

4. 什么是游标?

游标提供了一种对从表中检索出的数据举行操纵的灵活手段,就本质而言,游标实际上是一种能从包括多条数
据记录的结果集中每次提取一条记录的机制。
5. 什么是存储过程?有哪些优缺点?

存储过程,就是一些编译好了的SQL语句,这些SQL语句代码像一个方法一样实现一些功能(对单表或多表的
增删改查),然后给这些代码块取一个名字,在用到这个功能的时间调用即可。
优点:

缺点:

6. 什么是触发器?触发器的利用场景有哪些?

触发器,指一段代码,当触发某个事件时,自动执行这些代码。
利用场景:

7. MySQL中都有哪些触发器?

MySQL 数据库中有六种触发器:

十二、分布式问题

1. 说说分库与分表的计划

分库分表方案,分库分表中间件,分库分表可能遇到的问题
分库分表方案:

常用的分库分表中间件:

分库分表可能遇到的问题

分别在各个节点上得到结果后在应用程序端举行合并。

个人觉得网上这两篇文章不错,小伙伴们可以去看一下哈:

2. 数据库中间件相识过吗,sharding jdbc,mycat?


Sharding-JDBC 是基于 JDBC 接口的扩展,是以 jar 包的情势提供轻量级服务的。
有网友推荐这篇文章:
深度认识Sharding-JDBC:做最轻量级的数据库中间层
3. MYSQL的主从耽误,你怎么解决?

嘻嘻,先复习一下主从复制原理吧,如图:


主从复制分了五个步骤举行:

有爱好可以看这篇文章哈~
后端程序员必备:mysql数据库相关流程图/原理图
主从同步耽误的原因
一个服务器开放N个链接给客户端来连接的,如许有会有大并发的更新操纵, 但是从服务器的里面读取binlog
的线程仅有一个,当某个SQL在从服务器上执行的时间稍长 大概由于某个SQL要举行锁表就会导致,主服务器
的SQL大量积存,未被同步到从服务器里。这就导致了主从不一致, 也就是主从耽误。
主从同步耽误的解决办法

可以看这篇文章哈~
MySQL 主从同步耽误的原因及解决办法
4. 读写分离常见方案?


5. MySQL的复制原理以及流程

主从复制原理,简言之,就三步曲,如下:

如下图所示:


上图主从复制分了五个步骤举行:
步骤一:主库的更新事件(update、insert、delete)被写到binlog
步骤二:从库发起连接,连接到主库。
步骤三:此时主库创建一个binlog dump thread,把binlog的内容发送到从库。
步骤四:从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log
步骤五:还会创建一个SQL线程,从relay log里面读取内容,从Exec_Master_Log_Pos位置开始执行读取到的
更新事件,将更新内容写入到slave的db
6. 你是否做过主从一致性校验,假如有,怎么做的,假如没有,你打算怎么做?

主从一致性校验有多种工具 例如checksum、mysqldiff、pt-table-checksum等
十三、生产实际问题

1. 日常工作中你是怎么优化SQL的?

可以从这几个维度答复这个问题:

有爱好可以看这篇文章哈~
后端程序员必备:誊写高质量SQL的30条建议
2. MySQL数据库cpu飙升的话,要怎么处理呢?

排查过程:

处理:

其他环境:
也有可能是每个 sql 斲丧资源并不多,但是突然之间,有大量的 session 连进来导致 cpu 飙升,这种环境就需
要跟应用一起来分析为何连接数会激增,再做出相应的调解,比如说限制连接数等
3. 500台db,在最快时间之内重启


4. 你是怎样监控你们的数据库的?你们的慢日志都是怎么查询的?

监控的工具有很多,例如zabbix,lepus,我这里用的是lepus

十四、别的问题

1. mysql中in和exists的区别

这个,跟一下demo来看更刺激吧,啊哈哈
假设表A表示某企业的员工表,表B表示部门表,查询所有部门的所有员工,很容易有以下SQL:
  1. select * from A where deptId in (select deptId from B);
复制代码
如许写等价于:
先查询部门表B
再由部门deptId,查询A的员工
  1. select deptId from B
复制代码
  1. select * from A where A.deptId = B.deptId
复制代码
可以抽象成如许的一个循环:
  1. List<> resultSet ;
  2. for(int i=0;i<B.length;i++) {
  3.     for(int j=0;j<A.length;j++) {
  4.         if(A[i].id==B[j].id) {
  5.             resultSet.add(A[i]);
  6.             break;
  7.         }
  8.     }
  9. }
复制代码
显然,除了利用in,我们也可以用exists实现一样的查询功能,如下:
  1. select * from A where exists (select 1 from B where A.deptId = B.deptId);
复制代码
因为exists查询的理解就是,先执行主查询,得到数据后,再放到子查询中做条件验证,根据验证结果(true
大概false),来决定主查询的数据结果是否自得保留。
那么,如许写就等价于:
select * from A,先从A表做循环
select * from B where A.deptId = B.deptId,再从B表做循环.
同理,可以抽象成如许一个循环:
  1. List<> resultSet ;
  2. for(int i=0;i<A.length;i++) {
  3.     for(int j=0;j<B.length;j++) {
  4.         if(A[i].deptId==B[j].deptId) {
  5.             resultSet.add(A[i]);
  6.             break;
  7.         }
  8.     }
  9. }
复制代码
数据库最费劲的就是跟程序链接释放。假设链接了两次,每次做上百万次的数据集查询,查完就走,如许就只
做了两次;相反创建了上百万次链接,申请链接释放反复重复,如许系统就受不了了。即mysql优化原则,就
是小表驱动大表,小的数据集驱动大的数据集,从而让性能更优。
因此,我们要选择最外层循环小的,也就是,假如B的数据量小于A,适合利用in,假如B的数据量大于A,即
适合选择exists,这就是in和exists的区别。
2. MYSQL数据库服务器性能分析的方法命令有哪些?

Show status, 一些值得监控的变量值:


3. 说一下数据库的三大范式


4. mysql有关权限的表有哪几个呢?

MySQL服务器通过权限表来控制用户对数据库的访问,权限表存放在mysql数据库里,由mysql_install_db脚
本初始化。
这些权限表分别user,db,table_priv,columns_priv和host。

这个权限表不受GRANT和REVOKE语句的影响。
5. 一个6亿的表a,一个3亿的表b,通过外间tid关联,你怎样最快的查询出满意条件的第50000到第50200中的这200条数据记录

1、假如A表TID是自增长,并且是连续的,B表的ID为索引
  1. select * from a,b where a.tid = b.id and a.tid>500000 limit 200;
复制代码
2、假如A表的TID不是连续的,那么就需要利用覆盖索引.TID要么是主键,要么是辅助索引,B表ID也需要有索引。
  1. select * from b , (select tid from a limit 50000,200) a where b.id = a .tid;
复制代码
6. count(1)、count(*) 与 count(列名) 的区别?


而是表示null)的计数,即某个字段值为NULL时,不统计。
7. 超键、候选键、主键、外键分别是什么?


8. SQL 约束有哪几种呢?


9. drop、delete与truncate的区别

delete
truncate
drop

类型
DML
DDL
DDL
回滚
可回滚
不可回滚
不可回滚
删除内容
表结构还在,删除表的全部大概一部门数据行
表结构还在,删除表中的所有数据
从数据库中删除表,所有的数据行,索引和权限也会被删除
删除速度
删除速度慢,逐行删除
删除速度快
删除速度最快
10. SQL的生命周期?


11. Mysql驱动程序是什么?

这个jar包: mysql-connector-java-5.1.18.jar
Mysql驱动程序主要资助编程语言与 MySQL服务端举行通信,如连接、传输数据、关闭等。
12. 什么是数据库连接池?为什么需要数据库连接池呢?

连接池根本原理:
数据库连接池原理:
在内部对象池中,维护肯定数量的数据库连接,并对外暴露数据库连接的获取和返回方法。
应用程序和数据库创建连接的过程:

数据库连接池好处:

有爱好可以看这篇文章哈~
数据库连接池内存泄漏问题的分析息争决方案

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4