显示图类型

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。默认情况下两者均会返回。

列出图类型输出
列 描述 类型

specification

使用规范形式的当前数据库图类型。这可以在 ALTER CURRENT GRAPH TYPE SET 命令中使用,以重新创建相同的图类型。默认输出

STRING

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
显示完整图类型的 specification
SHOW 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 列返回的值
classification 适用对象

dependent

在节点或关系元素类型的标识节点标签/关系类型上定义的属性存在性约束和属性类型约束,或者属于节点或关系元素类型的节点标签存在性约束、关系目标标签约束或关系源标签约束。

undesignated

键约束和属性唯一性约束,无论是在标识还是非标识节点标签或关系类型上定义。

independent

非标识节点标签或关系类型上的属性存在性约束和属性类型约束。.

有关更多信息,请参阅 列出约束的结果列。

显示约束
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 命令创建。
© . This site is unofficial and not affiliated with Neo4j, Inc.