Neo4j 使用 Cypher 作为查询语言,这是一种声明式图查询语言,专门用于处理图形数据库中的数据。以下是 Neo4j 和 Cypher 的一些基础语法介绍:
### 创建节点和关系
1. **创建节点**:
- 基本格式:`CREATE (variable:Label {key: value, ...})`
- 示例:创建一个标签为 `英雄`,名字为 `张无忌` 的节点
```cypher
CREATE (n:英雄 {name: '张无忌'})
```
2. **创建关系**:
- 基本格式:`MATCH (node1), (node2) CREATE (node1)-[:RELATIONSHIP_TYPE {key: value}]->(node2)`
- 示例:创建从 `张无忌` 到 `杨逍` 的关系 `师徒`
```cypher
MATCH (a:英雄 {name: '张无忌'}), (b:英雄 {name: '杨逍'})
CREATE (a)-[:师徒]->(b)
```
### 查询节点和关系
1. **查询所有节点和关系**:
```cypher
MATCH (n) RETURN n
```
2. **根据标签查询节点**:
```cypher
MATCH (n:英雄) RETURN n
```
3. **查询特定属性的节点**:
```cypher
MATCH (n:英雄 {name: '张无忌'}) RETURN n
```
4. **查询与某个节点有关系的所有节点**:
```cypher
MATCH (n:英雄 {name: '张无忌'})-[:师徒]->(m) RETURN m
```
### 更新节点或关系
1. **更新节点属性**:
```cypher
MATCH (n:英雄 {name: '张无忌'}) SET n.age = 25 RETURN n
```
2. **添加新属性到节点**:
```cypher
MATCH (n:英雄 {name: '张无忌'}) SET n.newProperty = 'value' RETURN n
```
### 删除节点和关系
1. **删除关系**:
```cypher
MATCH (a:英雄 {name: '张无忌'})-[r:师徒]->(b) DELETE r
```
2. **删除节点(需要先删除关系)**:
```cypher
MATCH (n:英雄 {name: '张无忌'}) DETACH DELETE n
```
注意:在删除节点之前必须先删除其所有关系,或者使用 `DETACH DELETE` 直接删除节点及其关系。
### 使用 `MERGE` 避免重复
`MERGE` 类似于 `MATCH` 或 `CREATE` 的组合,它会尝试匹配现有数据,如果找不到,则创建新的数据。
- 示例:确保只存在一个 `张无忌` 节点
```cypher
MERGE (n:英雄 {name: '张无忌'})
```
### 其他常用命令
- **分页**: 使用 `SKIP` 和 `LIMIT` 来实现分页效果
```cypher
MATCH (n:英雄) RETURN n SKIP 10 LIMIT 10
```
- **排序**: 使用 `ORDER BY` 对结果进行排序
```cypher
MATCH (n:英雄) RETURN n ORDER BY n.name ASC
```
这些是使用 Neo4j 和 Cypher 进行基本操作的一些入门知识。随着您对图形数据库概念理解的深入,您可以探索更多高级功能如模式匹配、聚合函数等。