1 Star 0 Fork 31

moyu3390 / Ebooks_1

forked from Java精选 / Ebooks 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
常见的MySQL面试题,100道经典面试题及答案.md 8.52 KB
一键复制 编辑 原始数据 按行查看 历史

常见的MySQL面试题,100道经典面试题及答案

全部面试题答案,更新日期:01月30日,直接下载吧!

下载链接:高清500+份面试题资料及电子书,累计 10000+ 页大厂面试题 PDF

MySQL

题1:MySQL 中 InnoDB 引擎 4大特性,了解过吗?

插入缓冲(insert buffer)

二次写(double write)

自适应哈希索引(ahi)

预读(read ahead)

题2:表分区与分表有什么区别?

分表: 指的是通过一定规则,将一张表分解成多张不同的表。比如将用户订单记录根据时间成多个表。

分表与分区的区别在于:分区从逻辑上来讲只有一张表,而分表则是将一张表分解成多张表。

题3:MySQL 中什么是联合索引?

1、联合索引是两个或更多个列上的索引。

对于联合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。

例如索引是key index(a,b,c),可以支持a 、a,b 、a,b,c 3种组合进行查找,但不支持b,c进行查找,当最左侧字段是常量引用时,索引就十分有效。

2、利用索引中的附加列,可以缩小搜索的范围,但使用一个具有两列的索引不同于使用两个单独的索引。

复合索引的结构与电话簿类似,人名由姓和名构成,电话簿首先按姓氏对进行排序,然后按名字对有相同姓氏的人进行排序。

如果知道姓,电话簿将非常有用;如果知道姓和名,电话簿则更为有用,但如果只知道名不知道姓,电话簿将没有用处。

题4:在高并发情况下,如何做到安全的修改同一行数据?

要安全的修改同一行数据,就要保证一个线程在修改时其它线程无法更新这行记录。一般有悲观锁和乐观锁两种方案。

使用悲观锁

悲观锁思想是当前线程要进来修改数据时,别的线程都得拒之门外,比如可以使用如下SQL语句。

select * from jingxuan where id=736 for update

以上这条sql语句会锁定了User表中所有符合检索条件(id=736)的记录。本次事务提交之前,别的线程都无法修改这些记录。

使用乐观锁

乐观锁思想是有线程过来,先放过去修改,如果看到别的线程没修改过,就可以修改成功,如果别的线程修改过,就修改失败或者重试。

实现方式:乐观锁一般会使用版本号机制或CAS算法实现。

题5:什么是存储过程?如何调用?

存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。

可以用一个命令对象来调用存储过程。

题6:MySQL 中如何有效的删除一个大表?

1、复制表结构,切勿复制数据。

2、创建硬链接减少mysql DDL时间,加快锁释放。

如果不知道的存储位置,可使用show variables like "datadir";命令查看数据存储位置。

ln jingxuan.frm jingxuan.frm.bak
ln jingxuan.ibd jingxuan.ibd.bak

3、删除指定的表

DROP TABLE "表格名"; 2G的数据量,删除只用了大概3秒左右。

4、修改表名删除的表名

将复制的表,表名修改为删除的表名即可。

5、删除物理文件,使用truncate分段删除文件,避免IO hang。

切记物理文件不可直接删除,直接操作会导致磁盘IO和CPU利用率升高,使用truncate来进行删除操作。

truncate -s 2G jingxuan.ibd.bak

题7:数据库中什么是事务?

事务(transaction)是指数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操作集合(工作逻辑单元)。

通俗的说就是事务可以作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。

题8:B+树在满足聚簇索引和覆盖索引的时候不需要回表查询数据?

在B+树的索引中,叶子节点可能存储了当前的key值,也可能存储了当前的key值以及整行的数据,这就是聚簇索引和非聚簇索引。在InnoDB中,只有主键索引是聚簇索引,如果没有主键,则挑选一个唯一键建立聚簇索引。如果没有唯一键,则隐式的生成一个键来建立聚簇索引。

当查询使用聚簇索引时,在对应的叶子节点,可以获取到整行数据,因此不用再次进行回表查询。

题9:MySQL 中 BLOB 和 TEXT 有什么区别?

BLOB是一个二进制对象,可以容纳可变数量的数据。TEXT是一个不区分大小写的BLOB。

BLOB和TEXT类型之间的唯一区别在于对BLOB值进行排序和比较时区分大小写,对TEXT值不区分大小写。

题10:MySQL 事务都有哪些特性?

事务的四大特性:

1 、原子性

事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做

2 、一致性

事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统 运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是 不一致的状态。

3 、隔离性

一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。

4 、持续性

也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。

题11:说说对-sql-语句优化有哪些方法

题12:非聚簇索引一定会回表查询吗

题13:sql-注入漏洞是什么原因造成的如何防止

题14:mysql-中-myisam-和-innodb-的区别有哪些

题15:什么是锁

题16:mysql_fetch_array-和-mysql_fetch_object有什么区别

题17:mysql-中主键使用自增-id-还是-uuid

题18:mysql支持哪些分区类型

题19:mysql-调优数据库都有哪些方法

题20:业务实践中如何优化-mysql

题21:mysql-中有哪几种隔离级别

题22:视图常见使用场景有哪些

题23:mysql-的索引有哪些设计原则

题24:在什么情况下应少创建或不创建索引

题25:mysql-中-text-数据类型的最大长度

大厂面试题

大厂面试题

大厂面试题

Java
1
https://gitee.com/moyu3390/ebooks_1.git
git@gitee.com:moyu3390/ebooks_1.git
moyu3390
ebooks_1
Ebooks_1
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891