Naming rules and recommendations
This page describes rules and recommendations for the naming of node labels, relationship types, property names, variables, indexes, and constraints.
Naming rules
-
Alphabetic characters:
-
Names should begin with an alphabetic character.
-
This includes "non-English" characters, such as
å
,ä
,ö
,ü
etc.
-
-
Numbers:
-
Names should not begin with a number.
-
To illustrate,
1first
is not allowed, whereasfirst1
is allowed.
-
-
Symbols:
-
Names should not contain symbols, except for underscore, as in
my_variable
, or$
as the first character to denote a parameter, as given by$myParam
.
-
-
Length:
-
Can be very long, up to
65535
(2^16 - 1
) or65534
characters, depending on the version of Neo4j.
-
-
Case-sensitive:
-
Names are case-sensitive and thus,
:PERSON
,:Person
and:person
are three different labels, andn
andN
are two different variables.
-
-
Whitespace characters:
-
Leading and trailing whitespace characters will be removed automatically. For example,
MATCH ( a ) RETURN a
is equivalent toMATCH (a) RETURN a
.
-
Using special characters in names
Non-alphabetic characters, including numbers, symbols and whitespace characters, can be used in names, but must be escaped using backticks.
For example: `^n`
, `1first`
, `$$n`
, and `my variable has spaces`
.
Database names are an exception and may include dots without the need for escaping.
For example: naming a database foo.bar.baz
is perfectly valid.
Within an escaped name, the following escaping sequences are allowed:
Escape sequence | Character |
---|---|
|
Backtick |
|
Unicode UTF-16 code point (4 hex digits must follow the |
Using escaped names with unsanitized user input makes you vulnerable to Cypher® injection. Some techniques to mitigate this are:
|
Several special characters have been deprecated and will require escaping in Neo4j 6.0, see here for the comprehensive list of deprecated characters. |
Scoping and namespace rules
-
Node labels, relationship types and property names may re-use names.
-
The following query — with
a
for the label, type and property name — is valid:CREATE (a:a {a: 'a'})-[r:a]->(b:a {a: 'a'})
.
-
-
Variables for nodes and relationships must not re-use names within the same query scope.
-
The following query is not valid as the node and relationship both have the name
a
:CREATE (a)-[a]->(b)
.
-