3、Neo4j 安装与入门:Neo4j Desktop 安装、Cypher 基础语法、节点与关系的创建
好,咱们正式开始动手了。前面聊了那么多图数据库的理论,说白了,今天就是要把 Neo4j 装到你的电脑上,然后亲手敲几行 Cypher 语句,感受一下“图”到底是怎么存数据的。
我个人习惯,学任何新工具,第一件事不是看文档,而是先跑起来。哪怕只是创建一个节点,那种“我能控制它了”的感觉,比看十页理论都管用。咱们今天就按这个路子来。
3.1 Neo4j Desktop 安装:别怕,就是装个软件
Neo4j 的安装方式有好几种,有社区版、企业版,还有 Docker 镜像。但对于咱们学习和做原型验证,Neo4j Desktop 是最省心的选择。它自带了一个图形化管理界面,还能方便地管理多个数据库项目。
安装步骤其实很简单:
- 去官网(neo4j.com/download)下载对应你操作系统的 Desktop 版本。
- 双击安装,一路默认选项就行。嗯,这里要注意,它会要求你注册一个账号,这是免费的,注册一下就好。
- 安装完成后,打开 Desktop,你会看到一个干净的主界面。点击 “New Project”,给你的第一个图数据库项目起个名字,比如 “FinanceDemo”。
- 在项目里,点击 “Add” → “Local DBMS”,设置一个数据库密码。这个密码很重要,以后连接数据库都要用它。我建议设成 “123456” 这种简单密码,学习阶段别为难自己。
- 点击 “Start” 按钮,等几秒钟,数据库就启动了。你会看到状态变成绿色的小圆点,旁边显示 “Active”。
我曾经遇到过一个问题:启动后 Browser 页面一片空白。后来发现是端口被占用了。解决办法很简单,在 Desktop 的 DBMS 设置里,把 HTTP 端口从 7474 改成 7475 就行。这种小坑,遇到了别慌。
3.2 Cypher 基础语法:图数据库的 SQL
Cypher 是 Neo4j 的查询语言。你如果写过 SQL,会觉得它很亲切,但又有那么点不一样。它不是为了查“表”设计的,而是为了描述“图”中的路径和模式。
核心语法就几个:
CREATE:创建节点或关系。MATCH:匹配(查询)已有的模式。RETURN:返回查询结果。WHERE:添加过滤条件。DELETE:删除节点或关系。
你想想看,在 SQL 里你要查一个用户,得写 SELECT * FROM users WHERE id = 1。在 Cypher 里,你描述的是“我要找一个标签为 User 的节点,它的 id 属性是 1”。
它的语法非常直观,用圆括号 () 表示节点,用方括号 [] 表示关系,用箭头 --> 表示方向。比如:
(a:Person) - [:KNOWS] -> (b:Person)
这句话读出来就是:“一个标签为 Person 的节点 a,通过一个类型为 KNOWS 的关系,指向另一个标签为 Person 的节点 b”。是不是很自然?
3.3 节点与关系的创建:亲手画一张图
理论讲完了,咱们来点实际的。假设我们要为一个简单的金融场景建模:一个客户(Customer)有一个账户(Account),账户发生了交易(Transaction)。
第一步:创建节点
打开 Neo4j Browser,在输入框里敲入以下命令:
CREATE (c:Customer {name: '张三', age: 35, risk_level: '低'})
CREATE (a:Account {account_id: 'ACC001', balance: 100000.00, type: '储蓄'})
CREATE (t:Transaction {tx_id: 'TX001', amount: 5000.00, timestamp: datetime('2024-01-15T10:30:00')})
敲完回车,你会看到 Browser 提示 “Created 3 nodes”。这就创建了三个孤立的节点,它们之间还没有任何联系。
这里有个细节:: 后面的 “Customer”、“Account” 是节点的标签,相当于关系数据库里的表名。花括号 {} 里的是属性,相当于表的字段。
第二步:创建关系
节点之间没有关系,那就不是图。咱们来把它们连起来:
MATCH (c:Customer {name: '张三'})
MATCH (a:Account {account_id: 'ACC001'})
MATCH (t:Transaction {tx_id: 'TX001'})
CREATE (c) - [:HAS_ACCOUNT] -> (a)
CREATE (a) - [:HAS_TRANSACTION] -> (t)
这段代码的意思是:先找到刚才创建的三个节点,然后创建两条关系。一条是 “客户拥有账户”,另一条是 “账户发生交易”。
运行后,你会在 Browser 的图形化界面里看到三个小圆点被箭头连起来了。那种感觉,就像你亲手画了一张网络图,很有成就感。
[:HAS_ACCOUNT] 上加一个 {since: date('2023-01-01')} 来表示开户时间。
3.4 避坑指南:我踩过的几个雷
刚开始学 Cypher,有几个地方特别容易出错。我把自己踩过的坑分享给你:
- 忘记 MATCH 直接 CREATE 关系: 如果你写
CREATE (a)-[:KNOWS]->(b),而 a 和 b 节点不存在,它会帮你创建两个新节点。这往往不是你想要的。所以,创建关系前,一定要先用 MATCH 找到已有节点。 - 属性值类型搞混: Cypher 对类型敏感。数字不要加引号,字符串必须加引号。比如
age: 35是对的,age: '35'就变成了字符串。 - 忘记分号: 虽然 Browser 里不写分号也能运行,但多条语句一起执行时,分号是必须的。我习惯每条语句都加分号,养成好习惯。
CREATE 语句直接创建大量数据。它没有去重逻辑,跑两次就会创建两份重复数据。正确的做法是用 MERGE 语句,它会先检查节点是否存在,不存在才创建。
3.5 本章知识体系一览
为了让你对整个安装和入门流程有个全局印象,我画了一张图。它把咱们今天讲的核心步骤串了起来:
这张图把咱们今天的流程串起来了。从安装 Desktop,到启动数据库,再到写 Cypher 语句创建节点和关系,最后在 Browser 里看到图形化的结果。每一步都环环相扣。
好了,今天的实操就到这里。你现在应该已经有一个能跑起来的 Neo4j 环境,并且亲手创建了几个节点和关系。别小看这几步,这是你进入图数据库世界的第一块基石。多敲几遍,把 CREATE 和 MATCH 的手感练出来,后面学复杂查询就轻松多了。