-- 在两个已存在节点间创建关系(需要先找到节点) MATCH (a:Person {name: 'Alice'}), (b:Person {name: 'Bob'}) CREATE (a)-[r:KNOWS {since: 2020}]->(b) RETURN r -- 在创建节点的同时创建关系(适用于节点也不存在时) CREATE (a:Person {name: 'Alice'})-[r:LOVES {since: 2021}]->(b:Person {name: 'Bob'}) RETURN a, r, b
3.1.2 匹配(MATCH)
用于查询图中的节点和关系。通常与 `RETURN` 或 `WHERE` 等子句联用。
查找所有节点:
MATCH (n) RETURN n
查找特定标签的节点:
MATCH (n:Person) RETURN n
根据属性查找节点:
MATCH (n:Person {name: 'Alice'}) RETURN n -- 或使用 WHERE 子句 MATCH (n:Person) WHERE n.name = 'Alice' AND n.age > 25 RETURN n
查找关系:
-- 查找所有 KNOWS 关系 MATCH ()-[r:KNOWS]->() RETURN r -- 查找从 Alice 出发的 KNOWS 关系 MATCH (a:Person {name: 'Alice'})-[r:KNOWS]->(b) RETURN a, r, b
3.1.3 更新(SET, REMOVE)
用于修改节点或关系的属性或标签。
设置/更新属性:
MATCH (n:Person {name: 'Alice'}) SET n.age =31, n.city ='Berlin'RETURN n
移除属性:
MATCH (n:Person {name: 'Alice'}) REMOVE n.city RETURN n -- 或者使用 SET n.property = NULL
添加标签:
MATCH (n:Person {name: 'Alice'}) SET n:Employee RETURN n
移除标签:
MATCH (n:Person:Employee {name: 'Alice'}) REMOVE n:Employee RETURN n
3.1.4 删除(DELETE)
用于删除节点和关系。
警告:必须先删除关系,才能删除节点。
-- 删除一个节点(确保该节点无任何关系) MATCH (n:Person {name: 'Bob'}) DELETE n -- 删除一个节点及其所有相连的关系 MATCH (n:Person {name: 'Bob'}) DETACH DELETE n -- 删除关系 MATCH (a:Person {name: 'Alice'})-[r:KNOWS]->(b:Person {name: 'Bob'}) DELETE r
3.1.5 合并(MERGE)
'有则返回,无则创建'。它确保一个模式存在于图中。如果该模式不存在,则创建它;如果存在,则只是匹配到它。强烈建议与 ON CREATE 和 ON MATCH 一起使用。
-- 合并节点(如果不存在则创建,并设置初始属性) MERGE (n:Person {name: 'Alice'}) ON CREATE SET n.created_at = timestamp() ON MATCH SET n.last_seen = timestamp() RETURN n -- 合并路径(节点和关系) MERGE (a:Person {name: 'Alice'})-[r:KNOWS]->(b:Person {name: 'Bob'}) ON CREATE SET r.since = 2023 RETURN a, r, b
3.2 Neo4j 管理命令(在 Neo4j Browser 或 -Shell 中执行)
这些命令主要用于数据库管理、索引、约束和元数据查询。
3.2.1 约束(Constraints)
用于保证数据的完整性。
创建唯一性约束:
CREATECONSTRAINT constraint_name FOR (n:Person) REQUIRE n.email ISUNIQUE
查看所有约束:
SHOW CONSTRAINTS
删除约束:
DROPCONSTRAINT constraint_name
3.2.2 索引(Indexes)
用于大幅提高查询性能。
创建索引:
CREATE INDEX index_name FOR (n:Person) ON (n.name)
创建复合索引:
CREATE INDEX index_name FOR (n:Person) ON (n.firstName, n.lastName)
查看所有索引:
SHOW INDEXES
删除索引:
DROP INDEX index_name
3.2.3 信息查询(Schema & Info)
查看数据库基本信息:
:sysinfo
查看图数据库的结构(所有标签、关系类型、属性):
CALL db.schema.visualization()
列出所有数据库:
SHOW DATABASES
查看当前数据库的状态和信息:
CALL db.info()
3.2.4 用户与权限管理(企业版功能)
显示所有用户:
SHOW USERS
创建用户:
CREATEUSER username SET PASSWORD 'password' CHANGE NOT REQUIRED SET STATUS ACTIVE
更改用户密码:
ALTERUSER username SET PASSWORD 'newpassword' CHANGE NOT REQUIRED
3.3 实用技巧和命令
3.3.1 清空整个数据库(谨慎使用!)
MATCH (n) DETACH DELETE n
这会删除所有节点和关系,但不会删除索引和约束。
3.3.2 计数:
-- 统计图中所有节点的数量 MATCH (n) RETURN count(n) -- 统计某个标签的节点数量 MATCH (n:Person) RETURN count(n)