显示图类型仅限 Cypher 25企业版Neo4j 2026.02 中引入
SHOW CURRENT GRAPH TYPE 命令允许您查看当前数据库的图类型规范。
查看图类型需要具备 SHOW CONSTRAINTS 权限。 |
设置图类型 (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
}
显示完整图类型
SHOW CURRENT GRAPH TYPE
结果
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| specification |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| "{ |
| (:`City` => {`name` :: STRING NOT NULL, `population` :: INTEGER}), |
| (:`Company` => {`address` :: STRING, `name` :: STRING}), |
| (:`Person` => :`Resident` {`name` :: STRING, `ssn` :: INTEGER}), |
| (:`Pet` => :`Animal`&`Resident` {`healthCertificate` :: STRING, `insuranceNumber` :: INTEGER, `name` :: STRING}), |
| (:`Robot` => :`Machine`&`Resident` {`application` :: STRING NOT NULL, `id` :: INTEGER NOT NULL}), |
| (:`Resident`)-[:`LIVES_IN` => {`since` :: ANY NOT NULL}]->(:`City` =>), |
| (:`Person` =>)-[:`WORKS_FOR` => {`role` :: STRING}]->(:`Company` =>), |
| CONSTRAINT `constraint_d7524c38` FOR (`n`:`Company` =>) REQUIRE (`n`.`address`) IS UNIQUE, |
| CONSTRAINT `company_name` FOR (`n`:`Company` =>) REQUIRE (`n`.`name`) IS KEY, |
| CONSTRAINT `constraint_bb1018eb` FOR (`n`:`Person` =>) REQUIRE (`n`.`name`, `n`.`ssn`) IS KEY, |
| CONSTRAINT `constraint_302a3693` FOR (`n`:`Pet` =>) REQUIRE (`n`.`healthCertificate`) IS UNIQUE, |
| CONSTRAINT `constraint_aa881a72` FOR (`n`:`Pet` =>) REQUIRE (`n`.`insuranceNumber`) IS KEY, |
| CONSTRAINT `animal_id` FOR (`n`:`Animal`) REQUIRE (`n`.`id`) IS UNIQUE, |
| CONSTRAINT `resident_address` FOR (`n`:`Resident`) REQUIRE (`n`.`address`) IS :: STRING |
| }" |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
无论使用何种语法来定义属性唯一性约束或键约束,它们在 SHOW CURRENT GRAPH TYPE 返回的 specification 中均会使用 CONSTRAINT … FOR … REQUIRE 语法显示。 |
SHOW CURRENT GRAPH TYPE 的结果列
SHOW CURRENT GRAPH TYPE 有两个返回列:type 和 specification。默认情况下两者均会返回。
| 列 | 描述 | 类型 |
|---|---|---|
|
使用规范形式的当前数据库图类型。这可以在 |
|
SHOW CURRENT GRAPH TYPE 中的约束
使用 CREATE CONSTRAINT 命令创建的约束(即不是通过 ALTER CURRENT GRAPH TYPE SET、ADD 或 ALTER 添加的约束)会自动添加到图类型中。因此,它们会出现在 SHOW CURRENT GRAPH TYPE 的结果中。
使用
CREATE CONSTRAINT 命令创建节点属性唯一性约束CREATE CONSTRAINT car_constraint FOR (c:Car) REQUIRE c.licensePlate IS UNIQUE
显示完整图类型的
specificationSHOW CURRENT GRAPH TYPE YIELD specification
结果
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| specification |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| "{ |
| (:`City` => {`name` :: STRING NOT NULL, `population` :: INTEGER}), |
| (:`Company` => {`address` :: STRING, `name` :: STRING}), |
| (:`Person` => :`Resident` {`name` :: STRING, `ssn` :: INTEGER}), |
| (:`Pet` => :`Animal`&`Resident` {`healthCertificate` :: STRING, `insuranceNumber` :: INTEGER, `name` :: STRING}), |
| (:`Robot` => :`Machine`&`Resident` {`application` :: STRING NOT NULL, `id` :: INTEGER NOT NULL}), |
| (:`Resident`)-[:`LIVES_IN` => {`since` :: ANY NOT NULL}]->(:`City` =>), |
| (:`Person` =>)-[:`WORKS_FOR` => {`role` :: STRING}]->(:`Company` =>), |
| CONSTRAINT `constraint_d7524c38` FOR (`n`:`Company` =>) REQUIRE (`n`.`address`) IS UNIQUE, |
| CONSTRAINT `company_name` FOR (`n`:`Company` =>) REQUIRE (`n`.`name`) IS KEY, |
| CONSTRAINT `constraint_bb1018eb` FOR (`n`:`Person` =>) REQUIRE (`n`.`name`, `n`.`ssn`) IS KEY, |
| CONSTRAINT `constraint_302a3693` FOR (`n`:`Pet` =>) REQUIRE (`n`.`healthCertificate`) IS UNIQUE, |
| CONSTRAINT `constraint_aa881a72` FOR (`n`:`Pet` =>) REQUIRE (`n`.`insuranceNumber`) IS KEY, |
| CONSTRAINT `animal_id` FOR (`n`:`Animal`) REQUIRE (`n`.`id`) IS UNIQUE, |
| CONSTRAINT `car_constraint` FOR (`n`:`Car`) REQUIRE (`n`.`licensePlate`) IS UNIQUE, |
| CONSTRAINT `resident_address` FOR (`n`:`Resident`) REQUIRE (`n`.`address`) IS :: STRING |
| }" |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
SHOW CONSTRAINTS 中的图类型元素
图类型中的每个元素都通过约束实现。无论在图类型中添加了什么,SHOW CONSTRAINTS 命令都会相应地返回。有关此命令的完整信息(包括其返回列),请参阅 显示约束。
查看约束需要具备 SHOW CONSTRAINTS 权限。 |
特别值得关注的是 SHOW CONSTRAINTS 返回的 enforcedLabel 和 classification 列。enforcedLabel 返回属于节点元素类型的隐含节点标签,以及属于关系元素类型的源节点标签和目标节点标签。classification 描述了约束在图类型中的状态,有三种可能的返回值:
classification |
适用对象 |
|---|---|
|
在节点或关系元素类型的标识节点标签/关系类型上定义的属性存在性约束和属性类型约束,或者属于节点或关系元素类型的节点标签存在性约束、关系目标标签约束或关系源标签约束。 |
|
|
|
有关更多信息,请参阅 列出约束的结果列。
显示约束
SHOW CONSTRAINTS YIELD name, type, labelsOrTypes, enforcedLabel, classification
ORDER BY labelsOrTypes
结果
+------------------------------------------------------------------------------------------------------------+
| name | type | labelsOrTypes | enforcedLabel | classification |
+------------------------------------------------------------------------------------------------------------+
| "animal_id" | "NODE_PROPERTY_UNIQUENESS" | ["Animal"] | NULL | "undesignated" |
| "car_constraint" | "NODE_PROPERTY_UNIQUENESS" | ["Car"] | NULL | "undesignated" |
| "constraint_22a8753a" | "NODE_PROPERTY_EXISTENCE" | ["City"] | NULL | "dependent" |
| "constraint_83085900" | "NODE_PROPERTY_TYPE" | ["City"] | NULL | "dependent" |
| "constraint_ff70b222" | "NODE_PROPERTY_TYPE" | ["City"] | NULL | "dependent" |
| "company_name" | "NODE_KEY" | ["Company"] | NULL | "undesignated" |
| "constraint_437f8bc9" | "NODE_PROPERTY_TYPE" | ["Company"] | NULL | "dependent" |
| "constraint_56444b08" | "NODE_PROPERTY_TYPE" | ["Company"] | NULL | "dependent" |
| "constraint_d7524c38" | "NODE_PROPERTY_UNIQUENESS" | ["Company"] | NULL | "undesignated" |
| "constraint_2fd51eaf" | "RELATIONSHIP_TARGET_LABEL" | ["LIVES_IN"] | "City" | "dependent" |
| "constraint_9dfe66aa" | "RELATIONSHIP_SOURCE_LABEL" | ["LIVES_IN"] | "Resident" | "dependent" |
| "constraint_f26c0c3d" | "RELATIONSHIP_PROPERTY_EXISTENCE" | ["LIVES_IN"] | NULL | "dependent" |
| "constraint_77504979" | "NODE_PROPERTY_TYPE" | ["Person"] | NULL | "dependent" |
| "constraint_82630a6c" | "NODE_LABEL_EXISTENCE" | ["Person"] | "Resident" | "dependent" |
| "constraint_96f964fb" | "NODE_PROPERTY_TYPE" | ["Person"] | NULL | "dependent" |
| "constraint_bb1018eb" | "NODE_KEY" | ["Person"] | NULL | "undesignated" |
| "constraint_302a3693" | "NODE_PROPERTY_UNIQUENESS" | ["Pet"] | NULL | "undesignated" |
| "constraint_aa881a72" | "NODE_KEY" | ["Pet"] | NULL | "undesignated" |
| "constraint_afe0a8de" | "NODE_LABEL_EXISTENCE" | ["Pet"] | "Resident" | "dependent" |
| "constraint_c2c72e5b" | "NODE_LABEL_EXISTENCE" | ["Pet"] | "Animal" | "dependent" |
| "constraint_c79712fe" | "NODE_PROPERTY_TYPE" | ["Pet"] | NULL | "dependent" |
| "constraint_e6253a9f" | "NODE_PROPERTY_TYPE" | ["Pet"] | NULL | "dependent" |
| "constraint_f44978e8" | "NODE_PROPERTY_TYPE" | ["Pet"] | NULL | "dependent" |
| "resident_address" | "NODE_PROPERTY_TYPE" | ["Resident"] | NULL | "independent" |
| "constraint_12d19793" | "NODE_LABEL_EXISTENCE" | ["Robot"] | "Machine" | "dependent" |
| "constraint_5d3b927" | "NODE_PROPERTY_TYPE" | ["Robot"] | NULL | "dependent" |
| "constraint_6e2d3d78" | "NODE_LABEL_EXISTENCE" | ["Robot"] | "Resident" | "dependent" |
| "constraint_8993edce" | "NODE_PROPERTY_TYPE" | ["Robot"] | NULL | "dependent" |
| "constraint_94c37fdc" | "NODE_PROPERTY_EXISTENCE" | ["Robot"] | NULL | "dependent" |
| "constraint_e5820d7e" | "NODE_PROPERTY_EXISTENCE" | ["Robot"] | NULL | "dependent" |
| "constraint_57239b68" | "RELATIONSHIP_SOURCE_LABEL" | ["WORKS_FOR"] | "Person" | "dependent" |
| "constraint_d7a3733b" | "RELATIONSHIP_TARGET_LABEL" | ["WORKS_FOR"] | "Company" | "dependent" |
| "constraint_df70c64c" | "RELATIONSHIP_PROPERTY_TYPE" | ["WORKS_FOR"] | NULL | "dependent" |
+------------------------------------------------------------------------------------------------------------+
所有 dependent(从属)的节点标签存在性约束、关系源/目标标签约束、属性存在性约束和属性类型约束都有一个生成的名称。这是因为当它们在各自的节点和关系元素类型中定义时,无法命名。这些约束的 createStatement 列也将返回 null,因为它们无法通过 CREATE CONSTRAINT 命令创建。 |