图数据库功能: 主要是处理具有深度 相关联的数据,尤其是几何性增长的这种关系,比关系型数据库更具有优势。
一个图是由 节点和 关系构成, 节点和关系都可以包含属性。
一个关系连接两个节点,必须有一个开始节点和结束节点。
Neo4j 的安装
下载地址:桌面版(学习使用)https://neo4j.com/artifact.php?name=neo4j-desktop-offline-1.2.1-setup.exe
windows 下安装社区版 zip
1.解压文件
2. cmd 进入bin 下面,执行 neo4j install-service
3. neo4j start 启动服务
5. neo4j stop 停止服务
6. neo4j uninstall-service 卸载
7. 默认用户名称和密码 neo4j neo4j
Neo4j 的使用
命令 |
格式 | 示例 |
新增 节点名称:标签名称{key:value} 需要注意的是 key 不能使用双引号包裹 |
CREATE ( <node-name>:<label-name> { <key>:<Value> ........ <n-key>:<n-Value> } ) |
create(user:Use {name:"小明",age:12 }) |
一个节点可以创建多个标签 | CREATE (<node-name>:<label-name1>:<label-name2>.....:<label-namen>) |
|
MATCH查询 |
match(user:User) return user match(user:User) return user.name |
|
建立关联 | create(user:User)-[r:Goods]->(book:Book) | |
匹配 建立新的关系 | match(user:User),(book:Book) create (user)-[r:Goods{price:12,num:1}]->(book) return r | |
更新 | match(user:User) set user.userName = "xiaomi" return user |
基本的用法
我们先以数据库表进行抽象(User 用户表 Goods 商品表 Records 购买记录 )
对应字段 :User(name,age) Goods(name,price) Records(userName,goodName,num)
1. 首先我们创建一个用户 类
添加两个人小明和小花
create (user:User{name:"xiaoming",age:12})
create (user:User{name:"xiaoming",age:13})
create (user:User{name:"xiaohua",age:15})
2. 创建两个商品
create (good:Goods{name:"肯德基",price:40})
create (good:Goods{name:"java书",price:24.5})
3. 小明买了两本书
match(user:User),(good:Goods) where user.name = "xiaoming" and good.name = "java书" create (user)-[r:Records{userName:user.name,goodName:good.name,num:2}]->(good) return r
4. 查询总共有多少人
match(user:User) return user
5. 小明修改了书的数量
match(user:User{name:"xiaoming"})-[r:Records{userName:user.name,goodName:good.name}]->(good:Goods{name:"java书"}) set r.num = 3 return r
6. 小明退了买的书
match(user:User{name:"xiaoming"})-[r:Records{userName:user.name,goodName:good.name}]->(good:Goods{name:"java书"}) delete r
7. 移除对象的属性(remove 用于移除属性或者标签)
match(user:User{name:"xiaoming"}) remove user.name return user (相当于只移除了小明里面的name 属性)
创建一个深度比较长的数据(案例1)
深度进行匹配
match(n:Num{name:3})-[r:Father]->(b:Num)-[r1:Father]->(c:Num) return n,b,c
结果:
开始(案例2)
进行匹配
match(n:Num{name:3})-[r:Father | Mother]->(b:Num)-[r1:Father | Mother]->(c:Num) return n,b,c
结果: