
本文共 919 字,大约阅读时间需要 3 分钟。
在RAD Studio 10.4之前,FireDAc连接的默认事务隔离选项被读取为commit。那就是TFDConnection.TxOptions.Isolation是xiReadCommitted。这是为组件设置的值,并且是默认值,它没有发送到数据库。FireDAC只是假设其配置中的默认值是数据库的默认值,并且在会话开始时并未明确将此隔离配置发送到数据库。例如,在MySQL中,如果未修改默认值,则所需的命令是SET SESSION TRANSACTION ISOLATION LEVEL未执行。在这种情况下,无论在FireDAC默认配置中设置了什么,MySQL事务隔离都将保留为数据库默认值xiRepeatableRead。
为了解决此问题,我们决定最好将默认隔离级别保持为xiUnspecified,这意味着,如果您不需要特定的隔离级别,则使用特定数据库的默认配置-这是一个已经预先设置的int数据库,您无需询问配置。默认隔离级别已针对特定数据库进行了优化,因为默认设置不同,并且某些隔离级别甚至都不能很好地被所有数据库引擎支持。欢迎加入Delphi开发局QQ群:32422310
如果开发人员希望使用与数据库使用的默认级别不同的隔离级别,则必须在组件配置或代码中显式设置隔离级别。如果开发人员想要使用数据库默认值,则不需要代码。
这是FireDAC术语中主要数据库的默认隔离级别-再次,该属性值只是xiUnspecified:
DB2-xiReadCommitted InterBase和Firebird-xiSnapshot MySQL和MariaDB-xiRepeatableRead Oracle-xiReadCommitted Microsoft SQL Server-xiReadCommitted SQLite-xiSerializible PostgreSQL-xiReadCommitted
我希望这有助于弄清更改并解释如何解决,将FireDAC连接的事务隔离级别更改为您特别需要的(如果与数据库默认设置不同的话)。RAD Studio 10.4的发行说明中未列出此更改,但确实引起了一些担忧(以及错误报告)。
发表评论
最新留言
关于作者
