Neo4j入门笔记
声明:仅作为自己笔记的记录,不带任何商用价值,出处链接如下
B站视频链接: https://www.bilibili.com/video/BV1Hb4y1a7Nb?spm_id_from=333.880.my_history.page.click.
1 图数据库neo4j介绍
1.1 什么是图数据库
图数据库是基于图论实现的一种NoSQL数据库,其数据存储结构和数据查询方式都是以图论为基础的,图数据库主要用于存储更多的连接数据。
2 环境搭建
下载地址:链接: https://neo4j.com/downlosd-center/
安装方式:Neo4j Community Server(社区版)
2.1 安装
jdk8可以下载Neo4j Community Edition 3.5.28
2.2 使用
1.数据导入
.csv格式的文件导入到目录文件下的import中
2.neo4j的打开
在目录文件下的bin文件夹路径显示那里输入‘cmd’打开命令窗口->输入’neo4j console’回车,运行->复制网址到浏览器打开
3 Neo4j-CQL使用
3.1Neo4j-CQL简介
Neo4j的Cypher语言是为处理图形数据而构建的,CQL代表Cypher查询语言。
- 它是Neo4j图形数据库的查询语言
- 是一种声明性模式匹配语言
- 遵循SQL语法
- 语法非常简单且人性化、可读的格式
CQL命令 | 用法 |
---|---|
create | 创建节点,关系和属性 |
match | 检索有关节点,关系和属性数据 |
return | 返回查询结果 |
where | 提供条件过滤检索文件 |
delete | 删除节点和关系 |
remove | 删除节点和关系的属性 |
order by | 排序检索数据 |
set | 添加或更新标签 |
使用cypher语言来描述关系
eg: (fox)<-[:knows]-(周瑜)-[:knows]->(诸葛)-[:knows]->(fox)
3.2常用命令
load csv
导入csv到neo4j
//将csv拷贝到%NEO4J_HOME%\import目录
load csv from "file:///西游记.csv" as line
create(:西游{name:line[0],tail:line[1],label:line[3]})
load csv from “file:///西游记.csv” as line
create(:xiyouRelation{from:line[1],relation:line[3],to:line[0]})
lmatch p=(:
person
{name:‘孙悟空’})-[r:xiyouRelation
]->() return p
load csv from ‘file:///人物.csv’ as line
create(:person{name:line[0]})
//查询人物
match (n:‘person’ {name:‘孙悟空’}) return n
//或者返回id
match (n:person
{name:‘孙悟空’}) return n.name,id(n)
//通过where方式寻找
match (n:person
) where n.name=‘孙悟空’
return n.name,id(n)
create创建
创建模型语句用来创建数据模型
创建节点
//创建简单节点
create(n)
//创建多个节点
create(n),(m)
//创建带标签和属性的节点并返回节点
create(n:person{name:'如来'}) return n
Create(:student{name:”小红”}),(:student{name:”小明”})
create (:student{name:“小兰”}),(:student{name:“小路”})
创建关系
- 单向关系
- 双向关系
//使用新节点创建关系
create(n:person {name:'杨戬'})-[r:师傅]->(m:person {name:'玉鼎真人'})
return type(r)
//使用已知节点创建带属性的关系
match(n:person {name:'沙僧'}),(m:person{name:'唐僧'})
create (n)-[r:'师傅'{relation:'师傅'}]->(m)
return r
//检索关系节点的详细信息
match (n:person)-[r]-(m:person)
return n,m
//找到相互间的关系
match (n:person {name:‘孙悟空’}),(m:xiyouRelation) where m.from=‘孙悟空’
return n.name,m.relation,m.to
//建立关系
match (n:person {name:‘孙悟空’}),(m:xiyouRelation),(s:person) where m.from=‘孙悟空’ and m.to=s.name
create (n)-[:西游人物关系{relation:m.relation}]->(s)
return n.name,m.relation,s.name
match (n:person {name:‘沙僧’}),(m:xiyouRelation),(s:person) where
m.from=n.name and m.to=s.name create
(n)-[:西游关系{relation:m.relation}]->(s)
return n.name,m.relation,s.name
//使用新节点创建关系 ,创建关系时需要先找到节点
match(n:student{name:“小明”}),(m:student{name:“小红”})
create (n)-[r:同学{relation:“同学”}]->(m)
//或者 create (n)-[r:同学]->(m)
return n.name,type( r ),m.name
创建全路径
create p=(:person{name:'蛟魔王'})-[:义兄]->(:person{name:'牛魔王'})<-[:义兄]-(:person{name:'鹏魔王'})
return p
match查询
- 从数据库中获取有关节点和属性的数据
- 从数据库获取有关节点,关系和属性的数据
//查询全部结点
match (n:'西游') return n
//全部节点的关系
match p=()-[r:西游关系
]->() return p
//指定节点的关系
match p=(:person{name:‘孙悟空’})-[r:西游关系
]->() return p
//得到所有节点
match(n:“节点名”) return n
//某个指定节点
match(n:person{name:‘孙悟空’})return n.name,id(n)
//或者
match(n:person)where n.name=‘孙悟空’ return n.name,id(n)
return返回
- 检索结点的某些或者所有属性
- 检索结点和关联关系的某些或者所有属性
match (n:person) return id(n),n.name,n.tail,n.relation
where 子句
-过滤match查询的结果
match(n:person) where n.name='小兰' or n.name='小红' return n
#创建关系
math (n:person),(m:person) where n.name='小兰' and m.name='小红'
create(n)-[r:同学]->(m) return n.name,type(r),m.name
delete删除
- 删除结点
- 删除结点及相关结点和关系
# 删除关系
match(n:student{name:"小张"})<-[r]-(m) delete r return type(r)
#删除节点 (节点不存在关系)
match(n:person{name"小张"}) delete n
remove
- 删除结点或关系的标签、属性
#删除属性
match(n:role{name:"fox"}) remove n.age return n
#创建结点
create(m:role:person{name:"fox1"})
#删除标签
match(m:role:person{name:"fox1"})remove m:person return m
match(n:person{name:“小兰”})remove n:person return n
set 添加属性
- 给现有结点或关系添加新属性
- 添加或更新属性值
match(n:student{name"小红"})set n.age=18,n.sex='女'return n
order by
- 排序操作,默认升序,降序使用desc子句
match(n:person) return id(n),n.name order by id(n) desc
union子句
- union
- 将两组结果中的公共行组合并返回一组结果中。不是从两个节点返回重复的行。
- 限制:结果列类型和来自两组结果的名称必须匹配,即列名称应该相同,列的数据类型应该相同
- union all
- 结合并返回两个结果集的所有行成一个单一的结果集,还返回由两个结点重复行
- 限制:结果列类型,并从两个结果集的名字必须匹配,这意味着列名称应该相同,列的数据类型应该相同
match(n:role)return n.name as name
union
match(m:person)return m.name as name
match(n:role)return n.name as name
union all
match(m:person)return m.name as name
limit和skip子句
- 过滤或限制查询返回的行数
- limit返回前几行,skip忽略前几行
#前两行
match(n:person)return n limit 2
#忽略前两行
match(n:person)return n skip 2
null值
- 空值视为对节点或关系的属性的缺失值或未定义值
- 创建一个具有现有结点标签名称但未指定其属性值的结点时,它将创建一个具有null属性值的新结点
match(n:person)where n.label is null return id(n),n.name,n.tail,n.label
in操作符
- 为CQL命令提供值的集合
match(n:person)where n.name in ['小兰','小红'] return id(n),n.name,n.tail,n.label
index索引
- 支持结点或关系属性上的索引
- 可以为相同标签名称的所有结点的属性创建索引
- 可以在match或where或in运算符上使用这些索引改进CQL Command的执行
- create index 创建索引
- drop index丢弃索引
#创建索引
create index on :'西游'(name)
#删除索引
drop index on:'西游'(name)
unique 约束
- CQL CREAT命令时钟创建新的结点或关系,这意味着即使使用相同的值,也会插入一个新行。
- 支持对node或relationship的属性的unique约束
- 避免重复
- 强制执行数据完整性规则
#创建唯一约束
create constraint on(n:xiyou)assert n.name is unique
#删除唯一约束
drop constraint on(n:xiyou)assert n.name is unique
distinct
- 返回所有不同值
match(n:'西游')return distinct(n.name)
3.3 常用函数
字符串函数
功能 | 描述 |
---|---|
upper | 所有字母大写 |
lower | 所有字母小写 |
substring | 获取给定string的子字符串 |
replace | 替换一个字符串的子字符串 |
match (e) return id(e),e.name,substring(e.name,0,2)
aggregation聚合
match(e) return count(e)
关系函数
功能 | 描述 |
---|---|
startnode | 获取关系的开始结点 |
endnode | 获取关系的结束结点 |
id | 获取关系的id |
type | 获取字符串表示中的一个关系的type |
match(a)-[r]->(b) return id®,type®
3.4 neo4j-admin使用
cmd下neo4j目录下输入一下命令
数据库备份
对neo4j数据进行备份、还原、迁移的操作时,要关闭neo4j
cd %NEO4J_HOME%/bin
#关闭neo4j 一定要先neo4j install-service,才可以执行neo4j stop
neo4j stop
#备份
neo4j-admin dump --database=graph.db --to=/neo4j/backup/graph_backup.dump
数据库恢复
还原、迁移之前,要关闭neo4j服务
#数据导入
neo4j-admin load --from=/neo4j/backup/graph_backup.dump --database=graph.db --force
#重启服务
neo4j start