On 11-9-2013 11:32, Svein Erling Tysvær wrote:
> Firebird is not a 'dirty' database and there's no way to update any 
> uncommitted record. Neither is it possible for any other transaction to read 
> changes you've done in your transaction before your transaction commits (so 
> ReadUncommitted does not exist in Firebird). Firebird is not even a database 
> that locks records. Rather, Firebird uses a versioning system, and each 
> record can exist in one or more versions.
>
> The reason you cannot UPDATE anything, is because another transaction has 
> modified (or deleted or inserted) the record, but not committed yet. Until 
> that transaction commits or rolls back, no other transaction will be able to 
> modify that record (it will be possible to read earlier versions, just not 
> update or delete the record).
>
> So, Firebird does not support dirty reads/updates, but the versioning system 
> makes it so that the only lock conflicts you can get is when two writers 
> tries to update the same record (readers never block anyone and writers never 
> block readers). Your SELECT * FROM EMPLOYEES_TABLE
> ought not to fail, but it will return old values at least until FtrUpdate 
> commits (note, I know nothing about C#).

If the transaction is READ COMMITTED NO_RECORD_VERSION, then a read can 
be blocked by a different uncommitted transaction.

The default for read committed in the .net provider however is READ 
COMMITTED RECORD_VERSION.

Mark
-- 
Mark Rotteveel

Reply via email to