概述
类型图受其图类型(或称Schema、模式)约束,它为数据写入提供严格的结构规范,即插入点、边的Schema或属性若未预先定义,则无法插入。图类型确保高度的数据完整性与一致性,图类型在图创建之后仍可以修改。
在类型图中:
- 每个点或边属于且仅属于一个Schema,Schema名称即为它的标签。
- 每个Schema关联一组属性,每个属性有明确的值类型。
对于类型图,点和边的Schema及其属性必须被显式定义。这些定义可以在创建图时完成,也可以在后续添加,并且在图的生命周期内可根据需要轻松修改。
创建类型图
图类型为空
创建图类型为空的图g1:
CREATE GRAPH g1
图g1为类型图,它被创建时只有内置的default点Schema和default边Schema。
自定义图类型
创建一个带图类型定义的图g2,包括:
- 点Schema
User,关联属性name(STRING类型)和age(UINT32类型) - 点Schema
Club,关联属性name(STRING类型) - 边Schema
Follows,关联属性createdOn(LOCAL DATETIME类型) - 边Schema
Joins,没有关联任何属性
CREATE GRAPH g2 {
NODE User ({name STRING, age UINT32}),
NODE Club ({name STRING}),
EDGE Follows ()-[{createdOn LOCAL DATETIME}]->(),
EDGE Joins ()-[]->()
}
预定义的图类型
使用预定义的图类型gType(如何管理图类型)创建图g3:
CREATE GRAPH g3 gType
或
CREATE GRAPH g3 :: gType
或
CREATE GRAPH g3TYPED gType
创建图g3的同时创建图类型gType定义的所有Schema和属性。
其他图的图类型
复用已有图trans的图类型创建图g4:
CREATE GRAPH g4 LIKE trans
关键词LIKE指定要复用其图类型的图。创建图g4的同时创建图trans中定义的所有Schema和属性。
管理图类型
图类型定义点Schema、边Schema及其关联的属性,为图设定结构规则。你在数据库中定义和存储图类型,以便在创建新图时使用。
显示图类型
获取数据库中的图类型:
SHOW GRAPH TYPE
每个图类型包含以下信息:
字段 |
描述 |
|---|---|
name |
图类型的唯一名称 |
gql |
创建图类型时使用的GQL语句 |
创建图类型
创建图类型gType:
CREATE GRAPH TYPE gType {
NODE User ({name STRING, age UINT32}),
NODE Club ({name STRING}),
EDGE Follows ()-[{createdOn LOCAL DATETIME}]->(),
EDGE Joins ()-[]->()
}
删除图类型
删除图类型gType:
DROP GRAPH TYPE gType
使用IF EXISTS子句可避免尝试删除不存在的图类型时报错,从而安全执行语句。
DROP GRAPH TYPE IF EXISTS gType
只有当图类型gType存在时,才会将其删除。如果gType不存在,该语句将被忽略且不会报错。
属性加密
创建类型图或图类型时,可以对任意属性进行加密,支持的加密方法有:AES128、AES256、RSA和ECC。
创建图g5,加密User点的name属性:
CREATE GRAPH g5 {
NODE User ({name STRING encrypt("AES128"), age UINT32}),
NODE Club ({name STRING}),
EDGE Follows ()-[{createdOn LOCAL DATETIME}]->(),
EDGE Joins ()-[]->()
}
创建图类型gType_1,加密User点的name属性:
CREATE GRAPH TYPE gType_1 {
NODE User ({name STRING encrypt("AES128"), age UINT32}),
NODE Club ({name STRING}),
EDGE Follows ()-[{createdOn LOCAL DATETIME}]->(),
EDGE Joins ()-[]->()
}
显示Schema和属性
获取当前图的所有点Schema:
SHOW NODE SCHEMA
获取当前图的所有边Schema:
SHOW EDGE SCHEMA
获取当前图中与点Schema User关联的所有属性:
SHOW NODE User PROPERTY
获取当前图中与边Schema Joins关联的所有属性:
SHOW EDGE Joins PROPERTY
每个Schema包含以下信息:
字段 |
描述 |
|---|---|
id |
Schema ID |
name |
Schema名称 |
description |
Schema注释 |
status |
Schema状态,仅有CREATED |
properties |
Schema关联的属性 |
每个属性包含以下信息:
字段 |
描述 |
|---|---|
name |
属性名称 |
type |
属性值类型 |
lte |
属性是否已加载至分片内存以加速查询 |
read |
当前数据库用户能否读取该属性,1表示允许,0表示禁止 |
write |
当前数据库用户能否写入该属性,1表示允许,0表示禁止 |
schema |
属性关联的Schema |
description |
属性的注释 |
encrypt |
加密属性的方法 |
新增Schema和属性
你可以在一个类型图中新增Schema和属性。
在图g1中新增点Schema User和Club:
ALTER GRAPH g1 ADD NODE {
User ({username STRING, gender STRING}),
Club ({name STRING, score FLOAT})
}
在图g1中新增边Schema Follows:
ALTER GRAPH g1 ADD EDGE {
Follows ()-[{createdOn DATE}]->()
}
给当前图的点Schema User新增属性tags:
ALTER NODE user ADD PROPERTY {tags LIST<STRING>}}
给当前图的边Schema links新增属性distance和weight:
ALTER EDGE links ADD PROPERTY {
distance FLOAT,
weight DECIMAL(10,5)
}
你也可以给当前图的所有的点Schema或边Schema新增属性。例如,给所有边Schema新增属性when:
ALTER EDGE * ADD PROPERTY {when DATE}
修改Schema
你可以修改当前图中Schema的名称和注释。
将当前图的点Schema School重命名为University:
ALTER NODE School RENAME TO University
将当前图的边Schema Follows重命名为Follow:
ALTER EDGE Follows RENAME TO Follow
修改当前图的点Schema User的注释:
ALTER NODE User COMMENT "Self-registration"
修改当前图的边Schema Follows的注释:
ALTER EDGE Follows COMMENT "From user to user"
同时修改名称和注释:
ALTER NODE User RENAME TO User_s2 COMMENT "Self-registration"
修改属性
你可以修改当前图中属性的名称和注释。
将当前图点Schema User的属性name重命名为username:
ALTER NODE User name RENAME TO username
将当前图边Schema Follows的属性createdOn重命名为startDate:
ALTER EDGE Follows createdOn RENAME TO startDate
修改当前图点Schema User的属性name的注释:
ALTER NODE User name COMMENT "Contains 5 to 64 characters"
修改当前图边Schema Follows的属性createdOn的注释:
ALTER EDGE Follows createdOn COMMENT "When the relationship is established"
同时修改名称和注释:
ALTER EDGE Follows createdOn RENAME TO startDate COMMENT "When the relationship is established"
删除Schema和属性
你可以删除图中的Schema和属性:
- 删除Schema:删除点或边Schema时,所有属于该Schema的点或边会被一并删除。需要注意的是,当点被删除时,与其连接的所有边也会自动被移除。系统内置的两个
defaultSchema不可删除。 - 删除属性:当删除某个属性时,所有相关的数据——包括该属性的值、关联的索引以及缓存的值——都会被永久移除。
Schema删除操作以作业形式进行,稍后可使用SHOW JOB <id?>确认删除操作是否完成。
删除图g1的点Schema User:
ALTER GRAPH g1 DROP NODE User
删除图g1的边Schema Follows和StudyAt:
ALTER GRAPH g1 DROP EDGE Follows, StudyAt
删除当前图User点的属性name和age:
ALTER NODE User DROP PROPERTY name, age
删除当前图links边的属性when:
ALTER EDGE links DROP PROPERTY when
删除当前图所有点的属性location:
ALTER NODE * DROP PROPERTY location