8.5常见面试题

在这里插入图片描述
以上是面试重要的知识点,给大家过一遍。
mysql5.1之前是 Myisam
mysql默认的引擎是 InnoDB,因其支持 transaction事务
以下是各个引擎所支持的内容:
在这里插入图片描述
隔离级别经常问:

在这里插入图片描述
没有隔离好,会有什么问题?
四种隔离级别分别解决哪些问题?

mysql锁的范围是 表级锁、行级锁

读取一行的时候,需要加共享锁,这时候 读取,别人不能读,不能更新
更新的时候要加排他锁,这样更新的时候 别人不能读,不能更新

意向共享锁,加s锁之前要加;意向共享锁的意思是准备加s锁
NK表示使用范围查询的时候,比如id大于几,小于几,对范围内不存在的记录加锁

在这里插入图片描述
事务1加了IS,事务2加了X,则发生冲突
在这里插入图片描述
事务1加了意向共享锁,则事务2不能加 意向排他锁

间隙锁是当使用范围查询的时候,比如id大于多少、小于多少,一查 查到多条 数据
比如 id为101 102 103时,其给不存在 的记录id=104、105…等等加锁

在这里插入图片描述

如何加锁呢?
在这里插入图片描述
DML语句:
Insert插入
Update修改更新
Delete删除
Select选择

DQL语句 查询不会对数据库中的数据进行修改.只是一种显示数据的方式
在这里插入图片描述
在这里插入图片描述
之前讲过,行级锁会出现死锁的现象,

如下场景:
事务1 更新 T表,先更新ID=1 这条记录,然后更新ID=2的记录
在这里插入图片描述
事务2 正好相反,先更新 ID=2 这条记录,后更新ID=1的记录
在这里插入图片描述
在这里插入图片描述
然后事务1想更新 id2,发现其被 事务2锁住
事务2 想更新id1,发现其被事务1锁住
这时产生死锁

inndb比较智能,会自动解决死锁的问题,
或者设置超时等待参数,如果事务在执行过程中超过了这个时间,则自动回滚
在这里插入图片描述
出现死锁 是因为 程序逻辑有缺陷,所以要避免写出这样的代码:

在这里插入图片描述
刚刚讲的MYSQL的锁,我们统称为悲观锁(数据库加的锁都是悲观锁,天生认为不加锁 一定会出问题)

如果不用数据库的锁机制,自己实现的话,都是乐观锁(自定义),一般不会发生问题,发生了我也能解决

更新数据频繁的话,用悲观锁比较好。
更新数据不频繁的话,用乐观锁

在这里插入图片描述
无锁算法:利用无锁的方式,实现有锁的感觉

自旋操作:a线程对数据加锁,此时b线程想要数据,则b会循环等待其解锁,循环几乎没有时间间隔,只要解锁,马上就能感觉到。但是阻塞时间间隔相对较大,效率没有循环的方式高

在这里插入图片描述
mysql事务是保证数据的一致性,完整性等等,是为了保证安全层面的话题,那么索引是为了提高查询的效率

InnoDB采用 B+Tree
在这里插入图片描述
在这里插入图片描述
上面讲完了 MYsql

接下来将redis,重点是数据类型
在这里插入图片描述

注:key其实就是一种字符串
单位:
在这里插入图片描述
sort set表示有序集合

redis过期策略:

如果我们把redis的key设置了过期时间,那么:
在这里插入图片描述
如果一过期就删掉的话,效率会变低
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值