Skip to main content
Version: 2.5.1

How to enforce uniqueness constraint

Uniqueness constraint enforces that each label, property_set pair is unique. Adding uniqueness constraint does not create a label-property index, it needs to be added manually.

The uniqueness constraint can be enforced using the following language construct:

CREATE CONSTRAINT ON (n:label) ASSERT n.property1, n.property2, ..., IS UNIQUE;

For example, suppose you are keeping track of basic employee info in your database. Obviously, each employee should have a unique e-mail address. You can enforce this by issuing the following query:

CREATE CONSTRAINT ON (n:Employee) ASSERT n.email IS UNIQUE;

You can confirm that your constraint was successfully created by issuing the following query:

SHOW CONSTRAINT INFO;

You should get a result similar to this:

+-----------------+-----------------+-----------------+
| constraint type | label | properties |
+-----------------+-----------------+-----------------+
| unique | Employee | email |
+-----------------+-----------------+-----------------+

Trying to modify the database in a way that violates the constraint will yield an error Unable to commit due to unique constraint violation on :Employee(email).

Naturally, you can also specify multiple properties when creating uniqueness constraints. For example, we might want to enforce that all employees have a unique (name, surname) pair (obviously, this would be a bad decision in real life). This can be achieved by the following query:

CREATE CONSTRAINT ON (n:Employee) ASSERT n.name, n.surname IS UNIQUE;

At this point, SHOW CONSTRAINT INFO; yields the following result:

+-----------------+-----------------+-----------------+
| constraint type | label | properties |
+-----------------+-----------------+-----------------+
| unique | Employee | email |
| unique | Employee | name, surname |
+-----------------+-----------------+-----------------+

Constraints can also be dropped using the DROP keyword. For example, dropping the previously created constraints can be done by the following query:

DROP CONSTRAINT ON (n:Employee) ASSERT n.email IS UNIQUE;
DROP CONSTRAINT ON (n:Employee) ASSERT n.name, n.surname IS UNIQUE;

Now, SHOW CONSTRAINT INFO; yields an empty set.

Where to next?

To learn more about Memgraph's functionalities, visit the Reference guide. For real-world examples of how to use Memgraph, we strongly suggest going through one of the available Tutorials.