浅析MySql的隔离性

MySql的隔离性

1.读未提交的, 会产生脏读 不可重复读 幻读.

  • 脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。

在这里插入图片描述 在这里插入图片描述在这里插入图片描述
2.读已提交的, 会产生不可重复读 幻读.

  • 不可重复读是指在事务1内,读取了一个数据,事务1还没有结束时,事务2也访问了这个数据,修改了这个数据,并提交。紧接着,事务1又读这个数据。由于事务2的修改,那么事务1两次读到的的数据可能是不一样的,因此称为是不可重复读。

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
3.可重复读, 会产生幻读.

  • 所谓幻读,指的是当某个事务在读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,会产生幻行。
  • InnoDB存储引擎通过多版本并发控制(MVCC)解决了幻读的问题?
  • 不可重复读重点在于update和delete,而幻读的重点在于insert。
  • 写读是脏读,读写读是不可重复读,where insert where是幻读
  • mysql 隔离级别为可重复读 其他事务新增的数据,看不到. sqlserver 隔离级别为可重复读 其他事务新增的数据会阻塞
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    4.序列化
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
sql语句的执行过程
  1. FROM子句负责把数据库的表文件加载到内存中去
  2. WHERE子句会把表中的数据进行过滤,取出符合条件的记录行,生成一张临时表
  3. GROUP BY子句会把临时表切分成若干临时表
  4. SELECT 的执行读取规则分为sql语句中有无GROUP BY两种情况。
  • 当没有GROUP BY时,SELECT 会根据后面的字段名称对内存中的一张临时表整列读取。
  • 当查询sql中有GROUP BY时,会对内存中的若干临时表分别执行SELECT,而且只取各临时表中的第一条记录,然后再形成新的临时表。这就决定了查询sql使用GROUP BY的场景下,SELECT后面跟的一般是参与分组的字段和聚合函数,否则查询出的数据要视情况而定。另外聚合函数中的字段可以是表中的任意字段,需要注意的是聚合函数会自动忽略空值。
  1. HAVING子句对临时表中的数据再次过滤.所以说column AS otherName ,otherName这样的字段在WHERE后不能使用,但在HAVING 后可以使用。但HAVING的后使用的字段只能是SELECT 后的字段,SELECT后没有的字段HAVING之后不能使用。
  2. ORDER BY子句对临时表进行排序
  3. LIMIT子句
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值