neo4j 图数据库介绍
- neo4j 图由点和边组成。点和边都可以与有各自的属性和label。
- 一个简单的例子:人居住在城市中、城市是国家的一部分。
- 节点:用()来表示
- neo4j 分成社区版本和专业版。
node表示
1 | () 表示节点 |
关系
1 | 两个节点之间的关系使用箭头表示: arrow --> or <-- |
常用的语句
1 | 1. CREATE (:Movie { title:"The Matrix",released:1997 }) |
Cypher 简介
- Cypher 读音[ˈsaifə] ,
- 几个常用的 key,用来读取图中数据
- MATCH:模式匹配,在图中查询数据最常用的方式
- WHERE:增加限制对一个模式,使用方式同SQL中的WHERE
- RETURN:返回结果
- 几个常用的key ,用来更新图:
- CREATE(或者DELETE):创建节点,或者删除关系
- SET(或者 REMOVE):给 属性设定值,或者给node 增加label。当移除他们的时候,使用 REMOVE
- MERGE:匹配已经存在的或者创建新的节点和模式。
1 | 1. create (n:Person {name:'xiaohong',age:16})-[a:friend]->(m:Person {name:'xiaobai',age:18}) |
Querying and updating the graph
- 如果你读图中的数据,然后更新图的信息。这个查询实际上被分成两部分:首先是读数据,然后是写入图
- 如果你的查询仅仅执行读操作,Cypher 不会去真正得查询数据,直到你要求返回结果的时候,才会执行。这是Cypher将会是lazy model,类似spark
- WITH:类似一条水平线分开了整个执行计划。基本可以理解成,先执行上面,有了上面的前提,再执行下面
1 | match (n:Person)-[:friend]->(m:Person) |
Returning data
- RETURN:有3个关键字:SKIP/LIMIT/ORDER BY
Transactions
- 任何查询(更新)都会运行在一个事物中,一个更新操作,要么全部成功,要么全部不成功
Uniqueness
- A 是B 的朋友,B是C的朋友 。那么查询 A的朋友 的朋友 。返回值是C 不会是A的。
- 但是上面的查询,如果使用两个MATCH 来查询,将会返回 A 和C。
- 如果用一个MATCH ,但是用,来分割查询逻辑,效果同1
语法
数据类型
Cypher 分成3中数据类型 Property types、Structural types、Composite types.
Property types(属性类型):
- Number:包含两个子类型:Interger 和 Float
- String、
- Boolean、
- 空间数据类型:Point 、
- 时间类型:Date, Time, LocalTime, DateTime, LocalDateTime and Duration
Structural types:
- Nodes (点): Id、Labels、Map(属性集合)
- Relationships (关系):id、Type、Map(属性集合)、ids(开始节点的id 和 结束节点的id)
- Paths:节点和关系的序列
Composite types
- Lists:各种、有顺序的值。每一个都可以包含以上三种类型
- Maps:各种、没有顺序的值。key 是string,value 是任意数据类型。
命名规则与推荐
语法
选择:case 表达式
CASE test WHEN value THEN result [WHEN ...] [ELSE default] END
CASE WHEN predicate THEN result [WHEN ...][ELSE default] END
—> 关系指向
关键字:
- CALL
- CREATE
- DELETE
- DETACH
- EXISTS
- FOREACH
- LOAD
- MATCH
- MERGE
- OPTIONAL
- REMOVE
- RETURN
- SET
- START
- UNION
- UNWIND
- WITH
子关键字
- LIMIT
- ORDER
- SKIP
- WHERE
- YIELD
修饰语
- ASC
- ASCENDING
- ASSERT
- BY
- CSV
- DESC
- DESCENDING
- ON
表达式:
- ALL
- CASE
- ELSE
- END
- THEN
- WHEN
运算
- AND
- AS
- CONTAINS
- DISTINCT
- ENDS 字符串以什么结束
- IN
- IS
- NOT
- OR
- STARTS 字符串以什么开头
- XOR
Schema
- CONSTRAINT
- CREATE
- DROP
- EXISTS
- INDEX
- NODE
- KEY
- UNIQUE
Hints
- INDEX
- JOIN
- PERIODIC
- COMMIT
- SCAN
- USING
Literals
- false
- null
- true
保留字
- ADD
- DO
- FOR
- MANDATORY
- OF
- REQUIRE
- SCALAR
增删改查[简单示例]
1 | # 增 CREATE/MERGE |
数据插入
1 | # 少量数据 【百条所有数据】 |