主要有节点和关系,关系是有向边,节点和关系都有属性,属性是键值对
Neo4j使用CQL语句,代表Cypher查询语言 相当于MySQL中使用的SQL
在所有的语句中均有结构
CQL指令 | 说明 |
---|---|
CREATE(创建) | 创建节点关系和属性 |
MATCH(匹配) | 检索有关节点关系和属性数据 |
RETURN(返回) | 返回查询结果 |
WHERE(条件) | 提供条件过滤检索数据 |
DELETE(删除) | 删除节点和关系 |
REMOVE(移除) | 删除节点和关系的属性 |
ORDER BY(以…排序) | 排序检索数据 |
SET(组) | 添加或更新标签 |
定制功能 | 用法 |
---|---|
String(串) | 用于使用String字面量 |
Aggregation(聚合) | 用于对CQL查询结果执行一些聚合操作 |
Relationship(关系) | 用于获取关系的细节 如startnode endnode等 |
CQLs数据类型 | y用法 |
---|---|
boolean | 用于表示布尔类型 true和false |
byte | 用于表示8位整数 |
short | 用于表示16位整数 |
int | 用于表示32位整数 |
long | 用于表示64位整数 |
float | 用于表示32位浮点数 |
double | 用于表示64位浮点数 |
char | 用于表示16位字符 |
String | 用于表示字符串 |
CQL创建一个没有属性的节点 用于创建没有属性的节点。 它只是创建一个没有任何数据的节点。
CREATE (:) # 指令 创建的节点名称 节点的标签名称
CQL创建具有属性的节点 创建一个具有一些属性(键值对)的节点来存储数据。
CREATE (
<node-name>:<label-name>
{
<Property1-name>:<Property1-value>,
...
<Propertyn-name>:<Propertyn-value>
}
)
# 属性是键值对
MATCH (
<node-name>:<label-name>
)
# 我们不能单独使用MATCH Command从数据库检索数据 如果单独使用它 那么我们将InvalidSyntax错误
# 如 match (dept:Dept) 会得到Neo.ClientError.Statement.SyntaxError
# Neo.ClientError.Statement.SyntaxError: Query cannot conclude with MATCH (must be RETURN or an update clause) (# line 1, column 1 (offset: 0))
# "match (dept:Dept)"
# ^
RETURN
<node-name>.<property1-name>,
...
<node-name>.<propertyn-name>
# 这里也不能单独使用return指令 如果单独使用也会报错 如 return dept.deptno
在CQL中不能单独使用match和return,因为我们需要合并这两个命令从数据库中检索数据
MATCH+RETURN指令:
MATCH Command
RETURN Command
# 如
# match (dept:Dept) return dept.deptno,dept.dname
# match (exp:Exploment) return exp
match (<node1-name>:<node1-label-name>), (<node2-name>:<node2-label-name>)
create
(<node1-name>)-[<relationship-name>:<relationship-label-name>]->(<node2-name>)
return <relationship-name>
# 此语句中return是可选的 如果想立即看到结果 则使用它 否则可以省略
match (<node1-name>:<node1-label-name>), (<node2-name>:<node2-label-name>)
create
(<node1-name>)-[<relationship-name>:<relationship-label-name>
{<define-propertys-list>}]->(<node2-name>)
return <relationship-name>
# define-propertys-list 任然是键值对
# 可表示为
# {
# :,
# ...
# :
# }
create
(:)-
[:]->
(:)
return
create
(:{})-
[:{}]->
(:{})
return
若想在在视图中查看关系 应该使用
match p=(lable1)-[r:r_name]->(lable2) return p
下面的查询是所有有这个关系的
match p=()-[r:r_name]->() return p
下面的查询是返回所有的关系
match p=()-->() return p
为节点创建多个标签
create (m:movie:cinema:film:picture)
where
where
语法
CQL中的布尔运算:AND OR NOT XOR
CQL中的比较运算:= <> < > <= >=
使用where子句创建关系
match (:),(:)
where
create ()-[:
{}]->()
delete
# 使用 , 分割节点名
也不能单独用 要先match下
删除节点 match (node-name:label-name) delete node-name
# 前提是没有与此节点相连的关系 否则要先删关系
删除关系 match (node1:label1)-[r]-(node2:label2) delete r
删库跑路有个很简单的指令 match (d) detach delete d
remove <property-name-list>
# .,
# ...
# .
match (node:label)
remove node.property
return node
match (node:label)
remove node:label
return node
set
match (node:label)
where node.property cond val
set node.pro = val
return node
order by [DESC] # 默认是升序排列ASC 降序需要指明DESC
<match command>
return x.x as x
union [all]
<match command>
return y.y as x
# 如果两个查询不返回相同的列名和数据类型会报错`
# 前缀不同也不行 所以要用 as`
union之后 完全相同的结果只出现一次 加上all之后 有几次显示几次
是create和match的组合 在图中搜索给定模式 如果存在返回 否则创建并返回
merge (:)
{
:
...
:
}
create可以创建完全相同的结点,使用merge可以判断结点是否存在
使用的时候 相当于create换成了merge即可
CQL将空值视为对节点或关系的属性的缺失值或未定义值 当我们创建一个具有现有节点标签的但未指定其属性值的节点时
它将创建一个具有NULL属性值的新节点
where x.x is not NULL
# 可以过滤NULL行
where x.x is NULL
# 仅返回NULL行
in [
x.x in [123, 124]
函数名 | 描述 |
---|---|
UPPER | 用于将所有字母更换为大写 |
LOWER | 用于将所有字母更换为小写 |
SUBSTRING | 用于获取给定String的子字符串 |
REPLACE | 用于替换一个字符串的子字符串 |
在return的值进行限定
return UPPER(x.x)
return LOWER(x.x)
return SUBSTRING(x.x,起始,长度)
return REPLACE(x.x,str1,str2)
函数名 | 描述 |
---|---|
COUNT | 返回由match命令返回的行数 |
MAX | 返回由match命令返回的最大值 |
MIN | 返回由match命令返回的最小值 |
SUM | 返回由match命令返回的所有行求和 |
AVG | 返回由match命令返回的所有行的平均值 |
max和min中跟一个x.x 但是函数外面还可以 , y.y 貌似是分group的作用 找每个group的最小值
函数名 | 描述 |
---|---|
STARTNODE | 用于知道关系的开始节点 |
ENDNODE | 用于知道关系的结束节点 |
ID | 用于知道节点或关系的ID(唯一) |
TYPE | 用于知道字符串表示的一个关系的type |
Neo4j的备份和还原比较简单,把数据库整个文件拷贝一份,就可以,还原的时候直接再拷回去即可。
需要注意的是,在拷贝复制的时候 需要把Neo4j服务关闭
需要备份的文件是 D:\Neo4j\neo4j-community-3.3.6\data\databases\graph.db
这里这个位置是我在 D:\Neo4j\neo4j-community-3.3.6\conf\neo4j.conf
下配置的
默认是在 c\Users\[username]\Documents\Neo4j\default.graphdb
create index on :label(property)
drop index on :label(property)
create constraint on (label) assert property is unique
# 创建唯一约束
drop constraint on (label) assert property is unique
# 删除unique约束