Create databases
Neo4j supports the management of multiple databases within the same DBMS.
The metadata for these databases, including the associated security model, is maintained in a special database called the system
database.
All multi-database administrative commands must be run against the system
database.
These administrative commands are automatically routed to the system
database when connected to the DBMS over Bolt.
You can create a database using the Cypher command CREATE DATABASE
.
The initial contents of the database depend on the state of the server and the options provided to the command.
When no additional options are provided, CREATE DATABASE
will attempt to mount any pre-existing store files in place (e.g., as the result of restoring a backup).
If no pre-existing store files are available, it will create an empty database.
Database names are subject to the rules specified in Database names section.
Having dots ( |
block
is the default format for all newly created databases as long as they do not have the db.format
setting specified.
If you want to change it, you can set a new value for the db.format
configuration in the neo4j.conf file.
Alternatively, you can set the store format of new databases using the CREATE DATABASE databasename OPTIONS {storeFormat: 'the-new-format'}
command.
However, if the store is seeded with seedURI
, existingDataSeedServer
or existingDataSeedInstance
, or if the command is being used to mount pre-existing store files already present on the disk, they will use their current store format without any alterations.
See Store formats, for more details about available database store formats in Neo4j.
Syntax
Command | Syntax |
---|---|
|
|
|
Command | Syntax |
---|---|
|
|
|
Options
The CREATE DATABASE
command can have a map of options, e.g. OPTIONS {key: 'value'}
.
Key | Value | Description |
---|---|---|
|
|
Controls how the system handles existing data on disk when creating the database.
Currently, this is only supported with |
|
ID of the cluster server |
Defines which server is used for seeding the data of the created database.
The server ID can be found in the |
|
URI to a backup or a dump from an existing database. |
Defines an identical seed from an external source which will be used to seed all servers. For more information, see Seed from a URI. |
|
Comma-separated list of configuration values. |
|
|
credentials |
Defines credentials that need to be passed into certain seed providers.
It is recommended to use the |
|
|
Defines the level of enrichment applied to transaction logs for Change Data Capture (CDC) purposes. For details about enrichment mode, see Change Data Capture Manual → Enable CDC on self-managed instances → Modify a database’s CDC mode. |
|
|
Defines the store format if the database created is new.
If the store is seeded with |
Starting from Neo4j 2025.01, you can use The |
The CREATE DATABASE [OR REPLACE]
command can have a map of options, e.g., OPTIONS {key: 'value'}
.
Key | Value | Description |
---|---|---|
|
ID of the cluster server |
Defines which server is used for seeding the data of the created database.
The server ID can be found in the |
|
URI to a backup, a folder that contains backup artifacts or a dump from an existing database. |
Defines a seed from an external source, which will be used to seed all servers. |
|
Comma-separated list of configuration values. |
For more information see Seed from URI. |
|
|
Defines the level of enrichment applied to transaction logs for Change Data Capture (CDC) purposes. For details about enrichment mode, see Change Data Capture Manual → Enable CDC on self-managed instances → Set the enrichment mode. |
|
|
Defines the store format if the database created is new.
If the store is seeded with |
|
Datetime or transaction id. E.g. |
If you are passing a |
|
A source database name |
If the |
|
|
Included for backward compatibility only, has no effect and will be removed in a future version. |
In Cypher 25, the options |
The following examples show how to create a database using the CREATE DATABASE
command with various options.
Create a database
To create a database named actors
, use the command CREATE DATABASE
followed by the name of this database.
CREATE DATABASE actors
When you create a database, it shows up in the listing provided by the command SHOW DATABASES
:
SHOW DATABASES YIELD name
+-------------+ | name | +-------------+ | "actors" | | "movies" | | "neo4j" | | "system" | +-------------+
Create a database with WAIT
Sub-clause WAIT
allows you to specify a time limit for the command to complete and return.
CREATE DATABASE slow WAIT 5 SECONDS
+-------------------------------------------------------+ | address | state | message | success | +-------------------------------------------------------+ | "localhost:7687" | "CaughtUp" | "caught up" | TRUE | +-------------------------------------------------------+
The success
column provides an aggregate status of whether or not the command is considered successful.
Thus, every row has the same value, determined on a successful completion without a timeout.
Sub-clause WAIT
allows you to specify a time limit for the command to complete and return.
CREATE DATABASE slow WAIT 5 SECONDS
info: Server `ServerId{b55c6551}` at address `server1:7687` has caught up. 03N85 (Neo.ClientNotification.Cluster.ServerCaughtUp) info: Server `ServerId{a9e7e8f1}` at address `server2:7687` has caught up. 03N85 (Neo.ClientNotification.Cluster.ServerCaughtUp) info: Server `ServerId{0f7cb48e}` at address `server3:7687` has caught up. 03N85 (Neo.ClientNotification.Cluster.ServerCaughtUp)
The command returns a notification for each server in the cluster to indicate the status of that command on that server.
In this example, all three cluster members have returned 03N85 (Neo.ClientNotification.Cluster.ServerCaughtUp)
, which indicates that the server has applied the command successfully and is up to date.
Create a database with IF NOT EXISTS
or OR REPLACE
The CREATE DATABASE
command is optionally idempotent, with the default behavior to fail with an error if the database already exists.
There are two ways to circumvent this behavior.
First, appending IF NOT EXISTS
to the command ensures that no error is returned and that nothing happens if the database already exists.
CREATE DATABASE actors IF NOT EXISTS
Second, adding OR REPLACE
to the command deletes any existing database and creates a new one.
CREATE OR REPLACE DATABASE actors
This is equivalent to running DROP DATABASE actors IF EXISTS
followed by CREATE DATABASE actors
.
Keep in mind that using CREATE OR REPLACE DATABASE
also removes indexes and constraints.
To preserve them, run the following Cypher commands before the CREATE OR REPLACE DATABASE
and save their outputs:
SHOW CONSTRAINTS YIELD createStatement AS statement
SHOW INDEXES YIELD createStatement, owningConstraint
WHERE owningConstraint IS NULL
RETURN createStatement AS statement
The behavior of IF NOT EXISTS
and OR REPLACE
apply to both standard and composite databases (e.g. a composite database may replace a standard database or another composite database).
The |
Set a default Cypher version for a standard database
You can set the default Cypher version for a database when creating it. If not specified, the version for that database will be set to the default Cypher version of the DBMS. For example:
CREATE DATABASE actors DEFAULT LANGUAGE CYPHER 25
This command creates a database named actors
with the default Cypher version set to 25.
To view the default Cypher version of each database in the DBMS, run the command SHOW DATABASES
with the YIELD
clause and specify the defaultLanguage
column.
For example:
SHOW DATABASES YIELD name, defaultLanguage
name | defaultLanguage |
---|---|
|
|
|
|
|
|
|
|
Rows: 4 |
For more information about other options for configuring the Cypher version, see Configure the Cypher default version.
Setting the default language to |