知识点补充-数据库MySQL

数据库的事务特性?(四个)
原子性、一致性、隔离性、持久性

MySQL的事物并发问题
脏读、不可重复读、幻读

MySQL事物隔离级别
读未提交、读已提交、可重复读、可串行化

什么是MVCC?怎么解决并发一致性问题
多版本并发控制,创建版本号和删除版本号(创建数据行的快照时的系统版本号)
可重复读下,对数据行修改事务T1,读取的数据行快照的创建版本号 < 事务T的版本号(比较)
读取的数据行快照的删除版本号 > 事务T的版本号 否则表示这行数据已被删除

MVCC解决了哪两种隔离级别?
提交读 和 可重复读

如何解决幻读问题?(在X隔离级别使用XX和XX)
可重复读隔离级别 + Next-key locks
Next-key Lock: {
1.record lock (锁一个记录上的索引,而不是记录本身,没有索引自动在主键上创建聚簇索引)
2.gap lock (锁定索引之间的间隙,但不包括索引本身)
}

间隙锁锁的是哪些范围?什么操作导致间隙锁
//todo

快照读和当前读的区别?
select XXX 进行快照读 从undo log中快照获取
select XX for update 加锁保证拿取最新的数据
每条记录更新同时记录一条回滚记录(回滚操作记录undo log)

数据库三范式?
第一范式:表中所有属性为最小原子属性,不可在分割 不能表中嵌套表
第二范式:属性对主键不存在部分函数依赖(学号、姓名、性别、年龄、课程号、分数)主键[学号、课程号]
第三范式:属性对主键不存在传递函数依赖(学号、姓名、学院、院长)主键[学号]
如何解决第二、第三?(看业务场景使用不同的范式)

undo日志用来干嘛?binlog日志?redo日志?
mvcc使用undo log来实现快照 保存事务发生之前数据的快照版本,可以回滚
redo log innoDB引擎层日志(重做日志文件):记录事务操作变化后数据修改之后的值,不管事务是否提交都会记录。万一DB宕机异常启动,使用redo log恢复数据。
bin log是二进制文件,MySQL主从复制中,从库用主库的bin log进行复制
(bin log只记录对数据的修改操作,用于主从复制、增量恢复)

InnoDB是如何实现事务?
InnoDB实现事务 -> ACID:使用这三个日志 + 锁(排他锁/共享锁)
原子性:undo log(回滚日志):记录数据修改前的状态,万一回滚恢复之前的状态
一致性:redo log(重做日志):记录数据修改后的状态
隔离性:锁(行级锁、表锁),可分共享锁、排他锁
持久性:undo log(回滚日志) + redo log(重做日志)

binlog文件是什么?存储的数据形式有哪些?有什么优缺?
bin log(二进制日志文件),只记录对数据的修改操作,主要是主从复制和增量恢复
MySQL binlog日志三种格式?
1.Statement:每一条会修改的SQL都会记录到binlog中
(优点:减少日志量 - 缺点:主从复制中,带有特定函数的SQL,从库执行可能出现不一致问题)
2.Row:不记录SQL语句上下文信息,仅保存哪条记录被修改成什么样
(优点:不需要记录SQL的上下文信息,以每行记录的修改来记录,解决SQL带有特定函数的问题
缺点:biglog日志量大(update多条,每一条修改都会记录))
3.Mixedlevel:以上两种levl混合使用
[一般语句的修改使用Statement格式保存,一些函数无法则使用Row格式]
会根据每一条具体的SQL语句来区分记录的日志形式

MySQL主从复制怎么实现?
bin log线程 io线程 sql线程
1.bin log dump线程将主服务器上的数据更改写入二进制文件(Binary log)
2.io线程负责从主服务器中读取bin log,并写入从服务器的中继日志(Relay log)
3.sql线程读取中继日志,解析主服务器已执行的数据修改,并在从服务器进行重放(Relay)

MySQL的crash-safe怎么实现的??
三个日志+WAL+2PC
https://cloud.tencent.com/developer/article/1631999

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值