适用于: Microsoft Fabric 中的 SQL 终结点和仓库

与SQL Server中的行为类似,事务允许你控制读取和写入查询的提交或回滚。

可以使用事务修改存储在仓库中的表中的数据,以将更改组合在一起。

  • 例如,可以将插入提交到多个表,或者,如果出现错误,则不提交任何表。 如果要更改影响三个表的采购订单的详细信息,可以将这些更改分组到单个事务中。 这意味着,当查询这些表时,它们要么全都有更改,要么没有更改。 当需要确保数据跨多个表保持一致时,事务是一种常见的做法。
  • Microsoft Fabric 目前为 预览版

    Microsoft Fabric 中的 SQL 终结点支持相同的事务功能,但对于只读查询。

    事务还可用于顺序 SELECT 语句,以确保所涉及的表都具有来自同一时间点的数据。 例如,如果表包含由另一个事务添加的新行,则新行不会影响打开的事务中的 SELECT 查询。

    Microsoft Fabric 仅支持快照隔离级别。 如果使用 T-SQL 更改隔离级别,则会在查询执行时忽略更改,并应用快照隔离。

    跨数据库查询事务支持

    Microsoft Fabric 中的仓库支持跨同一工作区内的数据库(包括从 Lakehouse 的 SQL 终结点 读取)的事务。 每个 Lakehouse 都有一个 SQL 终结点,每个工作区可以有多个 lakehouse。

    事务中的 DDL 支持

    Microsoft Fabric 中的仓库支持用户定义的事务中的 DDL,例如 CREATE TABLE。

    不同类型语句的锁

    此表提供了用于不同类型的 事务 的锁的列表,所有锁都在表级别:

    这些锁可防止发生冲突,例如在事务中更新行时更改表的架构。

    可以查询当前使用动态管理视图 (DMV) sys.dm_tran_locks持有的 锁。

    更新表中一行或多行的两个或多个并发事务的冲突将在事务结束时进行评估。 要提交的第一个事务成功完成,其他事务将回滚并返回错误。 这些冲突是在表级别而不是单个 parquet 文件级别进行评估的。

    INSERT 语句始终创建新的 parquet 文件,这意味着与其他事务(DDL 除外)的冲突更少,因为表的架构可能会更改。

    事务日志记录

    Microsoft Fabric 中的 Warehouse 中的事务日志记录位于 parquet 文件级别,因为 parquet 文件是不可变的, (它们不能) 更改。 回滚会导致指向上一个 parquet 文件。 此更改的优点是事务日志记录和回滚速度更快。

  • 不支持分布式事务。
  • 不支持保存点。
  • 不支持命名事务。
  • 不支持标记的事务。
  • 目前,仓库中的 T-SQL 功能有限。 有关当前不可用的 T-SQL 命令的列表,请参阅 TSQL 外围应用
  • 如果事务将数据插入空表并在回滚前发出 SELECT,则自动生成的统计信息仍可能反映未提交的数据,从而导致 统计信息 不准确。 不准确的统计信息可能导致查询计划和执行时间未优化。 如果在大型 INSERT 之后使用 SELECT 回滚事务,则可能需要更新 SELECT 中提到的列的 统计信息
  • 仓库中的表
  •