首页 >数据库 >mysql教程 >延迟和立即约束如何影响数据库事务中的主键和唯一键强制执行?

延迟和立即约束如何影响数据库事务中的主键和唯一键强制执行?

Patricia Arquette
Patricia Arquette原创
2025-01-06 09:02:44750浏览

How Do Deferred and Immediate Constraints Affect Primary and Unique Key Enforcement in Database Transactions?

定义 DEFERRABLE INITIALLY IMMEDIATE 的约束仍然延迟

延迟约束的强制执行

定义为 DEFERRED / DEFERRABLE 和 INITIALLY IMMEDIATE 的主要和唯一键约束强制唯一性在交易过程中的特定点执行。

延迟状态

1。修改多行的更新语句:

修改涉及主键交换的多行的 UPDATE 语句即使使用 INITIALLY IMMEDIATE 约束也会成功,因为约束检查被推迟到该语句之后。

2.数据修改 CTE:

数据修改 CTE 的行为类似,但冲突更新除外,更新会因非延迟主键冲突而失败。

3.事务中的多个 UPDATE 语句:

如果没有 SET CONSTRAINTS,事务中违反唯一约束的多个 UPDATE 语句将失败,因为在每个语句之后执行检查。

立即状态

  • 使用 INITIALLY IMMEDIATE 定义的约束仅在每个之后强制执行语句。
  • INITALLY IMMEDIATE 和 SET CONSTRAINTS IMMEDIATE 的行为相同。

延迟和 PostgreSQL 实现

  • PostgreSQL 在每行更新后强制执行非延迟约束,导致潜在的冲突。
  • DEFERRABLE 约束提供此有缺陷的实现的解决方法。

约束执行摘要

  • 在语句后检查 DEFERRABLE INITIALLY IMMEDIATE 约束。
  • 检查 DEFERRABLE INITIALLY DEFERRED 约束后
  • 在每个命令后都会检查非延迟约束。

注意: UNIQUE 和 PRIMARY KEY 约束会被特殊对待,非延迟约束是每次修改后立即检查。

与 SQL 标准的兼容性

到为了实现符合标准的行为,DEFERRABLE 约束应声明为 INITIALLY IMMEDIATE,但不能延迟。与立即唯一性检查相比,这可能会降低性能。

外键约束

DEFERRABLE 约束不能用于 FOREIGN KEY 引用,因为引用的列必须是不可延迟的唯一或主键约束。

以上是延迟和立即约束如何影响数据库事务中的主键和唯一键强制执行?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn