- 精通Neo4j
- 龐國明等
- 784字
- 2023-07-17 19:01:26
3.7 約束
3.7.1 簡介
Neo4j通過使用約束來保證數據完整性,可應用于節點或者關系。約束的類型包括:
(1)節點屬性的唯一性約束。確保具有特定標簽的所有節點的某個屬性唯一。針對多個屬性建立的唯一性約束,則確保這些屬性值的組合是唯一的。唯一性約束并不要求所有節點對于相關屬性都具有唯一值,如果節點不包含約束相關的全部屬性,則該節點不受此約束限制。
(2)節點屬性的存在性約束(僅企業版)。確保具有特定標簽的所有節點都具有某個屬性。如果創建具有這種標簽的節點時沒有設定該屬性,則創建失敗。刪除節點的這類屬性同樣也會失敗。
(3)關系屬性的存在性約束(僅企業版)。確保具有特定類型的所有關系都存在屬性。如果創建具有這些類型的關系時沒有設定該屬性,則創建失敗。刪除關系的這類屬性同樣也會失敗。
(4)節點鍵約束(僅企業版)。確保給定標簽下的所有節點都擁有所有約束相關的屬性,且屬性的值唯一。如果創建了該類約束,則以下操作都不能執行:
● 創建未包含全部屬性的節點或屬性值不唯一的節點。
● 刪除約束相關屬性。
● 導致屬性值不再唯一的更新。
創建約束將對索引產生以下影響:
● 為屬性創建節點鍵約束或節點屬性唯一性約束,會自動在該屬性上創建一個索引,因此約束一旦創建,就不能另外單獨創建相同索引類型、標簽和屬性組合的索引。
● 這些自動創建的索引也可以被Cypher使用。
● 如果約束被刪除,相關索引也被刪除,如果仍需使用約束所自動創建的索引,則需要手動重新創建這些索引。
此外,約束還有以下特點:
● 一個標簽可以有多個約束,屬性的唯一性約束和存在性約束可以綁定在同一個屬性上。
● 創建約束是原子操作,且因為需要掃描全庫,所以可能會花費較長的時間。
● 最好在創建約束時就為其命名,否則系統會自動生成一個名稱。
● 約束名稱必須在索引和約束中都唯一。
● 默認情況下,創建約束的操作不可重復執行。兩次創建相同的約束會引發報錯,可以使用關鍵字IF NOT EXISTS防止這種情況。