数据类型¶
数据类型,也称为值类型,用于描述表达式、变量、参数、查询结果以及属性值所能包含的值。在创建图类型时,需要指定每个属性值的数据类型,属性值的数据类型决定了该属性可以存储的值。
并非所有值类型都可以用于定义点或边的属性。例如,NODE和EDGE用于表示图元素引用,NULL用于表示缺少实际值,它们不能作为属性类型使用。
数据类型的分类¶
为便于区分不同类型的使用场景,悦数图数据库开发版支持的值类型按用途分为以下几类:
| 类别 | 类型 | 可作为属性类型 | 主要使用场景 |
|---|---|---|---|
| 基本属性值类型 | 数值、字符串、布尔、日期和时间、向量 | 是 | 点或边的属性、变量、参数和表达式 |
| 容器及复合值类型 | 列表、集合、映射、地理空间 | 取决于具体值类型,以及使用的是持久图还是临时图 | 属性、变量和表达式 |
| 查询结果类型 | 路径、记录 | 否 | 路径匹配、记录和表结果 |
| 表类型 | 表 | 否 | 表变量、过程参数、中间结果和查询结果 |
| 图元素引用类型 | NODE 和 EDGE | 否 | MATCH变量、过程参数和查询结果 |
| 非物质值类型 | NULL | 否 | NULL表达式和类型推导 |
属性值类型限制¶
本节仅介绍可以用于定义点或边属性的值类型。NODE、EDGE、PATH、RECORD、TABLE和NULL不能作为属性类型,因此不列入下表。
悦数图数据库开发版中的临时图为可变(mutable)临时图,支持通过 DML 语句(INSERT、SET、DELETE)对数据进行修改。但可变临时图对属性数据类型有以下限制:
| 数据类型 | 持久图 | 临时图 | 说明 |
|---|---|---|---|
| 集合(SET) | ✅ | ❌ | 不支持作为临时图属性类型 |
| 映射(MAP) | ✅ | ❌ | 不支持作为临时图属性类型 |
地理空间(GEOGRAPHY) |
✅ | ❌ | 不支持作为临时图属性类型 |
| 列表(LIST) | ✅ | ✅* | 支持,但元素类型也须为支持的类型(递归检查) |
| 其他类型 | ✅ | ✅ | 数值/字符串/布尔/日期时间/向量等均支持 |
Caution
如果在创建临时图所引用的图类型中使用了SET、MAP或GEOGRAPHY类型的属性,创建临时图时将报错。请确保临时图引用的图类型仅包含支持的属性类型。
有关不同属性值类型支持的索引类型,请参见属性值类型与索引支持。
数据类型转换¶
GQL 支持不同数据类型之间的类型转换。更多信息,请参见类型转换表达式。
操作符¶
操作符用于进行数据操作。不同数据类型支持的数据操作不同。更多信息,请参见操作符。
值的约束¶
在为属性值指定数据类型后,可以添加约束条件以限制可以存储在属性中的值。支持的约束包括可否为 NULL、默认值和唯一性。
可否为 NULL¶
属性值的数据类型分为可为 NULL 和不可为 NULL 两种。
如果一个数据类型可为 NULL,则该数据类型的属性值可以是NULL。NULL是一个特殊值,表示没有值,与空字符串或零不同。默认情况下,属性值都是可为 NULL 的。NULL值、NULL类型和可否为 NULL 的区别,请参见 NULL 类型。
如果一个数据类型不可为 NULL,则该数据类型的属性值不能是NULL,必须是一个有效值。
有关如何指定数据类型可否为 NULL,请参见 CREATE GRAPH TYPE。
默认值¶
每个数据类型都可以设置默认值。如果某个属性值的数据类型可为 NULL,则其默认值为NULL。如果属性值的数据类型不可为 NULL,则默认值是另外指定的值。
有关如何指定数据类型的默认值,请参见 CREATE GRAPH TYPE。
唯一性¶
在定义点或边类型的属性时,其属性值可能会受到某些唯一性约束的限制。
Note
同一个点或边类型中的属性名必须唯一。
如果一个属性被单独声明为点类型的PRIMARY KEY或边类型的MULTIEDGE KEY,则该属性的值必须在该点类型的所有点或该边类型的所有边中唯一。
如果多个属性被联合声明为点类型的PRIMARY KEY或边类型的MULTIEDGE KEY,则这些属性值的组合必须在该点类型的所有点或该边类型的所有边中唯一。
有关如何指定主键或多边键,请参见 CREATE GRAPH TYPE。