【Cypher】语句有哪些: 创建、查询、更新、删除、索引和约束管理、事务控制、数据导入 等
在 Cypher 查询语言中,主要的语句类型包括数据创建、查询、更新、删除以及高级操作等。Cypher 语句主要包括 创建、查询、更新、删除、索引和约束管理、事务控制、数据导入 等部分。MATCH 和 CREATE 是最常用的语句,用于数据的匹配和创建。MERGE 结合了创建和匹配的特性,确保数据的幂等性。使用 EXPLAIN 和 PROFILE 进行性能分析,可以优化查询速度。
·
在 Cypher 查询语言中,主要的语句类型包括数据创建、查询、更新、删除以及高级操作等。下面是 Cypher 语句的完整分类及详细解释:
一、数据创建语句
1.1 创建节点
CREATE (n:Person {name: 'Alice', age: 30})
CREATE
:创建一个新的节点。(n:Person)
:创建一个Person
标签的节点,并赋值给变量n
。{name: 'Alice', age: 30}
:添加属性name
和age
。
1.2 创建关系
MATCH (a:Person {name: 'Alice'}), (b:Person {name: 'Bob'})
CREATE (a)-[:KNOWS {since: 2020}]->(b)
MATCH
:匹配Alice
和Bob
两个节点。CREATE
:创建KNOWS
关系,带有since
属性。
1.3 使用 MERGE 创建或匹配数据
MERGE (n:Person {name: 'Alice'})
ON CREATE SET n.age = 30
ON MATCH SET n.lastLogin = timestamp()
MERGE
:如果不存在Alice
节点则创建,存在则更新。ON CREATE
:在创建时设置age
。ON MATCH
:在匹配时更新lastLogin
。
二、数据查询语句
2.1 基本 MATCH 语句
MATCH (n)
RETURN n
MATCH
:匹配所有节点。RETURN
:返回匹配到的节点。
2.2 匹配带有标签的节点
MATCH (n:Person)
RETURN n
- 匹配所有
Person
标签的节点。
2.3 匹配节点和关系
MATCH (a:Person)-[r:KNOWS]->(b:Person)
RETURN a, b, r
MATCH
:匹配Person
节点之间的KNOWS
关系。
2.4 条件过滤(WHERE 语句)
MATCH (n:Person)
WHERE n.name = 'Alice' AND n.age > 25
RETURN n
WHERE
:用于属性过滤。AND
和OR
:逻辑条件组合。
2.5 路径匹配
MATCH p = (a:Person)-[:FRIENDS_WITH*1..3]->(b:Person)
RETURN p
p = ...
:将路径赋值给p
变量。[:FRIENDS_WITH*1..3]
:匹配 1 到 3 跳之间的FRIENDS_WITH
关系。
2.6 最短路径匹配
MATCH p = shortestPath((a:Person)-[:KNOWS*]-(b:Person))
RETURN p
shortestPath()
:查找最短路径。KNOWS*
:匹配任意长度的KNOWS
关系。
三、数据更新语句
3.1 更新节点属性
MATCH (n:Person {name: 'Alice'})
SET n.age = 35, n.city = 'New York'
RETURN n
SET
:更新节点的属性或创建新属性。
3.2 更新关系属性
MATCH (a:Person)-[r:KNOWS]->(b:Person)
WHERE a.name = 'Alice' AND b.name = 'Bob'
SET r.since = 2021
RETURN r
SET
:更新关系的属性。
3.3 删除节点属性
MATCH (n:Person {name: 'Alice'})
REMOVE n.age
RETURN n
REMOVE
:删除节点的属性。
3.4 删除节点标签
MATCH (n:Person {name: 'Alice'})
REMOVE n:Person
RETURN n
- 删除
Person
标签,但节点本身不会被删除。
四、数据删除语句
4.1 删除节点和关系
MATCH (n:Person {name: 'Alice'})
DETACH DELETE n
DETACH DELETE
:删除节点和与其关联的所有关系。
4.2 只删除关系
MATCH (a)-[r:KNOWS]->(b)
DELETE r
DELETE
仅删除关系r
,保留节点a
和b
。
五、索引与约束管理语句
5.1 创建索引
CREATE INDEX FOR (n:Person) ON (n.name)
- 为
Person
节点的name
属性创建索引。
5.2 创建唯一性约束
CREATE CONSTRAINT FOR (n:Person) REQUIRE n.name IS UNIQUE
- 确保
Person
节点的name
属性唯一。
5.3 删除索引
DROP INDEX index_name
- 删除指定的索引。
5.4 删除约束
DROP CONSTRAINT constraint_name
- 删除指定的约束。
六、事务与控制语句
6.1 开启、提交和回滚事务
BEGIN
MATCH (n:Person)
SET n.status = 'active'
COMMIT
BEGIN
:开启一个事务。COMMIT
:提交事务。
BEGIN
MATCH (n:Person)
SET n.status = 'inactive'
ROLLBACK
ROLLBACK
:回滚事务,撤销所有更改。
七、CALL 语句与子查询
7.1 调用存储过程
CALL db.schema.visualization()
CALL
语句用于调用 Neo4j 内置的存储过程。
7.2 使用子查询
MATCH (m:Movie)
CALL {
WITH m
MATCH (m)<-[:ACTED_IN]-(p:Person)
RETURN collect(p.name) AS actors
}
SET m.actors = actors
RETURN m
CALL {}
子查询用于在主查询内部执行嵌套查询。WITH
将外部变量传入子查询。
八、LOAD CSV 数据导入语句
8.1 导入 CSV 数据
LOAD CSV WITH HEADERS FROM 'file:///movies.csv' AS row
CREATE (:Movie {title: row.title, released: toInteger(row.released)})
LOAD CSV
从指定路径加载 CSV 文件。WITH HEADERS
表示 CSV 文件的第一行是列名。
8.2 更新节点数据
LOAD CSV WITH HEADERS FROM 'file:///actors.csv' AS row
MATCH (p:Person {name: row.name})
SET p.age = toInteger(row.age)
- 通过
MATCH
查询匹配的节点,并使用SET
更新数据。
九、特殊语句与高级用法
9.1 使用 OPTIONAL MATCH
MATCH (p:Person)
OPTIONAL MATCH (p)-[r:KNOWS]->(f:Person)
RETURN p.name, f.name
OPTIONAL MATCH
:即使匹配失败,也不会过滤掉p
,而是将f
返回为NULL
。
9.2 使用 UNION 合并多个查询
MATCH (n:Person) RETURN n.name AS name
UNION
MATCH (m:Movie) RETURN m.title AS name
UNION
将多个查询的结果合并。
9.3 使用 EXPLAIN 和 PROFILE 进行查询优化
EXPLAIN MATCH (n:Person) WHERE n.name = 'Alice' RETURN n
EXPLAIN
只显示查询计划,不实际执行查询。
PROFILE MATCH (n:Person) WHERE n.name = 'Alice' RETURN n
PROFILE
执行查询,并返回详细的执行计划信息。
十、总结
- Cypher 语句主要包括 创建、查询、更新、删除、索引和约束管理、事务控制、数据导入 等部分。
MATCH
和CREATE
是最常用的语句,用于数据的匹配和创建。MERGE
结合了创建和匹配的特性,确保数据的幂等性。- 使用
EXPLAIN
和PROFILE
进行性能分析,可以优化查询速度。

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)