Cypher概述

    Cypher是一种图数据库查询语言,查询效率高,类似于关系型数据库中的SQL。cypher由Neo Technology 公司为了Neo4j创建,

Cypher是什么
    Cypher是一种声明式图数据库查询语言,它具有丰富的表现力,能高效地查询和更新图数据,对于初学者Cypher使用相对简单,
    Cypher查询语言设计很人性化,既适合开发人员,也适合专业的运营人员。
    Cypher借鉴了SQL语言的结构——查询可由各种各样的语句组合,语句被链接在一起,相互之间传递中间结果集,查询语言由多种不同的语句构成,下面是一些获取图的常用语句
– MATCH:匹配图模式,这是从图中获取数据最常见的方法
– WHERE:不是独立的语句,而是MATCH,OPTINAL MATCH和WITH的一部分。用于给模式添加约束或者过滤传递给WITH的中间结果
– RETURN:定义返回的结果
下面是一些用于更新图的常用的语句
– CREATE(DELETE):创建(删除)节点和关系
– SET(REMOVE):使用SET设置属性值和给节点添加标签,使用REMOVE移除它们
– MERGE:匹配已经存在的或者创建新节点和模式,这对于有唯一性约束的时候非常有用

模式
    Neo4j图由节点和关系构成,节点可能还有标签和属性,关系可能还有类型和属性,节点表达的是实体,关系连接一对节点。节点可以看作类似关系数据库中的表,但又不完全一样,节点的标签可以理解为不同的表名,属性类似关系数据库中的表的列。一个节点的数据类似关系数据库中表的一行数据。拥有相同标签的节点通常具有类似的属性,但不必完全一样。这点与关系数据库中一张表中的行数据拥有相同的列是不一样的。
    然而,节点和关系都是简单的低层次的构建块,单个节点或者关系只能编码很少的信息,但模式可以将很多节点和关系编码为任意复杂的想法

查询和更新图
    Cypher语句既可用于查询,又可用于更新图数据

事务
    任何更新图的查询都运行在一个事务中,一个更新查询要么全部成功,要么全部失败。Cypher或者创建一个新的事务,或者运行在一个已有的事务中
– 如果运行上下文中没有事务,Cypher将创建一个,一旦查询完成就提交该事务
– 如果运行上下文中已有事务,查询就会运行在该事务中,直到该事务成功地提交之后,数据才会持久化到磁盘中去

唯一性
    当进行模式匹配时,Neo4j将确保单个模式中不会包含匹配到多次的同一个图关系,在大多数情况下,这是非常敏感的事。

兼容性
    Cypher不是一成不变的语言,新版本引入了很多新功能,一些旧的功能可能会被移除,如果需要,旧版本依然可以访问到,这里有两种方式在查询中选择使用哪个版本
– 为所有查询设置版本:可以通过neo4j.conf中cypher.default_language_version参数来配置Neo4j数据库使用哪个版本的Cypher语言
– 在查询中指定版本,简单地在查询开始的时候写上版本。如Cypher 2.3