Subject Re: [firebird-support] Dirty Read
Author Mark Rotteveel
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