跳转至

CREATE EDGE

CREATE EDGE语句可以通过指定名称创建一个 Edge type。

OpenCypher 兼容性

nGQL 中的 Edge type 和 openCypher 中的关系类型相似,但又有所不同,例如它们的创建方式。

  • openCypher 中的关系类型需要在CREATE语句中与点一起创建。
  • nGQL 中的 Edge type 需要使用CREATE EDGE语句独立创建。Edge type 更像是 MySQL 中的表。

前提条件

执行CREATE EDGE语句需要当前登录的用户拥有指定图空间的创建 Edge type 权限,否则会报错。

语法

创建 Edge type 前,需要先用USE语句指定工作空间。

CREATE EDGE [IF NOT EXISTS] <edge_type_name>
    (
      <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>']
      [{, <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>']} ...] 
    )
    [TTL_DURATION = <ttl_duration>]
    [TTL_COL = <prop_name>]
    [COMMENT = '<comment>'];
参数 说明
IF NOT EXISTS 检测待创建的 Edge type 是否存在,只有不存在时,才会创建 Edge type。仅检测 Edge type 的名称,不会检测具体属性。
<edge_type_name> 1、每个图空间内的 Edge type 必须是唯一的。
2、Edge type 名称设置后无法修改。
3、默认情况下,仅支持 1~4 字节的 UTF-8 编码字符,包括英文字母(区分大小写)、数字、中文等。不能包含下划线(_)以外的特殊字符,且不能以数字开头。
4、如果需要使用特殊字符、保留关键字或者以数字开头,请使用反引号(`)包围整个名称。反引号中不能包含英文句号(.)。详情参见关键字和保留字
注意
1、如果以中文命名 Edge type,报SyntaxError错误时,需使用反引号(`)包围中文字符。
2、名称中如需包含反引号(`),使用反斜杠(\)来转义反引号(`),如:\`;如需包含反斜杠(\),反斜杠(\)本身也需转义,如:\\。
<prop_name> 属性名称。每个 Edge type 中的属性名称必须唯一。属性的命名规则与 Edge type 相同。
<data_type> 属性的数据类型,目前支持数值布尔字符串日期与时间以及地理空间
NULL | NOT NULL 指定属性值是否支持为NULL。默认值为NULL。当指定属性值为NOT NULL时,必需指定属性的默认值,也就是DEFAULT的值。
DEFAULT 指定属性的默认值。默认值可以是一个文字值或 NebulaGraph 支持的表达式。如果插入边时没有指定某个属性的值,则使用默认值。
COMMENT 对单个属性或 Edge type 的描述。最大为 256 字节。默认无描述。
TTL_DURATION 指定时间戳差值,单位:秒。时间戳差值必须为 64 位非负整数。属性值和时间戳差值之和如果小于当前时间戳,属性就会过期。默认值为0,表示属性永不过期。
TTL_COL 指定要设置存活时间的属性。属性的数据类型必须是int或者timestamp。一个 Edge type 只能指定一个字段为TTL_COL。更多 TTL 的信息请参见 TTL

示例

nebula> CREATE EDGE IF NOT EXISTS follow(degree int);

# 创建没有属性的 Edge type。
nebula> CREATE EDGE IF NOT EXISTS no_property();

# 创建包含默认值的 Edge type。
nebula> CREATE EDGE IF NOT EXISTS follow_with_default(degree int DEFAULT 20);

# 对字段 p2 设置 TTL 为 100 秒。
nebula> CREATE EDGE IF NOT EXISTS e1(p1 string, p2 int, p3 timestamp) \
        TTL_DURATION = 100, TTL_COL = "p2";

最后更新: 2024年12月19日