Neo4j 唯一性约束与索引问题

Neo4j 唯一性约束与索引问题,neo4j,cypher,Neo4j,Cypher,我一定是做错了什么,或者对约束和索引有误解。我有以下资料: CREATE CONSTRAINT ON (u:User) ASSERT u.user_id IS UNIQUE 及 我试过改变顺序,但不管怎样,我得到了: Neo.ClientError.Schema.ConstraintAlreadyExists 或 视订购情况而定 我不明白为什么我不能这样做。我想快速查找用户id,这就是我编制索引的原因,我还想确保用户id是唯一的,这就是我有一个约束的原因 我误解了什么?我应该怎么做呢?添加唯

我一定是做错了什么,或者对约束和索引有误解。我有以下资料:

CREATE CONSTRAINT ON (u:User) ASSERT u.user_id IS UNIQUE

我试过改变顺序,但不管怎样,我得到了:

Neo.ClientError.Schema.ConstraintAlreadyExists

视订购情况而定

我不明白为什么我不能这样做。我想快速查找
用户id
,这就是我编制索引的原因,我还想确保
用户id
是唯一的,这就是我有一个约束的原因


我误解了什么?我应该怎么做呢?

添加唯一约束也会在该属性上添加索引-因此唯一约束就足够了

“请注意,在属性上添加唯一性约束也会增加 该属性上的索引,因此不能单独添加此类索引。 Cypher将使用该索引进行查找,就像其他索引一样 如果删除一个约束,但仍然需要属性上的索引,则 必须创建索引。”


创建约束将自动在该属性上创建索引。如果仅创建索引,则必须手动创建索引


正如Luane所说,在属性上添加唯一性约束也会在属性上创建索引

要使
用户id
唯一并建立索引,应使用以下命令:

CREATE CONSTRAINT ON (user:User) ASSERT user.user_id IS UNIQUE

>>> Added 1 constraint, returned 0 rows in 107 ms
:SCHEMA

>>> Indexes
>>>   ON :User(user_id)             ONLINE (for uniqueness constraint) 
>>> 
>>> Constraints
>>>   ON (user:User) ASSERT user.user_id IS UNIQUE
DROP INDEX ON :User(user_id)

>>> Unable to drop index on :User(user_id): Index belongs to constraint: :User(user_id)
DROP CONSTRAINT ON (user:User) ASSERT user.user_id IS UNIQUE

>>> Removed 1 constraint, returned 0 rows in 108 ms
要验证索引是否已正确添加:

CREATE CONSTRAINT ON (user:User) ASSERT user.user_id IS UNIQUE

>>> Added 1 constraint, returned 0 rows in 107 ms
:SCHEMA

>>> Indexes
>>>   ON :User(user_id)             ONLINE (for uniqueness constraint) 
>>> 
>>> Constraints
>>>   ON (user:User) ASSERT user.user_id IS UNIQUE
DROP INDEX ON :User(user_id)

>>> Unable to drop index on :User(user_id): Index belongs to constraint: :User(user_id)
DROP CONSTRAINT ON (user:User) ASSERT user.user_id IS UNIQUE

>>> Removed 1 constraint, returned 0 rows in 108 ms
注意,如果您试图删除由唯一性约束自动创建的索引,它将失败:

CREATE CONSTRAINT ON (user:User) ASSERT user.user_id IS UNIQUE

>>> Added 1 constraint, returned 0 rows in 107 ms
:SCHEMA

>>> Indexes
>>>   ON :User(user_id)             ONLINE (for uniqueness constraint) 
>>> 
>>> Constraints
>>>   ON (user:User) ASSERT user.user_id IS UNIQUE
DROP INDEX ON :User(user_id)

>>> Unable to drop index on :User(user_id): Index belongs to constraint: :User(user_id)
DROP CONSTRAINT ON (user:User) ASSERT user.user_id IS UNIQUE

>>> Removed 1 constraint, returned 0 rows in 108 ms
删除它的正确方法是删除唯一性约束:

CREATE CONSTRAINT ON (user:User) ASSERT user.user_id IS UNIQUE

>>> Added 1 constraint, returned 0 rows in 107 ms
:SCHEMA

>>> Indexes
>>>   ON :User(user_id)             ONLINE (for uniqueness constraint) 
>>> 
>>> Constraints
>>>   ON (user:User) ASSERT user.user_id IS UNIQUE
DROP INDEX ON :User(user_id)

>>> Unable to drop index on :User(user_id): Index belongs to constraint: :User(user_id)
DROP CONSTRAINT ON (user:User) ASSERT user.user_id IS UNIQUE

>>> Removed 1 constraint, returned 0 rows in 108 ms

完全没有注意到这一点。非常感谢你!