mysql复习笔记

1.事务:就是commit,一次commit就是一次事务

四大特性:原子性,一致性,隔离性,持久性
原⼦性: 事务是最⼩的执⾏单位,不允许分割。事务的原⼦性确保动作要么全部完成,要么全不执行
一致性: 执⾏事务前后,数据保持⼀致,多个事务对同⼀个数据读取的结果是相同的;
隔离性: 并发访问数据库时,⼀个⽤户的事务不被其他事务所⼲扰,各并发事务之间数据库是独⽴的;
​ 持久性: ⼀个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发⽣故障也不应该对其有任何影响。
​ MySQL的存储引擎InnoDB使用重做日志保证一致性与持久性,回滚日志保证原子性,使用各种锁来保证隔离性。

2.事务隔离级别,4个隔离级别分别有什么并发问题?

读未提交:能读取到其他事务未提交的数据
读已提交:允许读取其他事务已经提交的数据
可重复读:同一字段多次读取结果是一样的,除⾮数据是被本身事务⾃⼰所修改
可串行化:所有的事务依次逐个执⾏
风险从高到低,效率从低到高
默认可重复读

3。隔离级别的单位是数据表还是数据行?如串行化级别,两个事务访问不同的数据行,能并发?

​ 读未提交:不加锁
读已提交:给所有要修改的行,加行锁
可重复读:给所有查询的行,加行锁
可串行化:给表加表锁

4.myisam和innodb

Myisam:支持表锁,适合读密集的场景,不支持外键,不支持事务,索引与数据在不同的文件
Innodb:支持行、表锁,默认为行锁,适合并发场景,支持外键,支持事务,索引与数据同一文件

5.索引的两种数据结构

B+树和hash
hash因为使用散列算法,所以查找很快,但是不支持范围查找和排列
​ B+树的磁盘读写代价低,更少的查询次数,查询效率更加稳定,有利于对数据库的扫描

6.如何避免全表扫描?

参考 https://blog.csdn.net/qq_41080067/article/details/102466284
1.对查询进行优化,对经常涉及where和order by的列上建立索引
2.不要在where上使用null判断
3,不要在where上使用!=和<>操作符
4.避免在where子句中使用or
例如:
select id from t where num=10 or num=20
可以这样查询:
select id from t where num=10
union all
select id from t where num=20
5.在like里面不能前置百分号
6.慎用in 和not in
7很多时候用 exists 代替 in 是一个好的选择

7.join

在这里插入图片描述

left join(左联接) 返回包括左表中的所有记录和右表中关联字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中关联字段相等的记录
inner join(等值连接) 只返回两个表中关联字段相等的行
左联:包括与右边关联成功的数据和左表中的剩余数据,也就是说左联,左表数据不会少
右联同理

8.mysql主从介绍

**原理:**将主数据库的日志binlog复制到从数据库上执行一遍,达到主从数据一致的情况
**过程:**是从库发起IO线程,向主库请求binlog,主节点开启一个binlog dump线程,检查自己的二进制日志,并发送给从节点;从库将接收到的数据保存到中继日志(Relay log)中,另外开启一个SQL线程,把Relay中的操作在自身机器上执行一遍
好处:1.当做备份使用:不会影响业务
2.当做读写分离的服务器:主库是写库,从库是读库,分布在不同的服务器上,充分发挥服务器和数据库的性能,但要保证数据的一致性
主从有几种复制的方式
1.异步复制: 在异步复制中,主库执行完操作后,写入binlog日志后,就返回客户端,这一动作就结束了,并不会验证从库有没有收到,完不完整,所以这样可能会造成数据的不一致。
2.半同步复制:​ 当主库每提交一个事务后,不会立即返回,而是等待其中一个从库接收到Binlog并成功写入Relay-log中才返回客户端,所以这样就保证了一个事务至少有两份日志,一份保存在主库的Binlog,另一份保存在其中一个从库的Relay-log中,从而保证了数据的安全性和一致性。
3.全同步复制:指当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。因为需要等待所有从库执行完该事务才能返回,所以全同步复制的性能必然会收到严重的影响。
异步复制不管从库,可能会有不一致问题,半同步保证了至少有一个备份,但是其他库不保证,全同步保证了全体数据都相同,但是效率极低
如何去解决不一致问题?
1.使用全同步或者半同步复制
2.缓存记录写key法,发生写操作,把此key记录在缓存里过期时间500ms,key存在表示刚更新过,还没完成同步,强制路由到主库,没有则路由到从库
3.数据库中间件,一般情况数据库中间件把写路由到主,把读路由到从,此处是记录所以写的key,在500ms内读主库,超过500ms后读从库,能保证绝对的一致性,缺点是成本比较高

mysql三种日志分别都是干什么的,事务的时候三种日志如何操作,mysql mvcc原理。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值