跳到主要内容Neo4j 图数据库快速上手与 Cypher 核心实操 | 极客日志SQL算法
Neo4j 图数据库快速上手与 Cypher 核心实操
介绍 Neo4j 图数据库的快速上手方法,涵盖 Desktop、Docker 及压缩包三种安装方式。详细讲解 Neo4j Browser 界面操作,包括 Cypher 语言的节点创建、关系建立、查询、更新与删除等 CRUD 操作。此外还包含索引约束优化、CSV 数据导入流程以及常见故障排查指南,帮助开发者从零掌握图数据存储与查询的核心技能。
晚风叙旧0 浏览 Neo4j 是主流的原生图数据库,核心用于存储和查询'节点 - 关系 - 属性'构成的图数据。本指南从环境搭建到核心功能实操,提供可直接执行的步骤和命令,确保对于新手能快速上手并实现核心功能。
版本说明:本指南基于 Neo4j 5.15.0 编写,适用于 Neo4j 4.x-5.x 版本,语法在社区版和企业版均适用。
一、环境准备:安装 Neo4j(3 种主流方式)
1. 推荐:Neo4j Desktop(图形化管理,适合新手)
- 下载地址:Neo4j 官网(需注册,免费版足够入门)
- 安装步骤:
- 双击安装包,按提示完成安装(Windows/macOS 步骤一致,Linux 需通过 DEB/RPM 包安装);
- 打开 Neo4j Desktop,点击「New Project」创建项目(如'Neo4j-Demo');
- 在项目内点击「Add Database」→ 选择「Create a Local Database」:
- 输入数据库名称(如'test-db');
- 设置密码(记好,后续登录用);
- 版本选择「Community Edition」(免费社区版);
- 点击「Start」启动数据库,启动成功后点击「Open」进入浏览器界面。
2. 轻量:Docker 安装(适合有 Docker 基础的用户)
- 前提:已安装 Docker(Docker 安装指南)
- 验证:打开浏览器访问
http://localhost:7474,能看到登录界面即成功。
docker pull neo4j:latest
docker run -d \
--name neo4j-demo \
-p 7474:7474 \
-p 7687:7687 \
-v $HOME/neo4j/data:/data \
-e NEO4J_AUTH=neo4j/your-password \
neo4j:latest
3. 传统:社区版压缩包安装(适合需要自定义配置的场景)
- 下载:Neo4j 社区版压缩包(选择对应系统的压缩包,如 Windows 选 zip,Linux 选 tar.gz);
- 解压:将压缩包解压到无中文/空格的目录(如 Windows:
D:\neo4j-community-5.15.0,Linux:/opt/neo4j);
- 启动:
- Windows:进入
bin 目录,双击 neo4j.bat,再执行 neo4j start;
- Linux/macOS:进入
bin 目录,执行 ./neo4j start;
- 登录:浏览器访问
http://localhost:7474,首次登录用默认账号 neo4j、密码 neo4j,会提示强制修改密码(改为你自己的密码)。
二、初识 Neo4j Browser(核心操作界面)
登录后看到的「Neo4j Browser」是官方图形化工具,核心区域如下:
- 命令输入框:输入 Cypher 语句(Neo4j 专用查询语言),按
Ctrl+Enter 执行;
- 结果展示区:支持「Graph(图形)」「Table(表格)」「Text(文本)」3 种展示方式,图形模式最直观;
- 左侧导航栏:
- 「Database Info」:查看数据库版本、节点/关系数量;
- 「Node Labels」:查看所有节点标签(类似'表名');
- 「Relationship Types」:查看所有关系类型;
- 常用快捷命令:
:server status:查看数据库状态;
:clear:清空命令输入框;
:help:查看 Cypher 语法帮助。
三、核心功能实操:Cypher 语言入门
Cypher 是 Neo4j 的核心操作语言,类似 SQL,但专为图数据设计。以下操作均在「命令输入框」执行,执行后可在「Graph」模式查看结果。
1. 基础操作:创建/查询/更新/删除(CRUD)
(1)创建节点(Node)
节点需带「标签」(Label,类似'表名')和「属性」(Property,类似'字段'),语法:CREATE (:标签 {属性 1: 值 1, 属性 2: 值 2, ...})
示例:创建 2 个'用户'节点(标签:User)和 1 个'帖子'节点(标签:Post)
# 创建用户'张三'(属性:name、age、gender)
CREATE (:User {name: "张三", age: 28, gender: "男"});
# 创建用户'李四'
CREATE (:User {name: "李四", age: 26, gender: "女"});
# 创建帖子(属性:title、content、createTime)
CREATE (:Post {title: "Neo4j 入门", content: "今天学了 Cypher 基础", createTime: "2024-10-01"});
执行后,在「Graph」模式能看到 3 个独立节点(不同颜色代表不同标签)。
(2)创建关系(Relationship)
关系连接两个节点,需指定「关系类型」和可选属性,语法:MATCH (n:标签 1), (m:标签 2) WHERE 条件 CREATE (n)-[:关系类型 {属性}]->(m)
示例:给'张三'和'李四'加'关注'关系,给'张三'和'Neo4j 入门'帖子加'发布'关系
# 1. 张三关注李四(关系类型:FOLLOWS,属性:followTime)
MATCH (u1:User {name: "张三"}), (u2:User {name: "李四"})
CREATE (u1)-[:FOLLOWS {followTime: "2024-09-20"}]->(u2);
# 2. 张三发布帖子(关系类型:PUBLISHED,属性:publishTime)
MATCH (u:User {name: "张三"}), (p:Post {title: "Neo4j 入门"})
CREATE (u)-[:PUBLISHED {publishTime: "2024-10-01"}]->(p);
执行后,「Graph」模式会显示节点间的连线(关系),鼠标悬停可看关系类型和属性。
(3)查询数据(MATCH + RETURN)
语法:MATCH (节点/关系模式) WHERE 过滤条件 RETURN 要展示的内容
MATCH (u:User) RETURN u.name AS 用户名,u.age AS 年龄;
MATCH (u1:User {name: "张三"})-[:FOLLOWS]->(u2:User) RETURN u1.name AS 关注者,u2.name AS 被关注者;
示例 3:查询'张三'发布的帖子(显示完整图结构)
MATCH (u:User {name: "张三"})-[:PUBLISHED]->(p:Post) RETURN u, p; # 返回节点和关系,Graph 模式会显示连线
(4)更新数据(SET)
语法:MATCH (节点) WHERE 条件 SET 节点。属性 = 新值
示例:将'张三'的年龄改为 29,给帖子加'阅读量'属性
# 更新张三的年龄
MATCH (u:User {name: "张三"}) SET u.age = 29;
# 给帖子加阅读量属性
MATCH (p:Post {title: "Neo4j 入门"}) SET p.readCount = 100;
# 验证更新结果
MATCH (u:User {name: "张三"}), (p:Post {title: "Neo4j 入门"}) RETURN u.age AS 张三年龄,p.readCount AS 帖子阅读量;
(5)删除数据(DELETE + REMOVE)
DELETE:删除节点或关系(删除节点前必须先删除关联的关系,否则报错);
REMOVE:删除节点/关系的属性或标签。
# 先匹配关系,再删除
MATCH (u1:User {name: "张三"})-[:FOLLOWS]->(u2:User {name: "李四"})
DELETE u1-[:FOLLOWS]->u2;
示例 2:删除'Neo4j 入门'帖子节点(需先删关联的发布关系)
# 1. 删除帖子关联的所有关系
MATCH (u:User)-[r:PUBLISHED]->(p:Post {title: "Neo4j 入门"}) DELETE r;
# 2. 删除帖子节点
MATCH (p:Post {title: "Neo4j 入门"}) DELETE p;
MATCH (u:User {name: "张三"}) REMOVE u.gender; # 验证:查询张三的属性,已无 gender
MATCH (u:User {name: "张三"}) RETURN u;
2. 进阶功能:索引与约束(提升查询效率)
当数据量较大时,需通过「索引」加速查询,通过「约束」保证数据唯一性。
(1)创建索引(针对节点属性)
语法:CREATE INDEX 索引名 FOR (n:标签) ON (n.属性);
示例:给 User 标签的 name 属性创建索引(查询'按姓名找用户'时会更快)
# 创建索引
CREATE INDEX idx_user_name FOR (n:User) ON (n.name);
# 查看所有索引
SHOW INDEXES;
(2)创建唯一约束(避免重复数据)
语法:CREATE CONSTRAINT 约束名 ON (n:标签) ASSERT n.属性 IS UNIQUE;
示例:保证 User 标签的 name 属性唯一(不能创建两个'张三'用户)
# 创建唯一约束
CREATE CONSTRAINT const_user_name_unique ON (n:User) ASSERT n.name IS UNIQUE;
# 验证:尝试创建重复的'张三'用户,会报错
CREATE (:User {name: "张三", age: 30}); # 报错信息:Node(...) already exists with label User and property "name" = '张三'
3. 实用功能:数据导入(以 CSV 为例)
Neo4j 支持从 CSV/JSON 等文件导入数据,这里以最常用的 CSV 为例。
步骤 1:准备 CSV 文件
创建两个 CSV 文件(注意编码为 UTF-8):
title,author,createTime
Neo4j 索引学习,王五,2024-10-02
Cypher 高级用法,赵六,2024-10-03
name,age,gender
王五,30,男
赵六,25,女
步骤 2:导入 CSV 数据
- 本地文件导入:将 CSV 文件放在 Neo4j 的「import」目录下(Desktop 中,数据库右键→「Open Folder」→「import」;Docker 中,挂载的
data 目录同级有 import 目录);
# 1. 从 users.csv 导入用户节点(若已存在则更新,用 MERGE 避免重复)
LOAD CSV WITH HEADERS FROM "file:///users.csv" AS row
MERGE (:User {name: row.name, age: toInteger(row.age), gender: row.gender});
# 2. 从 posts.csv 导入帖子节点,并创建'发布'关系
LOAD CSV WITH HEADERS FROM "file:///posts.csv" AS row
MATCH (u:User {name: row.author})
MERGE (p:Post {title: row.title, createTime: row.createTime})
MERGE (u)-[:PUBLISHED {publishTime: row.createTime}]->(p);
# 验证导入结果
MATCH (u:User)-[:PUBLISHED]->(p:Post) RETURN u.name AS 作者,p.title AS 帖子标题;
四、常见问题与排查
- 浏览器访问
http://localhost:7474 无响应?
- 检查数据库是否启动:执行
neo4j status(压缩包)或 docker ps(Docker),确认服务在运行;
- 重启数据库后,访问
http://localhost:7475。
- 忘记密码?
- 重置后改回
dbms.security.auth_enabled=true,重启数据库。
- 查询速度慢?
- 检查是否创建索引:执行
SHOW INDEXES,确认查询条件中的属性已建索引;
- 用
EXPLAIN 分析执行计划:在查询语句前加 EXPLAIN,查看是否有'AllNodesScan'(全节点扫描,需优化)。
压缩包/Docker:停止数据库,修改 neo4j.conf 中 dbms.security.auth_enabled=false,重启后访问 http://localhost:7474,直接登录(无需密码),执行命令重置密码:
ALTER USER neo4j SET PASSWORD '新密码';
端口冲突:若 7474/7687 端口被占用,修改配置文件 neo4j.conf(压缩包在 conf 目录,Desktop 中数据库右键→「Settings」):
dbms.connector.http.port=7475 # 改 HTTP 端口为 7475
dbms.connector.bolt.port=7688 # 改 Bolt 端口为 7688
五、后续学习资源
- 官方文档:Neo4j 官方指南(最权威,含 Cypher 语法、高级功能);
- APOC 插件:Neo4j 官方工具库(支持更多数据导入、图算法等),Desktop 中数据库→「Plugins」→安装「APOC Core」即可使用;
- 图算法:Neo4j 支持最短路径、社区发现等算法,需安装「Graph Data Science Library」插件。
微信扫一扫,关注极客日志
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
相关免费在线工具
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- SQL 美化和格式化
在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online
- SQL 转 CSV/JSON/XML
解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL 转 CSV/JSON/XML在线工具,online
- CSV 工具包
CSV 与 JSON/XML/HTML/TSV/SQL 等互转,单页多 Tab。 在线工具,CSV 工具包在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online