面试必问!10 道经典 MySQL 面试题

1 . DROP、DELETE与TRUNCATE的区别
相同点:三者删除数据,TRUNCATE和DELETE保留表结构,DROP删除表结构及依赖对象。

不同点:TRUNCATE重置自增ID,DROP释放全部空间,DELETE不释放空间,DROP>TRUNCATE>DELETE速度,DELETE可回滚,DROP/TRUNCATE不可回滚。

使用场景:DELETE(部分数据),TRUNCATE(快速清空),DROP(删除整表)。

2 . 记录货币用什么字段类型?
DECIMAL或NUMERIC,避免浮点精度问题。

3 . MyISAM与InnoDB的区别
事务支持:InnoDB支持,MyISAM不支持。

锁粒度:InnoDB行级锁,MyISAM表级锁。

并发性能:InnoDB高并发,MyISAM易锁表。

外键与约束:InnoDB支持,MyISAM不支持。

索引类型:MyISAM全文索引,InnoDB5 .6 +支持。

表复制:MyISAM直接拷贝,InnoDB需导出/导入。

存储结构:InnoDB索引组织表,MyISAM堆表。

4 . 事务的四个特性(ACID)及含义
原子性:操作全部成功或全部回滚。

一致性:完整性约束不被破坏。

隔离性:并发事务互不干扰。

持久性:提交后修改永久保存。

5 . MySQL的特点
轻量级:安装简单,资源占用少。

跨平台:支持多种操作系统。

高性能:优化查询,支持索引和缓存。

开源免费:社区版免费,企业版额外功能。

生态丰富:与PHP等语言集成良好。

6 . 视图的作用及可修改性
作用:简化SQL,限制访问权限,保证逻辑独立性。

可修改性:简单视图可修改,复杂视图通常不可。

7 . 存储过程与触发器的区别
触发条件:存储过程显式调用,触发器隐式触发。

用途:存储过程封装业务逻辑,触发器强制数据完整性。

执行方式:存储过程返回结果集,触发器执行SQL语句。

8 . 索引的作用、优缺点
作用:加速数据检索,类似书籍目录。

优点:提升查询速度,加速表连接。

缺点:占用空间,降低写入性能,可能导致碎片化。

9 . UNION与UNIONALL的区别
结果处理:UNION去重,UNIONALL保留重复行。

使用场景:UNION去重,UNIONALL无需去重。

1 0. SQL语言的组成部分及操作关键字
DDL:CREATE TABLE, ALTER TABLE, DROP TABLE, CREATE INDEX。

DML:SELECT, INSERT, UPDATE, DELETE。

DCL:GRANT, REVOKE。

DQL:SELECT(专指查询)。

我以为自己MySQL够牛逼了,直到看到了Alibaba的面试题

说实话,Alibaba那边的MySQL面试题确实挺硬核的。
他们考的东西特别细,你得分知道门道。

比如ACID这四点,得会举例。
就说原子性,比如A给B转钱,中间程序崩了,A的钱不能扣。
一致性也重要,转完钱,A+B的钱总数不变。
隔离性呢,A查账的时候,B不能同时给A转账。
持久性最简单,就是提交了就不能变,哪怕死机重启,数据还在。

隔离级别这东西,得知道ReadUncommitted为啥脏读,Non-repeatableRead和PhantomRead怎么来的。
比如A第一次查到5 行,B加一行提交了,A再查就变6 行了。
默认的可重复读(RepeatableRead)其实用MVCC避免了脏读和不可重复读,但可能还是幻读。

存储引擎这块,InnoDB支持事务,行锁,外键,适合订单这种高并发写场景。
MyISAM不行事务,表锁,但查快,适合日志这种读多写少。
MEMORY直接放内存,很快,但重启数据没了,适合临时表。

索引也分好几种。
B+Tree适合范围查,比如按年龄查。
Hash就等于号,WHERE id=1 00这种。
InnoDB主键是聚集索引,数据跟着索引走。
MyISAM的非聚集索引,数据跟索引分开。

优化的话,得知道为啥不能SELECT ,因为字段多。
用LIMIT 1 查第一个就行。
大表拆分也很关键,比如拆字段,拆表。
innodb_buffer_pool_size要调好,比如占内存5 0%-7 0%。
慢查询日志(slow_query_log)一定要开,能找到慢点在哪。

总之,这些题考的不是你会不会写SQL,而是懂不懂底层的玩意儿。
比如锁怎么玩的,索引怎么用,事务怎么隔离。
知道这些,才能把数据库搞快,搞稳。