假设我们要从MySQL(InnoDB)表中读取新事件event。我们记得我们看到的最后一个(自动递增)ID,并查询WHERE id > @LastSeenId。
如果ID 1到10可用,但ID 4尚未提交怎么办?
显然,重要的是我们不要跳过任何可能存在的行。如果我们要跳过ID 4,我们将永远不会再看到它,并且会永久丢失它,因此必须避免。
我认为这取决于查询运行的隔离级别。
1.我是否正确理解Serializable(并且没有其他级别)将提供所需的行为?
也就是说,它将等待任何未提交的事务的提交/回滚,这些事务会影响与条件(id > @LastSeenId)相匹配的行?
2.更具体地说,如果我们没有显式使用数据库事务,那么结果是否由默认隔离级别确定-即使对于单个SELECT查询也是如此?
就上下文而言,我们使用的是.NET的官方MySQL连接器。