> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-parallel-read-in-order-multi-part.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Documentação do CREATE DATABASE

# CREATE DATABASE

Cria um novo banco de dados.

```sql theme={null}
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] [ENGINE = engine(...)] [SETTINGS ...] [COMMENT 'Comment']
```

## Cláusulas

### IF NOT EXISTS

Se o banco de dados `db_name` já existir, o ClickHouse não cria um novo banco de dados e:

* Não lança uma exceção se a cláusula for especificada.
* Lança uma exceção se a cláusula não for especificada.

### ON CLUSTER

O ClickHouse cria o banco de dados `db_name` em todos os servidores do cluster especificado. Veja mais detalhes no artigo sobre [DDL distribuído](/pt-BR/reference/statements/distributed-ddl).

### ENGINE

Por padrão, o ClickHouse usa seu próprio motor de banco de dados [Atomic](/pt-BR/reference/engines/database-engines/atomic). Também existem [MySQL](/pt-BR/reference/engines/database-engines/mysql), [PostgresSQL](/pt-BR/reference/engines/database-engines/postgresql), [MaterializedPostgreSQL](/pt-BR/reference/engines/database-engines/materialized-postgresql), [Replicated](/pt-BR/reference/engines/database-engines/replicated), [SQLite](/pt-BR/reference/engines/database-engines/sqlite).

### COMENTÁRIO

Você pode adicionar um comentário ao banco de dados ao criá-lo.

Há suporte a comentários em todos os motores de banco de dados.

**Sintaxe**

```sql theme={null}
CREATE DATABASE db_name ENGINE = engine(...) COMMENT 'Comment'
```

**Exemplo**

```sql title="Query" theme={null}
CREATE DATABASE db_comment ENGINE = Memory COMMENT 'The temporary database';
SELECT name, comment FROM system.databases WHERE name = 'db_comment';
```

```text title="Response" theme={null}
┌─name───────┬─comment────────────────┐
│ db_comment │ The temporary database │
└────────────┴────────────────────────┘
```

### SETTINGS

A cláusula `SETTINGS` pode ser usada sem uma cláusula `ENGINE`; nesse caso, é utilizado o motor de banco de dados padrão
(`Atomic`). Ela pode conter tanto configurações do motor de banco de dados quanto configurações comuns de consulta; cada
nome é encaminhado para a categoria à qual pertence.

#### disk

O disco usado para armazenar os arquivos de metadados de tabela do banco de dados. Pode-se indicar um disco definido na
configuração do servidor ou definir um disco inline com a função `disk`, da mesma forma que se faz para uma tabela individual:

```sql theme={null}
CREATE DATABASE db_name SETTINGS disk = 'db_disk';
CREATE DATABASE db_name SETTINGS disk = disk(type = 'local', path = '/var/lib/clickhouse-disks/db_disk');
```

Aplica-se a motores de banco de dados que armazenam os metadados das tabelas em disco (`Atomic`, `Ordinary`). Se não for especificado,
será usado o disco definido na configuração de servidor `database_disk.disk`.

#### lazy\_load\_tables

Quando ativado, as tabelas não são carregadas completamente durante a inicialização do banco de dados. Em vez disso, é criado um proxy leve para cada tabela, e o motor de tabela real é materializado no primeiro acesso. Isso reduz o tempo de inicialização e o uso de memória em bancos de dados com muitas tabelas, em que apenas um subconjunto é consultado com frequência.

```sql theme={null}
CREATE DATABASE db_name ENGINE = Atomic SETTINGS lazy_load_tables = 1;
```

Aplica-se a motores de banco de dados que armazenam metadados de tabelas em disco (por exemplo, `Atomic`, `Ordinary`). Views, visões materializadas, dicionários, tabelas `Alias`, tabelas `TimeSeries` e tabelas baseadas em funções de tabela são sempre carregados imediatamente, independentemente dessa configuração.

**Quando usar:** Essa configuração é útil para bancos de dados com um grande número de tabelas (centenas ou milhares), em que apenas um subconjunto é consultado ativamente. Ela reduz o tempo de inicialização do servidor e o uso de memória ao adiar a criação de objetos do motor de tabela, a varredura de partes de dados e a inicialização de threads em segundo plano até o primeiro acesso.

**Impacto em `system.tables`:**

* Antes de uma tabela ser acessada, `system.tables` mostra seu motor como `TableProxy`. Após o primeiro acesso, passa a mostrar o nome real do motor (por exemplo, `MergeTree`).
* Colunas como `total_rows` e `total_bytes` retornam `NULL` para tabelas não carregadas porque o armazenamento real ainda não foi criado.

**Interação com operações DDL:**

* `SELECT`, `INSERT`, `ALTER`, `DROP` disparam automaticamente o carregamento do motor de tabela real no primeiro uso.
* `RENAME TABLE` funciona sem disparar um carregamento.
* Depois que uma tabela é carregada, ela permanece carregada por toda a duração do processo do servidor.

**Limitações:**

* Ferramentas de monitoramento que dependem dos metadados de `system.tables` (por exemplo, `total_rows`, `engine`) podem exibir informações incompletas para tabelas não carregadas.
* A primeira consulta a uma tabela não carregada tem um custo único de carregamento (análise da instrução `CREATE TABLE` armazenada e inicialização do motor).

Valor padrão: `0` (desabilitado).
