Neo4j
一、介绍
一种有向图数据库。
Neo4j图形数据库的主要构建块是:
节点:是图表的基本单位。 它包含具有键值对的属性
关系:连接两个节点,具有方向:单向和双向。每个关系包含“开始节点”或“从节点”和“到节点”或“结束节点”。关系也可以包含属性作为键值对。
属性:是用于描述图节点和关系的键值对。Key =值,其中Key是一个字符串,值可以通过使用任何Neo4j数据类型来表示
标签:将节点分组为集合。将一个公共名称与一组节点或关系相关联。 节点或关系可以包含一个或多个标签。 我们可以为现有节点或关系创建新标签。 我们可以从现有节点或关系中删除现有标签。
数据浏览器:用于执行CQL命令并查看输出输出。
二、安装
个人安装的为Neo4j Desktop版本,Neo4j Desktop开箱就用,内置jdk和环境配置,但是只支持同时启用一个数据库。如果是个人部署再服务器中,则推荐使用社区版本,多点配置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-edLEt9lN-1667042612426)(D:\program files\Typora\home\image\image-20221029191606303.png)]
安装教程:https://www.bilibili.com/video/BV1MR4y1L7zG
三、使用
(1)增加
Neo4j使用Cypher语言
创建单节点
create (节点名:标签值 {属性名:'属性名值'}) return n
CREATE (<node-name>:<label-name>)
create (n:Class {name:'大学英语Ⅱ'}) RETURN n
CREATE是创建操作,Class是标签值,相当于这个节点叫啥。花括号{}代表节点的属性,属性类似Python的字典。这条语句的含义就是创建一个标签为Class的节点,该节点具有一个name属性,属性值是大学英语Ⅱ。
注意:
1、Neo4j数据库服务器使用此将此节点详细信息存储在Database.As中作为Neo4j DBA或Developer,我们不能使用它来访问节点详细信息。
2、Neo4j数据库服务器创建一个作为内部节点名称的别名。作为Neo4j DBA或Developer,我们应该使用此标签名称来访问节点详细信息。
3、简单来说这里的节点名相当于mysql的表名,标签值相当于一条数据,而里面的属性则相当一条数据中多个列值
4、定位一个节点用标签值,但是这里的标签值不是这个节点上显示的备注名,在节点中显示的备注名是id或者name
举例:
CREATE (n1:Class {name:'大学英语Ⅱ'})
CREATE (n2:Class {name:'大学英语Ⅲ'})
CREATE (n3:Class {name:'大学英语Ⅳ'})
RETURN n1,n2,n3
CREATE (m1:profession {name:'计算机专业'})
CREATE (m2:profession {name:'软件工程'})
CREATE (m3:profession {name:'大数据'})
CREATE (m4:profession {name:'信管'})
RETURN m1,m2,m3,m4
创建多个节点
CREATE (<node-name>:<label-name1>:<label-name2>.....:<label-namen>)
create (高校:浙江师范大学:东华理工大学)
创建关系
create (节点一)-[关系类型:关系类型值]->(节点二) //单向关系
create (节点一)<-[关系类型:关系类型值]->(节点二) //双向关系
CREATE (n1:class {name: "大英Ⅱ"})
CREATE (n2:class {name: "大英Ⅲ"})
CREATE (n1)-[r:BASIC]->(n2)
RETURN n1, n2
这里的方括号[]即为关系,BASIC为关系的类型。注意这里的箭头–>是有方向的,表示是从n1到n2的关系。
MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>)
CREATE
(<node1-label-name>)-[<relationship-label-name>:<relationship-name>
{<define-properties-list>}]->(<node2-label-name>)
RETURN <relationship-label-name>
创建节点属性
有时,根据我们的客户端要求,我们需要向现有节点或关系添加新属性。
要做到这一点,Neo4j CQL提供了一个SET子句。
Neo4j CQL已提供SET子句来执行以下操作。
- 向现有节点或关系添加新属性
- 添加或更新属性值
set子句语法,一般配合match使用
set 节点名.属性名=节点属性值
SET <node-label-name>.<property1-name>,...<node-laben-name>.<propertyn-name>
MATCH (dc:DebitCard)
SET dc.atm_pin = 3456
RETURN dc
//如果查询到多个节点,则多个相当于对多个节点操作
MATCH (book:Book)
SET book.title = 'superstar'
RETURN book
关系增加属性
create (节点一)-[关系类型名:关系类型值 {关系类型属性名:关系类型属性值}]->(节点二)
CREATE (n1:class {name: "大英Ⅱ"})
CREATE (n2:class {name: "大英Ⅲ"})
CREATE (n1)-[r:BASIC {since:2021}]->(n2)
RETURN n1, n2
在关系中,同样的使用花括号{}来增加关系的属性,也是类似Python的字典,这里给BASIC关系增加了since属性,属性值为2021,表示他们建立前置关系的时间。
(2)查询
match查询
- 从数据库获取有关节点和属性的数据
- 从数据库获取有关节点,关系和属性的数据
match (节点类型名:节点类型值)
MATCH (<node-name>:<label-name>)
match (高校:浙江师范大学)
return返回
Neo4j CQL return子句用于 -
- 检索节点的某些属性
- 检索节点的所有属性
- 检索节点和关联关系的某些属性
- 检索节点和关联关系的所有属性
return 节点类型值.属性名
return
<node-name>.<property1-name>,
........
<node-name>.<propertyn-name>
注意这里的match要和return配合使用才会显示返回值
正确用法如下:
match (节点类型名:节点类型值) return 节点类型值
where子句
WHERE <property-name> <comparison-operator> <value>
像SQL一样,Neo4j CQL在CQL MATCH命令中提供了WHERE子句来过滤MATCH查询的结果
(3)删除
delete删除
Neo4j使用CQL DELETE子句
- 删除节点。
- 删除节点及相关节点和关系。
DELETE节点子句语法
delete <node-name-list>
MATCH (节点类型名: 节点类型值) DELETE 节点类型名
删除所有节点和关系
match(n) detach delete n