如何在Memgraph中同时实现节点属性的存在与唯一约束?
如何同时实现属性的存在性与唯一性约束?
我知道下面这条语句仅强制执行存在约束,不包含唯一性限制:
CREATE CONSTRAINT ON (c:City) ASSERT exists (c.name);
若要实现唯一性约束,我会使用如下语法:
CREATE CONSTRAINT ON (c:City) ASSERT c.name IS UNIQUE
请问能否同时实现属性的存在性与唯一性约束?我尝试执行以下语句,但出现错误:
CREATE CONSTRAINT ON (c:City) ASSERT exists (c.name) IS UNIQUE;
错误信息:
Query failed: line 2:24 mismatched input 'IS' expecting {<EOF>, ';'}
解决方案
在Neo4j中,无法通过单条ASSERT语句同时声明存在性和唯一性约束,但可以通过创建两条独立的约束来达成需求:
- 第一步,创建属性存在约束:
CREATE CONSTRAINT ON (c:City) ASSERT exists(c.name);
- 第二步,创建属性唯一约束:
CREATE CONSTRAINT ON (c:City) ASSERT c.name IS UNIQUE;
这两条约束会同时生效:前者确保所有:City节点必须包含name属性,后者保证name属性的值不会重复。
另外补充:在Neo4j 4.0及以上版本中,唯一约束本身就隐含了存在性约束——创建唯一约束后,数据库会自动要求该属性必须存在。如果你的Neo4j版本符合这个条件,只需要创建唯一约束就可以同时满足两个要求,无需额外创建存在约束。
内容的提问来源于stack exchange,提问作者KWriter
相关产品推荐
相关产品推荐

