首頁 >資料庫 >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 的約束仍然延遲

延遲約束的強制執行

約束強制唯一性在交易過程中的特定點執行。

延遲狀態

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 約束不能用於外鍵引用,因為引用的欄位必須是不可延遲的唯一或主鍵約束。

以上是延遲和立即約束如何影響資料庫事務中的主鍵和唯一鍵強制執行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn