MySQL— —04 隔离级别(面试常考)

MySQL隔离级别

MySQL四大特性ACID原则:原子性、一致性、隔离性、持久性

1、读未提交(read uncommited)->脏读

  • A事务修改了数据之后,还没有提交,B事务就已经可以读取;(如果此时A回滚事务,那么此时B事务之前读取的数据就成了脏数据)

2、读已提交(read commited)-> 不可重复读

  • A事务先读取数据,此时B事务修改了数据并提交,那么第二次A事务读取数据时候,就与第一次读取的不一致,就产生了不可重复读。

Oracle、SQL Server默认

3、可重复读(repeatable read)-> 幻读

  • 在这种隔离级别下,所有事务前后多次读到的数据(不是条数)是一致的,也就实现了可重复读,但是该隔离级别无法锁住insert操作。比如:A事务执行操作时,读取数据,B事务操作向表中添加一条数据并提交,此时A事务再次读取,会发现莫名其妙多了一条数据,就像出现幻觉一样,此时就产生了“幻读”。

MySQL默认隔离级别

4、串行化(serializable)

  • 最高的隔离级别,所有事务顺序执行。
隔离级别脏读不可重复读幻读
ReadUncommitted
ReadCommitted
RepeatableRead
Serializable

MySQL面试常考

1.索引是个什么样的数据结构呢?

索引的数据结构和具体存储引擎的实现有关。
MySQL:Hash索引、B+树索引
InnoDB引擎默认索引实现:B+树索引

2.联合索引是什么?为什么需要注意联合索引中的顺序?

①多个字段同时建立一个索引
②如果想要命中索引,需要按照建立索引时的字段顺序挨个使用,否则无法命中

3.什么时候索引会失效

①使用不等于查询
②列参与数学运算或函数
③字段串like左边是通配符【%三】
④MySQL分析全表扫描比使用索引更快
⑤使用联合索引时,前面一个条件为范围查询
⑥不符合最左前缀原则

4.创建索引要遵循的原则

①唯一性
②为经常需要排序、分组和联合操作的字段建立索引
③经常作为查询条件
④限制索引数目
⑥使用数据量少的建立索引
⑦使用前缀来索引:如果字段的值很长,最好使用值得前缀来索引。例如:TEXT和BLOG类型的字段,进行全文检索浪费时间->只检索字段前面的若干个字符。

5.select语句的优化

①不用select *
②多表关联查询时,小表在前,大表在后(在MySQL中,执行from后的表关联查询时从左往右,Oracle刚好相反)
③使用表的别名
④where子句替换having子句

6.select语句执行顺序

from:从硬盘加载数据到缓冲区
on:从表或视图选择满足条件的元组
join:左、右、内连接(从某个表中读取到元组)
where:推荐使用多表连接查询,而不是子查询
group by:分组
having:筛选
select:查询需要的列
distinct:去重
order by:排序
limit:显示限制

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值