1. 对 MySQL 的架构了解吗?
MySQL 主要分为连接层,服务层,引擎层和存储层。
- 连接层就是提供连接服务的,比如 JDBC 驱动;
- 服务层包括连接池、SQL 接口、解析器、优化器等;
- 引擎层就是真正负责数据读写的,innoDB 就属于引擎层;
- 存储层就负责将数据存储到文件系统。
2. MySQL 有哪些存储引擎?有什么区别?
常见的有 InnoDB 和 MyISAM。
- InnoDB 支持行锁,表锁,事务,使用聚簇索引,写数据的效率比 MyISAM 更高。它有四个特性,插入缓冲,双写,自适应哈希,预读。插入缓冲就是插入数据之前会检查缓冲中有没有,没有的话会先插入到缓冲中,有的话就会以一定的频率将缓冲和索引页合并;双写就是数据写到磁盘前会先写到缓存中,保证数据的可靠性;自适应哈希就是存储引擎会监控索引页的查询,如果发现用 Hash 索引会提升性能,就会自动建立 Hash 索引;预读就是 InnoDB 会用算法预测用户下次要读取的数据,提前加载到缓存池中,提升性能。
- MyISAM 只支持表锁,不支持事务,使用非聚簇索引,查询的效率比 InnoDB 更高。
3. SQL 分为哪几类?
- DDL:数据定义语言,比如 create、drop、alter、truncate;
- DQL:数据查询语言,比如 select;
- DML:数据操纵语言,比如 insert、update、delete;
- DCL:数据控制语言,比如 grant、revoke(删除权限)、commit、rollback。
4. 删除数据有哪几种方式,有什么区别?
drop、truncate、delete 都可以删除数据。
- drop 会删除表结构,不能回滚,效率最高;
- truncate 删除所有数据,不会删除表结构,不能回滚,效率次之;
- delete 删除部分或所有数据,不会删除表结构,可以回滚,效率最差。
5. 对 MySQL 的三大范式了解吗?
- 第一范式就是每一列都不能再拆分;
- 第二范式就是在第一范式的基础上,非主键列都完全依赖主键;
- 第三范式就是在第二范式的基础上,任意两个非主键列不能有依赖,确保非主键列都直接和主键列相关,而不是间接相关。
6. 数据库有哪些并发问题?
- 脏读:一个事务读取到了别的事务未提交的数据;
- 写丢失:事务 A 和事务 B 同时读取到 age 为 18,然后事务 A 将其改成 20,接着事务 B 将其改成 16,最后数据库中的是 16,事务 A 的修改就丢失了;
- 不可重复读:一个事务对同一条数据多次读取的结果不一样,可能是在此期间别的事务修改过;
- 幻读:一个事务内,两次查询出来的记录条数不一样,就像发生了幻觉一样。
7. 数据库事务有什么特性?
数据库事务有四大特性,ACID:
- 原子性(A):一组操作不能再切分,要么全部成功,要么全部失败。它的原理是在 undo log 中记录相反的操作,如果事务回滚了,就根据 undo log 执行相反的操作;
- 一致性(C):一个事务对数据修改的中间状态对别的事务不可见。比如转账操作,A 账户减少 100 元,B 账户又还没增加 100 元的这个中间状态对外是不可见的;
- 隔离性(I):事务之间相互隔离,一个事务不会被其他事务干扰;
- 持久性(D):事务对数据库所做的操作是永久有效的。
8. 数据库事务有哪些隔离级别?
- 读未提交:一个事务可以读取到别的事务未提交的数据;
- 读已提交:一个事务只能读取别的事务已经提交的数据,可防止脏读;
- 可重复读:一个事务内对同一条记录多次读取的结果一致,InnoDB 默认的隔离级别,可防止脏读和不可重复读;
- 可串行化:事务串行执行,可以防止脏读、不可重复读和幻读。
9. MySQL 有哪几种锁?
MyISAM 只支持表锁,InnoDB 支持表锁和行锁,BDB 支持表锁和页锁。
- 行锁:锁定被操作的行,其他行不受影响,并发性好,加锁开销大;
- 表锁:锁定被操作的表,表中所有数据都受影响,并发性不好,加锁开销小;
- 页锁:锁定一个数据页,其他页不受影响,并发性和加锁开销介于行锁和表锁之间。
10. InnoDB 的行锁算法有哪几种?
- Record Lock:锁定一条记录;
- Gap Lock:间隙锁,锁定一个范围,但是不包含记录本身,为了防止幻读;
- Next-key Lock:锁定一个范围,且包含记录本身,也可防止幻读。当查询索引含有唯一属性时,Next-key Lock 会变为 Record Lock。
网友评论