Innodb中的MySQL min()行为

时间:2019-02-25 14:16:23

标签: mysql innodb mvcc

同时执行表SELECT MIN(x) FROM blah;时,MySQL在执行DELETE时表现如何?

min()的结果是否会显示已删除的条目?如果不是,那么如何防止从已删除的条目返回值?

这之所以出现,是因为我们有一个大型数据库,其中min()运行了几个小时,但是在这段时间内删除是连续发生的。

1 个答案:

答案 0 :(得分:1)

阅读https://dev.mysql.com/doc/refman/8.0/en/innodb-consistent-read.html,了解InnoDB中的一致性读取。保证每个SELECT语句都可以查看一种“快照”数据,而在SELECT语句运行时不会改变。

因此,您是对的,您确实有可能SELECT语句返回package com.Bob.Marley; public class SuperClass{ protected int x = 0; } package com.Bob.Marley; public class SubClass extends SuperClass{ protected int x = 1; } package com.Bob.Marley; public class TestClass{ public static void main (String[] args){ SubClass s = new SubClass(); //print 1 System.out.println(s.x); //how do I print the superclass variable? //I know inside SubClass I can access it with plain old super.x //but what about outside the subclass with a new object. } } 的值,而该值在您的SELECT语句完成后将不再存在,因为它同时已被删除。

这是我们为自由阅读查询而不会阻止并发更新/删除所付出的代价。

如果要让MIN(x)快速返回,请创建一个以MIN(x)作为第一列的索引。