数据库的三范式是什么
范式 | 简介 |
---|---|
第一范式 | 数据库的每个字段(每一列)不可拆分,具有原子行 |
第二范式 | 满足第一范式,非主键字段必须依赖主键 |
第三范式 | 满足第二范式,非主键字段只能依赖主键 |
一张表里面有7条数据,删除最后两条数据,重启mysql,再插入一条数据,该数据id是多少?
数据库表类型 | id值 | 原因 |
---|---|---|
MyIASM | 8 | 该类型会持久化最大id |
InnoDB | 5 | 该类型不会持久化最大id,只会在内存中保存 |
如何获取当前数据库版本
select version();
说一下ACID是什么
事务须遵循的特性 | 简介 |
---|---|
Atomicity:原子性 | 事务中的所有操作,要么全部成功,要么全部失败,并且失败后要能够恢复原始状态,就像没发生过一样 |
Consistency: 一致性 | 事务的操作符合所有约束,不会破坏数据库一致性、完整性 |
isolation: 隔离性 | 防止多个事务同时执行导致数据异常问题 |
Durability: 持久性 | 事务处理结束后,对数据的修改是永久的 |
char、varchar区别
char | varchar | |
---|---|---|
长度是否固定 | 是 | 否 |
核心差别 | 效率高 | 空间利用率高 |
使用场景 | 数据长度短,处理效率要求高 | 数据长度长 |
float、double区别
float | 占4个字节,最多表示8位十进制数 |
double | 占8个字节,最多表示16位十进制数 |
mysql内连接、左连接、右连接区别
内连接 | 交集 |
左连接 | 以左表为基础,右表没有的会以null为结果 |
右连接 | 以右表为基础,左表没有的会以null为结果 |
mysql索引如何实现
索引定义 | 满足某种特定查找算法的数据结构,索引会指向特定数据,已实现高效查询 |
实现原理 | 目前主流数据库引擎都采用B+树实现,性能与二分法类似 |
怎么验证mysql的索引可以满足需求
使用explain语句查看sql执行select的过程,来判断是否满足需求
说一下数据库的事务隔离
事务隔离作用
事务隔离意义 | 解决事务并发异常 |
事务并发异常 | 1、脏写:多个事务写同一条数据,然后部分提交,部分回滚,导致提交的也无法生效,即脏写 2、脏读:事务A读取到了事务B未提交数据,事务B选择了回滚,此时事务A脏读 3、不可重复读:事务A多次读取同一条数据,此时事务B更新了该条数据,倒是事务A多次读取数据不一致,出现不可重复读问题 4、幻读:事务A多次查表,事务B同时进行了增删操作,导致事务A多次查询结果不一致,出现幻读 |
事务隔离四种配置
事务隔离配置值 | 级别 | 特点 | 解决问题 |
---|---|---|---|
未提交读(READ-UNCOMMITTED) | 最低级别 | 事务未提交可互相读,不允许同时写同一条数据 | 仅解决脏写 |
提交读(READ-COMMITTED) | 比最低高一个级别 | 事务提交后才可以被其他事务读取 | 仅解决脏写、脏读 |
可重复读(REPEATABLE-TABLE) | 默认级别 | 只要多次读取的数据一致即可 | 解决脏写、脏读、可重复读 |
序列化(SERIALIZABLE) | 最高级别 | 完全顺序执行 | 由于是串行,所以不存在并发的任何问题 |
mysql常用引擎
引擎 | 简介 |
---|---|
InnoDB | 1、支持数据库ACID事务,提供行级锁、外键约束 2、内存中的缓存池会缓存数据和索引 3、不支持全文搜索,启动慢,不保存行数,select count需要扫描全表 4、提供行级锁,锁粒度小,写操作不会锁全表,适合高并发场景 |
MyIASM | 1、MySQL默认引擎,不支持事务,不支持行级锁、外键,写操作需要锁全表,效率较低 2、保存表行数,select count不需要扫描全表 3、读操作多于写操作,并且不需要事务支持,适合MyIASM |
说一下mysql的行锁和表锁
行锁 | 表锁 | |
---|---|---|
引擎支持情况 | InnoDB支持行锁,MyIASM不支持行锁 | 两个引擎都支持 |
开销 | 大 | 小 |
加锁速度 | 慢 | 快 |
是否会出现死锁 | 会 | 不会 |
锁定粒度 | 小 | 大 |
锁冲突概率 | 低 | 高 |
并发量 | 高 | 低 |
说一下乐观锁、悲观锁
锁类型 | 简介 |
---|---|
乐观锁 | 乐观锁认为读过程中数据不会被修改,所以读不上锁,写上锁,该锁需要自己实现 |
悲观锁 | 悲观的认为读写过程中数据均有可能被修改,所以读写均上锁 |
mysql排查问题有哪些手段
1、show processlist查看所有连接信息
2、explain查看语句执行过程
3、开启慢查询日志,查看慢查询sql
如何做mysql的性能优化
1、为搜索字段创建索引
2、避免使用select *,列出所需查询的字段
3、垂直分割表
4、选择正确的引擎