2020-12-09

21 篇文章 0 订阅

12/9
十二月以来我就没写过博客了,这是十二月的第一篇博客。
先总结一下十二月初的学习吧。
首先这段时间的学习内容主要放在了SQL上面,包括了数据库的建模设计和mysql的学习。
Mysql学的是《深入浅出Mysql》这本书。以下内容全是个人学习笔记,一切请以书本为准。
Mysql是一个关系型的数据库管理系统。什么是关系型,就是两个实体之间有一定的标识联系,比如存在着这么两个实体:学生和课表。一个学生可以选多门课,一门课可以被多个学生选,同时我们规定一个学生必须要学一门课以上,一门课里面必须要有至少一个学生选了不然不开课。
在数据库基础设计上,这种关系叫做多对多(N:M),同时最小粒度为1,在鸦脚模型里面,两个都是用一个竖线和一个鸦脚链接表示。
还有相应的强实体,弱实体的知识,非ID依赖和ID依赖的虚线实线区别。
除此之外,还有三大范式:
1NF每一列都保持原子性不可拆分
2NF所有属性完全依赖于主键或者依赖于主键的某一部分
3NF属性不能依赖于非主键的属性
BCNF符合以上范式的基础上,每一个决定因素(通过写出函数依赖)都必须要是候选键

将表转换为BCNF范式的步骤:
首先是识别每一个函数依赖
再次识别每一个候选关键字(决定关系中所有其他列的决定因素)
然后判断:
如果存在某个决定因素不是候选关键字,那么:
A将这个函数依赖中所有的列移入到一个新的关系中
B让决定因素成为新关系的主关键字
C将决定因素保留在原关系中使其成为外键
D在新关系和原关系中创建参照完整性约束
最后重复第三部的判断,直到每一个关系上的决定因素都是候选关键字
以上就是目前数据库设计的所学到的知识。
Mysql的学习主要是innodb的锁机制
可以参考这个网址学习

https://www.cnblogs.com/michael9/p/12443975.html

这方面感觉永远都学不够
首先行锁有两类:共享锁(lock in share mode)和排他锁(for update)
除此之外,还有意向共享锁(IS)和意向排它锁(IX),这两个都是表级别的锁。
innodb加锁的特性是往索引项加锁,如果没有索引,就会变成表锁,所以,与其说innodb是行锁,不如说是索引锁,在访问不同行记录的时候,如果是使用了相同的索引键,是会引起锁冲突问题的(P333)。
说到索引,innodb的索引是B树的数据结构,B树不代表二叉树(binary)而是平衡树(balanced),B树索引并不是一个二叉树。(P273)
最左匹配原则是Mysql中B树索引使用的首要原则(也就是innodb引擎使用的首要原则)。
在以下的情况下是不会使用到索引的:
1.以%开头的LIKE查询
2.数据类型出现了隐式转换的时候(特别列类型是字符串的时候)
3.不满足最左原则的时候
4.Mysql估计使用索引的时间比全表扫描都要慢
5.用or分割的条件,如果or前面的条件的列有索引,而后面的列没有索引,则都不会用到索引

mysql的部分优化思路在P289
分区和水平拆分的区别:
分区依赖mysql的底层实现
水平拆分依赖于第三方的组件
分区不方便维护管理
一般使用水平拆分会多一点

表级锁:开销小,加锁快,不会出现死锁,发生锁冲突的概率最高,并发度最低
行级锁:开销大,加锁慢,会出现死锁,发生锁冲突的概率最低,并发度最高
表级锁是通过lock table和unlock table来显式使用
在MyISAM中,写锁比读锁的优先级高,即使读请求先到锁等待队列,也是写锁先插入到读锁之前。
事务的特性:
1.一致性
2.原子性
3.隔离性
4.持久性

并发事务处理带来的问题:
1.更新丢失
2.不可重复读
3.脏读
4.幻读

事务的隔离级别:
1.未提交读(Read uncommitted)
2.已提交读(Read commited)
3.可重复读(Repeatable read)
4.可序列化(Serializable)

next-key锁是innodb锁的单位,如果给不存在的数据加锁,大于这个不存在的数据的数据都会加锁(间隙锁)。
目的:防止幻读,同时满足其回复和复制的需要。
三种日志模式:
1.基于语句的SBL
2.基于行的RBL
3.混合模式

不同隔离级别下的一致性以及锁的差异(P342)

关于死锁的例子(P345)

以上就是目前12月的mysql学习内容

然后今天开始要继续努力了,12月所剩的时间不多了,唉,加油吧,春招努力。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值