NULL
默认情况下,插入点或边时,属性值可以为NULL
,用户也可以设置属性值不允许为NULL
(NOT NULL
),即插入点或边时必须设置该属性的值,除非创建属性时已经设置默认值。
NULL的逻辑操作
AND
、OR
、XOR
和NOT
的真值表如下。
a | b | a AND b | a OR b | a XOR b | NOT a |
---|---|---|---|---|---|
false | false | false | false | false | true |
false | null | false | null | null | true |
false | true | false | true | true | true |
true | false | false | true | true | false |
true | null | null | true | null | false |
true | true | true | true | false | false |
null | false | false | null | null | null |
null | null | null | null | null | null |
null | true | null | true | null | null |
OpenCypher兼容性
Nebula Graph中,NULL的比较和操作与openCypher不同,后续也可能会有变化。
NULL的比较
Nebula Graph中,NULL的比较操作不兼容openCypher。
NULL的操作和返回
Nebula Graph中,对NULL的操作以及返回结果不兼容openCypher。
示例
使用NOT NULL
创建标签,名称为player
,指定属性name
为NOT NULL
。
nebula> CREATE TAG player(name string NOT NULL, age int);
使用SHOW
命令查看创建标签语句,属性name
为NOT NULL
,属性age
为默认的NULL
。
nebula> SHOW CREATE TAG player;
+-----------+-----------------------------------+
| Tag | Create Tag |
+-----------+-----------------------------------+
| "student" | "CREATE TAG `player` ( |
| | `name` string NOT NULL, |
| | `age` int64 NULL |
| | ) ttl_duration = 0, ttl_col = """ |
+-----------+-----------------------------------+
插入点Kobe
,属性age
可以为NULL
。
nebula> INSERT VERTEX player(name, age) VALUES "Kobe":("Kobe",null);
使用NOT NULL并设置默认值
创建标签,名称为player
,指定属性age
为NOT NULL
,并设置默认值18
。
nebula> CREATE TAG player(name string, age int NOT NULL DEFAULT 18);
插入点Kobe
,只设置属性name
。
nebula> INSERT VERTEX player(name) VALUES "Kobe":("Kobe");
查询点Kobe
,属性age
为默认值18
。
nebula> FETCH PROP ON player "Kobe"
+-----------------------------------------+
| vertices_ |
+-----------------------------------------+
| ("Kobe" :player{age: 18, name: "Kobe"}) |
+-----------------------------------------+