1. 事务
为了保持数据的完整性和保证良好的事务行为,Neo4j
也支持 ACID
特性 。
注意:
- 所有对
Neo4j
数据库的数据修改操作都必须封装在事务里。 - 默认的
isolation level
是READ_COMMITTED
。 - 死锁保护已经内置到核心事务管理 。 (
Neo4j
会在死锁发生之前检测死锁并抛出异常。在异常抛出之前,事务会被标志为回滚。当事务结束时,事务会释放它所持有的锁,则该事务的锁所引起的死锁也就解除了,其他事务就可以继续执行。当用户需要时,抛出异常的事务可以尝试重新执行) - 除特别说明,
Neo4j
的API
的操作都是线程安全的,Neo4j
数据库的操作也就没有必要使用外部的同步方法。
2. 索引
2.1 简介
Neo4j CQL
支持节点或关系属性上的索引,以提高应用程序的性能。- 可以为具有相同标签名称的属性上创建索引。
- 可以在
MATCH
或WHERE
等运算符上使用这些索引列来改进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.createNodeIndex
和 db.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