title: Isolation levels and not skipping any data
body: <p>Say we want to read new events from our MySQL (InnoDB) table <code>event</code>. We remember the last (auto-increment) ID we have seen, and query <code>WHERE id &gt; @LastSeenId</code>.</p>
  
  <p><strong>What if IDs 1 through 10 are available, except that ID 4 is yet uncommitted?</strong></p>
  
  <p>Clearly, it is important that we never skip any rows that may exist. If we were to skip ID 4, we will never see it again, and will have missed it permanently, which must be prevented.</p>
  
  <p>I presume this depends on the isolation level the query runs in.</p>
  
  <p><strong>1. Do I understand correctly that <code>Serializable</code> (and no other level) will provide the required behavior?</strong></p>
  
  <p>That is, it will wait for commit/rollback of any uncommitted transactions affecting the rows matching the condition (<code>id &gt; @LastSeenId</code>)?</p>
  
  <p><strong>2. More specifically, if we are not using database transactions explicitly, is the outcome determined by the default isolation level - even for a single <code>SELECT</code> query?</strong></p>
  
  <p>For context, we are using the official MySQL connector for .NET.</p>