首頁 > 資料庫 > 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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板