官术网_书友最值得收藏!

  • 精通Neo4j
  • 龐國明等
  • 784字
  • 2023-07-17 19:01:26

3.7 約束

3.7.1 簡介

Neo4j通過使用約束來保證數據完整性,可應用于節點或者關系。約束的類型包括:

(1)節點屬性的唯一性約束。確保具有特定標簽的所有節點的某個屬性唯一。針對多個屬性建立的唯一性約束,則確保這些屬性值的組合是唯一的。唯一性約束并不要求所有節點對于相關屬性都具有唯一值,如果節點不包含約束相關的全部屬性,則該節點不受此約束限制。

(2)節點屬性的存在性約束(僅企業版)。確保具有特定標簽的所有節點都具有某個屬性。如果創建具有這種標簽的節點時沒有設定該屬性,則創建失敗。刪除節點的這類屬性同樣也會失敗。

(3)關系屬性的存在性約束(僅企業版)。確保具有特定類型的所有關系都存在屬性。如果創建具有這些類型的關系時沒有設定該屬性,則創建失敗。刪除關系的這類屬性同樣也會失敗。

(4)節點鍵約束(僅企業版)。確保給定標簽下的所有節點都擁有所有約束相關的屬性,且屬性的值唯一。如果創建了該類約束,則以下操作都不能執行:

● 創建未包含全部屬性的節點或屬性值不唯一的節點。

● 刪除約束相關屬性。

● 導致屬性值不再唯一的更新。

創建約束將對索引產生以下影響:

● 為屬性創建節點鍵約束或節點屬性唯一性約束,會自動在該屬性上創建一個索引,因此約束一旦創建,就不能另外單獨創建相同索引類型、標簽和屬性組合的索引。

● 這些自動創建的索引也可以被Cypher使用。

● 如果約束被刪除,相關索引也被刪除,如果仍需使用約束所自動創建的索引,則需要手動重新創建這些索引。

此外,約束還有以下特點:

● 一個標簽可以有多個約束,屬性的唯一性約束和存在性約束可以綁定在同一個屬性上。

● 創建約束是原子操作,且因為需要掃描全庫,所以可能會花費較長的時間。

● 最好在創建約束時就為其命名,否則系統會自動生成一個名稱。

● 約束名稱必須在索引和約束中都唯一。

● 默認情況下,創建約束的操作不可重復執行。兩次創建相同的約束會引發報錯,可以使用關鍵字IF NOT EXISTS防止這種情況。

主站蜘蛛池模板: 萨迦县| 宾阳县| 邵东县| 竹北市| 尼玛县| 襄汾县| 井研县| 伊宁市| 德惠市| 红安县| 堆龙德庆县| 五指山市| 武安市| 南安市| 精河县| 林西县| 肇东市| 涡阳县| 成武县| 徐闻县| 山东省| 武平县| 芮城县| 高阳县| 西昌市| 万荣县| 廉江市| 水富县| 玉溪市| 大英县| 神木县| 临沧市| 望奎县| 兴宁市| 南投市| 临清市| 股票| 德江县| 舟山市| 安塞县| 铁岭市|