前言:我坚信,机会永远属于有准备的人,我们与其羡慕他人的成功,不如从此刻起,积累足够多的知识和面试经验,为将来进入更好的公司做好充分的准备!
想让面试官在短短的几十分钟内认可你的能力?想在最短的时间内收获 PHP 技术栈最核心的知识点?想要更全面更深入的了解 PHP 技术?这篇文章给你想要的所有答案。
今天要说的是PHP面试之MySQL高频问题,话不多说,直接上
1.数据表类型有哪些?
MyISAM,InnoDB,HEAP,POP,CSV等等
2.MySQL有几种存储引擎?区别是什么?怎么选择?
MySQL中常用的储存引擎有两个:myISAM与innoDB
区别:myISAM不支持事务,innoDB支持事务;MyISAM支持表锁,InnoDB支持行锁;MyISAM的表在磁盘中由三个文件组成,表定义文件(.frm),数据文件(.MYD),索引文件(.MYI),InnoDB的表由表定义文件(.frm),表空间数据,日志文件索引组成。
选择:查询较多的时候选择MyISAM,写较多的时候选择InnoDB。
3.一条SQL语句包括几部分?操作关键字是什么?
4部分。数据定义(DDL),数据操作(DML),数据控制(DCL),数据查询(DQL)
数据定义关键字:create table,alert table,drop table,create/drop index
数据操作关键字:select,update,insert.delete
数据控制关键字:grant,revoke
数据查询关键字:select
4.什么是事务?
事务是一组SQL语句的集合。事务的特性有:原子性,一致性,隔离性,持久性
5.说说事务的隔离级别?
读未提交,读已提交,可重复读,串行
当事务处于‘读未提交’隔离级别时,会出现‘脏读’,‘幻读’,‘不可重读’
脏读:当前事务可以查看到其他事务未提交的数据
幻读:侧重于新增,删除。在同一事务中,两次的查询结果不一致,多了或少了部分数据。
不可重读:侧重于更新。同一事务中,两次的数据资源改变了。
6.关于索引?索引的类型?
索引就是一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的查询。
类型:普通索引,唯一索引,主键索引,组合索引,全文索引
7.索引在什么情况下会失效?
8.怎么分析你的sql语句的性能?
使用explain将sql语句执行的信息打印出来,在里面查看索引使用情况等
9.一张表中,索引是不是越多越好?为什么?
当然不是,简历索引会减慢数据录入速度,也会增加数据库的尺寸大小
10.数据库中char与varchar的差别?
Char固定长度,varchar可变长度
11.你知道视图嘛?游标呢?
视图是一种虚拟的表,具有与物理表相同的功能。视图一般是一个表或者多个表的行或者列的子集。对视图的修改不影响基本表
游标是对查询出来的结果集作为一个整体的单元来处理。当需要逐条处理数据的时候,经常会用到游标。
12.关于数据库锁,你知道哪些?
锁就是为了防止出现多个操作同时对同一个资源修改导致数据不一致出现的。基本锁有行级锁,表级锁。
13.说说悲观锁与乐观锁
悲观锁与乐观锁是处理并发情况的一种思想。
悲观锁总认为在执行的时候会发生并发冲突,所以在数据处理过程中,总是先把数据锁定。MySQL的排他锁就是悲观锁
而乐观锁认为一般情况下不会发生并发冲突,只有提交数据时,才去判断是由有冲突,如果有冲突,则把信息返回给用户,让用户自己决定该做什么处理。
14.有没有分表分库的经历?怎么去处理大数据量的?
分表有垂直分表与水平分表。
水平分表主要解决单个表数据量过大问题
垂直分表主要解决单表列过多问题
分库:面对高并发的读写访问,当数据库master服务器无法承载写操作压力时,不管如何扩展slave服务器,此时都没有意义。此时,则需要通过数据分库策略,提高数据库并发访问能力。
15.如何优化你的sql?
16.如何设计一个高并发系统?
数据库的优化,包括合理的事务隔离级别、SQL语句优化、索引的优化
使用缓存,尽量减少数据库 IO
分布式数据库、分布式缓存
服务器的负载均衡