概述
约束对进入图集中的数据施加限制规则。如果数据修改操作与约束有冲突,将引发报错。
支持以下约束:
显示约束
获取当前图集为点属性创建的所有约束:
SHOW NODE CONSTRAINT
获取当前图集为边属性创建的所有约束:
SHOW EDGE CONSTRAINT
约束信息展示在表_nodeConstraint
和表 _edgeConstraint
中,包含以下字段:
字段 |
描述 |
---|---|
name |
约束名称 |
type |
约束类型 |
schema |
应用约束的点Schema或边Schema |
properties |
应用约束的点属性或边属性 |
status |
约束的状态,包括DONE 和CREATING |
创建约束
使用语句ALTER NODE
或ALTER EDGE
创建约束。约束创建以作业形式执行,稍后可使用SHOW JOB <id?>
来验证是否创建成功。
创建约束需要一些时间,因为系统需扫描全部现有数据,以确保其符合约束要求。如果现有数据与约束不符,则约束创建失败。此外,为确保数据一致性,创建约束时,会暂停其他数据修改操作。
EDGE KEY
EDGE KEY
约束指定一个或多个边属性作为图中所有边的唯一标识符。当指定多个属性时,也称为复合EDGE KEY
约束。
EDGE KEY
中的每个属性都必须存在于所有边Schema中,并使用一致的值类型。对于单属性EDGE KEY
,该属性的值在所有边中不重复且非null。对于复合EDGE KEY
,每个属性的值非null,并且它们的值的组合在所有边中不重复。
详情
- 每个图只能创建一个单属性或复合
EDGE KEY
。 list
类型的属性无法在EDGE KEY
中使用。EDGE KEY
中的属性会自动缓存,以加速查询。- 创建
EDGE KEY
约束时,要求每个Shard中的属性值唯一,但允许不同分片中存在重复值。但EDGE KEY
创建完成后,所有的数据修改必须遵守全局唯一性。
为边属性eUID
创建EDGE KEY
约束,成功创建必须满足以下条件:
- 所有边Schema均有
eID
属性,其类型必须为int32
。 - 各分片中,
eID
属性值必须唯一且不存在null
值。
ALTER EDGE * ADD CONSTRAINT EDGE KEY ON eID INT32
默认属性值类型
未指定边属性值类型时,默认使用string
:
ALTER EDGE * ADD CONSTRAINT EDGE KEY ON tag
本例中,所有边Schema必须包含string
类型的tag
属性。
复合EDGE KEY约束
复合EDGE KEY
约束涉及多个边属性。其创建要求与单属性EDGE KEY
约束相同,但唯一性是基于指定属性的组合值强制执行的。
为边属性eID
和tag
创建复合EDGE KEY
约束:
ALTER EDGE * ADD CONSTRAINT EDGE KEY ON eID INT32, tag STRING
NOT NULL
NOT NULL
约束要求一个属性不可有null
值。请留意,一个NOT NULL
约束只能作用于一个Schema的一个属性。
为user
点的name
属性创建NOT NULL
约束:
ALTER NODE user ADD CONSTRAINT NOT NULL ON name
为link
边的weight
属性创建NOT NULL
约束:
ALTER EDGE link ADD CONSTRAINT NOT NULL ON weight
当指定属性不存在null
值时,约束才能创建成功。
使用IF NOT EXISTS
IF NOT EXISTS
子句用于防止在尝试创建已存在的约束时出错,它允许安全地执行语句。
ALTER NODE user ADD CONSTRAINT IF NOT EXISTS NOT NULL ON name
仅当不存在user
点的name
属性的NOT NULL
约束时,才会创建约束。如果已存在,则忽略该语句,不会引发报错。
删除约束
使用语句ALTER NODE
或ALTER EDGE
删除约束。
删除当前图的EDGE KEY
约束:
ALTER EDGE * DROP EDGE KEY
删除user
点的name
属性的NOT NULL
约束:
ALTER NODE user DROP CONSTRAINT NOT NULL ON name
对带有约束的属性限制
重命名属性
应用了NOT NULL
约束的属性可以重命名。但应用了EDGE KEY
约束的属性不可重命名。
删除属性
应用了约束的属性无法删除,除非所有相关约束均已删除。