Neo4j 的事务,索引及约束

1. 事务

为了保持数据的完整性和保证良好的事务行为,Neo4j 也支持 ACID 特性 。

注意:

  • 所有对 Neo4j 数据库的数据修改操作都必须封装在事务里。
  • 默认的 isolation levelREAD_COMMITTED
  • 死锁保护已经内置到核心事务管理 。 ( Neo4j 会在死锁发生之前检测死锁并抛出异常。在异常抛出之前,事务会被标志为回滚。当事务结束时,事务会释放它所持有的锁,则该事务的锁所引起的死锁也就解除了,其他事务就可以继续执行。当用户需要时,抛出异常的事务可以尝试重新执行)
  • 除特别说明,Neo4jAPI 的操作都是线程安全的,Neo4j 数据库的操作也就没有必要使用外部的同步方法。

2. 索引

2.1 简介

  • Neo4j CQL 支持节点或关系属性上的索引,以提高应用程序的性能。
  • 可以为具有相同标签名称的属性上创建索引。
  • 可以在 MATCHWHERE 等运算符上使用这些索引列来改进 CQL 的执行。

2.2 创建单一索引

CREATE INDEX [INDEX_NAME] FOR (n:Label) ON (n.property)

例如:

create index for (n:Person) on (n.name)
create index index_name for (n:Person) on (n.name)

2.3 创建复合索引

create index for (p:Person) on (p.name,p.age)
create index  nameAndAge for (p:Person) on (p.name,p.age)

2.4 全文模式索引

之前的常规模式索引只能对字符串进行精确匹配或者前后缀索引(startswith,endswith,contains),全文索引将标记化索引字符串值,因此它可以匹配字符串中任何位置的术语。索引字符串如何被标记化并分解为术语,取决于配置全文模式索引的分析器。索引是通过属性来创建,便于快速查找节点或者关系。

2.4.1 创建和配置全文模式索引

使用 db.index.fulltext.createNodeIndexdb.index.fulltext.createRelationshipIndex 创建全文模式索引。在创建索引时,每个索引必须为每个索引指定一个唯一的名称,用于在查询或删除索引时引用相关的特定索引。全文模式索引分别应用于标签列表或关系类型列表,分别用于节点和关系索引。

  • 弃用的全文索引的语法,创建及查询
call db.index.fulltext.createNodeIndex("索引名",[Label,Label],[属性,属性])

call db.index.fulltext.createNodeIndex("nameAndDescription",["Person"],["name","description"])

查询
call db.index.fulltext.queryNodes("nameAndDescription","二") yield node, score return node.name,node.age,score
  • 正在使用的全文索引的语法,创建及查询
CREATE FULLTEXT INDEX [index_name] [IF NOT EXISTS]
FOR (n:LabelName[|...])
ON EACH "[" n.propertyName[, ...] "]"
[OPTIONS "{" option: value[, ...] "}"]

CREATE FULLTEXT INDEX titlesAndDescriptions FOR (n:Movie|Book) ON EACH [n.title, n.description]

CALL db.index.fulltext.queryNodes("titlesAndDescriptions", "matrix") YIELD node, score
RETURN node.title, node.description, score

全文索引官网参考:https://neo4j.com/docs/cypher-manual/4.3/administration/indexes-for-full-text-search

2.5 查看和删除索引

show indexes 或者 :schema(可以查看索引和约束)
弃用:DROP INDEX ON :Person(name) 或者 使用: drop index index_name
弃用:DROP INDEX ON :Person(age, gender) 或者 使用: drop index index_name
弃用:call db.index.fulltext.drop("nameAndDescription") 或者 使用: drop index index_name

3. 约束

3.1 唯一性约束

作用:

  • 避免重复记录。
  • 强制执行数据完整性规则

创建唯一性约束

CREATE CONSTRAINT ON (变量:<label_name>) ASSERT 变量.<property_name> IS UNIQUE

具体实例:

不带约束名创建
create constraint on (n:Person) assert n.name is unique

带约束名创建
create constraint const_name on (n:Person) assert n.name is unique

删除唯一性约束

弃用
drop constraint on (n:Person) assert n.name is unique
正在使用
drop constraint constraint_e26b1a8b

3.2 属性存在约束 (企业版中可用)

弃用
create constraint on (n:Person) assert exists(n.name)
正在使用
create constraint on (n:Person) assert n.name is not null

3.3 查看约束

弃用
call db.constraints

正在使用
show constrain 或 :schema

Neo4j入门和基本操作教程地址:https://mall.csdn.net/item/85530

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Neo4j索引分为两种类型:节点索引和关系索引。其中,ci索引是节点索引,用于索引节点属性,而ct索引是关系索引,用于索引关系属性。 使用ci索引: 1. 创建索引neo4j中创建ci索引的语法如下: CREATE INDEX ON :Label(property) 其中Label是节点标签,property是要索引的节点属性。 例如,要在Person节点上创建一个索引来加速根据name属性查找该节点的操作,可以使用以下命令: CREATE INDEX ON :Person(name) 2. 使用索引 使用ci索引的语法如下: MATCH (n:Label) WHERE n.property = value RETURN n 其中Label是节点标签,property是要索引的节点属性,value是要查找的属性值。 例如,要查找名为Tom的Person节点,可以使用以下命令: MATCH (p:Person) WHERE p.name = 'Tom' RETURN p 使用ct索引: 1. 创建索引neo4j中创建ct索引的语法如下: CREATE INDEX ON :Type(property) 其中Type是关系类型,property是要索引的关系属性。 例如,要在Friend关系上创建一个索引来加速根据since属性查找该关系的操作,可以使用以下命令: CREATE INDEX ON :Friend(since) 2. 使用索引 使用ct索引的语法如下: MATCH (n1)-[r:Type]->(n2) WHERE r.property = value RETURN n1, r, n2 其中Type是关系类型,property是要索引的关系属性,value是要查找的属性值。 例如,要查找由Tom和Jerry之间的since属性为2020的Friend关系,可以使用以下命令: MATCH (tom)-[f:Friend]->(jerry) WHERE f.since = 2020 RETURN tom, f, jerry

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小松の博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值