5.1 KiB
- 什么是关系型数据库
存储了数据之间的联系
- MySQL 优点
社区,成熟,开源免费,事务分库分表功能完善
- MySQL 字段类型
- char 和 varchar 的区别
char 是定长,长度不可变,占用长度固定,空白处填充空格,varchar 长度可变,但是需要额外 1 个或两个记录长度
- decimal 和 float/double 的区别
decimal 是定点数,可存储精确小数位,float 是浮点数,只能存储近似精度的
- 为什么不推荐 text 和 blob
text 可存储不限长度的数据,blob 存储二进制对象, 都不能有默认值,text 检索效率低,需要指定前缀长度,影响 IO 带宽
- datetime 和 timestamp 的区别
datetime 没有时区信息,占 8 个字节,timestamp 与时区有关,占 4 个字节
- NULL 和‘’的区别
NULL 代表一个不确定的值,都是 NULL 也不一定相等,聚合函数会忽略 NULL 值 ‘’长度为 0,不占用空间,NULL 占空间,需要用 IS NULL 或 IS NOT NULL 判断
- 基础架构/查询过程
- 连接器
- 查询缓存
- 分析器
- 优化器
- 执行器
- 插件式存储引擎
- 支持的存储引擎,默认使用哪个
InnoDB 式默认存储引擎,只有 InnoDB 支持事务
- 存储引擎架构
插件式架构,存储引擎基于表,而不是数据库
- MyISAM 和 InnoDB 区别,如何选择
MyISAM 不支持事务和行级锁,崩溃后无法安全恢复,不支持外键,不支持 MMVC,索引与数据分离
-
查询缓存
查询时会先查询缓存,在同样的查询条件和数据情况下,会直接命中缓存返回结果 不命中情况:
- 查询在任何字符上的不同
- 查询中包含用户自定义函数,存储函数,用户变量,临时表,MySQL 中的系统表
- 如果这个表的数据发生变化
-
日志
-
MySQL 中的常见日志有哪些
-
慢查询日志有什么用
-
binlog 主要记录了什么
-
redolog 如何保证事务的持久性
-
页修改之后为什么不直接刷盘
-
binlog 和 redolog 有什么区别
-
undolog 如何保证事务的原子性
-
事务
-
什么是事务
逻辑上的一组操作,要么都执行,要么都不执行
-
数据库事务
要么全部执行成功,要么全部不执行
- 原子性
- 一致性
- 隔离性
- 持久性
-
并发事务带来的问题
- 脏读
- 丢失修改
- 不可重复读
- 幻读
-
不可重复读和幻读的区别
不可重复读是多次读取数据值被修改 幻读,可以看作是不可重复读的特殊情况,查询记录条数不一致
-
并发事务的控制方式
- 锁 通过读写锁来实现并发控制
- MVCC 多版本并发控制,对一份数据存储多个变笨,通过事务的可见性办证事务看到自己该刊的版本,主要依赖手段:隐藏字段,read view,undo log
- 事务隔离级别
- 读未提交
- 读已提交
- 可重复读
- 可串行化
-
MySQL 隔离级别基于锁实行的吗
SERIALZABLE 是通过锁。READ-COMMIT 和 REPEATABLE-READ 通过 MVCC 实现
-
默认隔离级别
可重复读
-
-
MySQL 锁
-
表锁和行锁
表锁是粒度最大的锁,针对非索引字段加的锁,简单,资源消耗小,不会死锁 行锁,粒度最小的锁,针对索引字段加的锁,减少数据库操作的冲突,开销大,枷锁慢,会死锁
-
行级锁的使用
执行更新的语句时,WHERE 条件中没有命中唯一索引或索引失效会导致表锁
-
InnoDB 有哪几类行锁
-
记录锁:单个行记录上的锁
-
间隙锁:锁定一个范围,不包括记录本身
-
临键锁:记录锁+间隙锁,解决幻读问题
默认使用临键锁,操作的索引是唯一索引或主键会降级为记录锁
- 共享锁和排他锁
- 共享锁
- 排他锁 因为 MVCC,一般 SELECT 语句不会加锁,通过 LOCK IN SHARE MODE 和 FOR SHARE 或 FOR UPDATE 加锁
-
意向锁的作用
通过意向锁快速判断是否可以对某个表使用表锁
- 意向共享锁
- 意向排他锁 意向锁是数据引擎自己维护的,意向锁之间兼容,意向锁和共享锁和排他锁互斥
-
当前读和快照读的区别
快照读是单纯的 select 语句,不包括加锁的语句,不会等待记录上的锁释放而是读取行的一个快照 当前读就是给记录加锁
-
自增锁
插入有自增列的表时,会先获取自增锁,拿不到会阻塞
-
-
性能优化
-
能直接存储文件吗
可以但是不建议
-
如何存储 IP 地址
将 IP 转为整型
INET_ATON():将 ip 转为无符号整型INET_NTOA():把整型的 ip 转为地址 -
常见 SQL 优化手段
-
分析 SQL 的性能
使用
EXPLAIN命令区分析 SQL 执行计划 -
读写分离
-
分库分表
-
-
redolog 和 undolog
-
两阶段提交(redo 和 binlog 一致性)
-
binlog 作用
-
异步复制和同步复制
