这个跟数据库的事务隔离级别设置有关。    SQL-92定义了四种隔离级别:
      Read Uncommitted 
      Read Committed 
      Repeatable Read 
      Serializable    隔离级别是根据下面三种被禁止的操作序列(Phenomenan)规定的:
      Dirty Read 
      Non-Repeatable Read 
      Phantom Read    所谓Dirty Read,如下所示:
   Transaction 1: Write(a)             Rollback
   Transaction 2:           Read(a)
   如果事务2读出的数据的值是被事务1写过的,那么就是脏读。   所谓Non-Repeatable Read,如下所示:
   Transaction 1:Read(a)                        Read(a)
   Transaction 2:        Write/Delete(a) Commit
   如果事务1中每次读的数据的值不一样(事务2改写或者删除并且提交),那么就
称之为不可重复的读   所谓Phantom Read,如下所示:
   Transaction 1:Select(criteria)                                 Select(criteria)
   Transaction 2:          Update/Create(match to Criteria) Commit 
   如果事务1中重新执行相同的查询返回的结果集不一样(事务2修改或者插入并且
提交),称phantom Read发生。    四种隔离级别对应的特性:Isolation Level         Dirty Read        Non-Repeatable Read   Phantom Read
Read Uncommitted          可能                 可能               可能
Read Committed           不可能                可能               可能
Repeatable Read          不可能               不可能              可能
Serializable             不可能               不可能             不可能
   一般数据库好像都缺省地处在Read Committed级别,Serializable级别是排它性最高的,就是模拟的串行化执行事务,在不同的数据库系统中,对这四种级别的对应不尽相同。据Sybase声称,其它的DBMS中,Serializable都被认为是Repeatable Read,呵呵。说白了,隔离级别也是一种加锁和释放锁的方法。