首页 > 数据库 > mysql教程 > PostgreSQL 的 DEFERRABLE 主键检查执行如何工作?

PostgreSQL 的 DEFERRABLE 主键检查执行如何工作?

Linda Hamilton
发布: 2025-01-06 09:16:39
原创
399 人浏览过

How Does PostgreSQL's DEFERRABLE Primary Key Check Enforcement Work?

DEFERRABLE 主键检查强制

DEFERRABLE 主键或唯一键约束的行为取决于其规范。 PostgreSQL 考虑以下强制场景:

1。 DEFERRABLE INITIALLY IMMEDIATE

DEFERRABLE INITIALLY IMMEDIATE 的约束在每个语句之后强制执行,而不是像您所期望的那样在每个行更新之后强制执行。这意味着:

  • 在修改多行的示例 UPDATE 语句中,不会违反约束,因为所有更新都发生在同一语句内。
  • 同样,数据修改 CTE 也将起作用按预期,除非有一个单独的语句会违反约束。

2. DEFERRABLE INITIALLY DEFERRED

DEFERRABLE INITIALLY DEFERRED 的约束在事务结束时强制执行,允许在同一事务中进行多次更新。这对于在多个语句之间强制执行约束非常有用。

3.不可延迟的约束

声明为 NOT DEFERRABLE 的约束在每行更新后都会进行检查,使它们更加严格。即使在命令结束时满足约束,这也可能导致约束违规。

历史视角

在 PostgreSQL 的早期版本中,不可延迟约束每行更新后也会进行检查。此行为被认为是一个错误,随后在 PostgreSQL 9.1 中得到纠正。

实际影响

  • 对于符合标准的行为,请使用 DEFERRABLE INITIALLY IMMEDIATE 约束。
  • 如果需要 FOREIGN KEY 约束,则引用的列必须是不可延迟的唯一或主键约束。
  • DEFERRABLE INITIALLY DEFERRED 约束可以通过允许在单个事务中进行多个更新来提高性能。

以上是PostgreSQL 的 DEFERRABLE 主键检查执行如何工作?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板