加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 如何在UIB中使用Firebird事务隔离级别?

发布时间:2020-12-15 09:12:20 所属栏目:大数据 来源:网络整理
导读:根据 documents,Firebird中有四个事务隔离级别.但是,据我所知,uib库(TUIBTransaction)中没有明确的隔离级别选择,但是有很多交易选项.我该怎么用?某处有文件吗? 解决方法 这些选项将改变隔离级别.正如@Arioch在其简短评论中所说,您可以更改隔离级别,更改TTr
根据 documents,Firebird中有四个事务隔离级别.但是,据我所知,uib库(TUIBTransaction)中没有明确的隔离级别选择,但是有很多交易选项.我该怎么用?某处有文件吗?

解决方法

这些选项将改变隔离级别.正如@Arioch在其简短评论中所说,您可以更改隔离级别,更改TTransParams类型的属性选项.这是一组TTransParam,如下所示.

// Transaction parameters
TTransParam = (
{ prevents a transaction from accessing tables if they are written to by
other transactions.}
tpConsistency,{ allows concurrent transactions to read and write shared data. }
tpConcurrency,{ Concurrent,shared access of a specified table among all transactions. }
{$IFNDEF FB_21UP}
tpShared,restricted access of a specified table. }
tpProtected,tpExclusive,{$ENDIF}
{ Specifies that the transaction is to wait until the conflicting resource
is released before retrying an operation [Default]. }
tpWait,{ Specifies that the transaction is not to wait for the resource to be
released,but instead,should return an update conflict error immediately. }
tpNowait,{ Read-only access mode that allows a transaction only to select data from tables. }
tpRead,{ Read-write access mode of that allows a transaction to select,insert,update,and delete table data [Default]. }
tpWrite,{ Read-only access of a specified table. Use in conjunction with tpShared,tpProtected,and tpExclusive to establish the lock option. }
tpLockRead,{ Read-write access of a specified table. Use in conjunction with tpShared,and tpExclusive to establish the lock option [Default]. }
tpLockWrite,tpVerbTime,tpCommitTime,tpIgnoreLimbo,{ Unlike a concurrency transaction,a read committed transaction sees changes
made and committed by transactions that were active after this transaction started. }
tpReadCommitted,tpAutoCommit,{ Enables an tpReadCommitted transaction to read only the latest committed
version of a record. }
tpRecVersion,tpNoRecVersion,tpRestartRequests,tpNoAutoUndo
{$IFDEF FB20_UP},tpLockTimeout
{$ENDIF}
);

由于Interbase 6.0代码“opensourced”,API的文档没有太大变化.因此,如果您想要了解其中任何一个,您正在查找的文档都在Interbase手册中.

你可以在这里得到它们http://www.firebirdsql.org/en/reference-manuals/

下面我在link中引用安·哈里森来快速解释一下常用的选项:

isc_tpb_consistency can cause performance problems due the fact that it’s locking tables and possibly excluding concurrent access.
isc_tpb_concurrency is the design center for Firebird. Readers don’t
block writers,writers don’t block readers,and both get a consistent
view of the database.

isc_tpb_read_committed + isc_tpb_rec_version + isc_tbp_read_only give
inconsistent results and occasionally produces an error on a blob
read*,but unlike other modes,it does not block garbage collection so
it’s a good mode for long running read transactions that don’t have to
get the “right” answer.

isc_tpb_read_committeed + isc_tpb_rec_version has the same performance
as isc_tpb_concurrency,but gets inconsistent results – the same query
run twice in the same transaction may return different rows.

isc_tpb_read_committed + isc_tpb_no_rec_version + isc_tpb_wait is
slower than other modes because it will wait for a change to be
commited rather than reading the newest committed version. Like all
variants of isc_tpb_read_committed,it does not produce consistent
results.

isc_tpb_read_committed + isc_tpb_no_rec_version + isc_tpb_no_wait
gives lots and lots of deadlock errors because every time a reader
encounters a record that’s being changed,it returns an error.

注意:我希望您可以看到,除了参数名称不同之外,如果删除“isc_tpb_”部分并不难理解.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读