-- 在两个已存在节点间创建关系(需要先找到节点)
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
匹配节点与关系
用于查询图中的节点和关系。通常与 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
更新属性与标签
用于修改节点或关系的属性或标签。
设置/更新属性:
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
删除节点与关系
用于删除节点和关系。警告:必须先删除关系,才能删除节点。
-- 删除一个节点(确保该节点无任何关系)
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
合并模式
'有则返回,无则创建'。它确保一个模式存在于图中。如果该模式不存在,则创建它;如果存在,则只是匹配到它。强烈建议与 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
Neo4j 管理命令
这些命令主要用于数据库管理、索引、约束和元数据查询。
约束
用于保证数据的完整性。
创建唯一性约束:
CREATE CONSTRAINT constraint_name FOR (n:Person) REQUIRE n.email IS UNIQUE
查看所有约束:
SHOW CONSTRAINTS
删除约束:
DROP CONSTRAINT constraint_name
索引
用于大幅提高查询性能。
创建索引:
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
信息查询
查看数据库基本信息:
:sysinfo
查看图数据库的结构(所有标签、关系类型、属性):
CALL db.schema.visualization()
列出所有数据库:
SHOW DATABASES
查看当前数据库的状态和信息:
CALL db.info()
用户与权限管理
显示所有用户:
SHOW USERS
创建用户:
CREATE USER username SET PASSWORD 'password' CHANGE NOT REQUIRED SET STATUS ACTIVE
更改用户密码:
ALTER USER username SET PASSWORD 'newpassword' CHANGE NOT REQUIRED
实用技巧
清空整个数据库
MATCH (n) DETACH DELETE n
这会删除所有节点和关系,但不会删除索引和约束。
计数
-- 统计图中所有节点的数量
MATCH (n) RETURN count(n)
-- 统计某个标签的节点数量
MATCH (n:Person) RETURN count(n)