删除图类型元素

ALTER CURRENT GRAPH TYPE DROP 命令允许您从图类型中删除元素类型和约束。

从图类型中删除元素类型和约束需要 DROP CONSTRAINT 权限
设置图类型 (Set graph type)
ALTER CURRENT GRAPH TYPE SET {
   (p:Person => :Resident {name :: STRING, ssn :: INTEGER})
     REQUIRE (p.name, p.ssn) IS KEY,
   (:Pet => :Resident&Animal {insuranceNumber :: INTEGER IS KEY, healthCertificate :: STRING IS UNIQUE, name :: STRING}),
   (:Robot => :Resident&Machine {application :: STRING NOT NULL, id :: INTEGER NOT NULL}),
   (:City => {name :: STRING NOT NULL, population :: INTEGER}),
   (:Resident)-[:LIVES_IN => {since :: ANY NOT NULL}]->(:City),
   (:Company => {name :: STRING, address :: STRING IS UNIQUE}),
   (:Person)-[:WORKS_FOR => {role :: STRING}]->(:Company),
   CONSTRAINT company_name FOR (c:Company) REQUIRE c.name IS KEY,
   CONSTRAINT animal_id FOR (a:Animal) REQUIRE a.id IS UNIQUE,
   CONSTRAINT resident_address FOR (resident:Resident) REQUIRE resident.address :: STRING
}

删除节点和关系元素类型

要完全删除节点关系元素类型,只需定义其标识节点标签/关系类型并附加 => 即可。

删除节点和关系元素类型
ALTER CURRENT GRAPH TYPE DROP {
    (:Pet => ),
    ()-[:LIVES_IN => ]->()
}

您也可以在删除元素类型时定义完整的元素类型。但是,不允许使用部分定义。

允许 — 仅限标识节点标签/关系类型 允许 — 完整定义 不允许 — 部分定义
ALTER CURRENT GRAPH TYPE DROP {
    (:Pet => )
}
ALTER CURRENT GRAPH TYPE DROP {
    (:Pet => :Resident&Animal {insuranceNumber :: INTEGER, healthCertificate :: STRING, name :: STRING})
}
ALTER CURRENT GRAPH TYPE DROP {
    (:Pet => :Resident&Animal)
}

以这种方式删除节点或关系元素类型可以移除以下约束:

  • 节点标签存在约束

  • 源节点和目标节点标签约束

  • 针对节点或关系元素类型定义的属性类型和属性存在约束。

这些约束不能与它们所支持的节点或关系元素类型分开删除。

不允许 — 删除节点或关系元素类型中的从属约束
ALTER CURRENT GRAPH TYPE DROP {
   CONSTRAINT constraint_22a8753a (1)
}
1 constraint_22a8753a 是在 City 节点元素类型上定义的属性存在约束(约束名称由 SHOW CONSTRAINTS 命令返回)。

但是,删除节点或关系元素类型并不会移除针对该类型定义的任何属性唯一性或键约束。 相反,它会将它们作为非标识节点标签和关系类型的约束保留下来。 因此,必须使用其约束名称将它们单独删除。 有关更多信息,请参阅下方的删除标识和非标识标签及类型的约束

如果节点元素类型的标识标签同时作为关系元素类型中的源/目标节点标签受到约束,则在不删除或先更改该关系元素类型的情况下,无法删除该节点元素类型。

不允许 — 删除其标识标签也是关系元素类型中源/目标节点标签的节点元素类型
ALTER CURRENT GRAPH TYPE DROP {
    (:Person => )
}
错误消息
22NCE: data exception - node element type in use. The node element type identified by the label `Person` is referenced in the graph type element '()-[:`WORKS_FOR` =>]->()' and cannot be dropped.

删除标识和非标识节点标签及关系类型的约束

无论键和属性唯一性约束是定义在标识标签上还是非标识标签上,它们都只能通过在 ALTER CURRENT GRAPH TYPE DROP 命令中使用 CONSTRAINT name 语法来删除。定义在非标识节点标签和关系类型上的属性存在和属性类型约束也以这种方式删除。约束名称由 SHOW CONSTRAINTS 命令返回,或者是 SHOW CURRENT GRAPH TYPE 定义的一部分。

删除显式命名和自动命名的键及属性唯一性约束
ALTER CURRENT GRAPH TYPE DROP {
    CONSTRAINT animal_id,
    CONSTRAINT constraint_302a3693
}

constraint_302a3693 是在 设置图类型 > 标识节点标签和关系类型的属性唯一性和键约束 中建立的 healthCertificate 的唯一性约束名称。

这些约束也可以使用 DROP CONSTRAINT 命令从图类型中删除。

删除非标识节点标签上的属性类型约束
DROP CONSTRAINT resident_address

删除完整图类型

要删除完整图类型,请使用 ALTER CURRENT GRAPH TYPE SET 命令。这将用一个新的(可能是空的)图类型替换现有的图类型。

删除完整图类型并替换为空图类型
ALTER CURRENT GRAPH TYPE SET { }
删除完整图类型并替换为新图类型
ALTER CURRENT GRAPH TYPE SET {
    (n:Label => :LabelTwo {property :: STRING})
}