<!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at
    
        http://www.apache.org/licenses/LICENSE-2.0
    
    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->

# 数据库管理

## 1. 数据库管理

### 1.1 创建数据库

用于创建数据库。

**语法：**

```SQL
 CREATE DATABASE (IF NOT EXISTS)? <DATABASE_NAME> (WITH properties)?
```

**说明：**

1. <DATABASE_NAME> 数据库名称，具有以下特性：
   - 大小写不敏感，创建成功后，统一显示为小写
   - 名称的长度不得超过 64 个字符。
   - 名称中包含下划线（_）、数字（非开头）、英文字母可以直接创建
   - 名称中包含特殊字符（如`）、中文字符、数字开头时，必须用双引号 "" 括起来。

2. WITH properties 子句可配置如下属性：

> 注：属性的大小写不敏感，有关详细信息[大小写敏感规则](../SQL-Manual/Identifier.md#大小写敏感性)。

| 属性                      | 含义                                     | 默认值    |
| ------------------------- | ---------------------------------------- | --------- |
| `TTL`                     | 数据自动过期删除，单位 ms                | INF       |
| `TIME_PARTITION_INTERVAL` | 数据库的时间分区间隔，单位 ms            | 604800000 |
| `SCHEMA_REGION_GROUP_NUM` | 数据库的元数据副本组数量，一般不需要修改 | 1         |
| `DATA_REGION_GROUP_NUM`   | 数据库的数据副本组数量，一般不需要修改   | 2         |

**示例：**

```SQL
CREATE DATABASE IF NOT EXISTS database1 with(TTL=31536000000);
```

### 1.2 使用数据库

用于指定当前数据库作为表的命名空间。

**语法：**

```SQL
USE <DATABASE_NAME>
```

**示例:** 

```SQL
USE database1;
```

### 1.3 查看当前数据库

返回当前会话所连接的数据库名称，若未执行过 `use`语句指定数据库，则默认为 `null`。

**语法：**

```SQL
SHOW CURRENT_DATABASE
```

**示例：**

```SQL
USE database1;
SHOW CURRENT_DATABASE;
```
```shell
+---------------+
|CurrentDatabase|
+---------------+
|      database1|
+---------------+
```

### 1.4 查看所有数据库

用于查看所有数据库和数据库的属性信息。

**语法：**

```SQL
SHOW DATABASES (DETAILS)?
```

**语句返回列含义如下：**

| 列名                    | 含义                                                                                                                                                                                                      |
| ----------------------- |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| database                | database名称。                                                                                                                                                                                             |
| TTL                     | 数据保留周期。如果在创建数据库的时候指定TTL，则TTL对该数据库下所有表的TTL生效。也可以再通过 [create table](../Basic-Concept/Table-Management_apache.md#11-创建表) 、[alter table](../Basic-Concept/Table-Management_apache.md#14-修改表) 来设置或更新表的TTL时间。 |
| SchemaReplicationFactor | 元数据副本数，用于确保元数据的高可用性。可以在`iotdb-system.properties`中修改`schema_replication_factor`配置项。                                                                                                                      |
| DataReplicationFactor   | 数据副本数，用于确保数据的高可用性。可以在`iotdb-system.properties`中修改`data_replication_factor`配置项。                                                                                                                          |
| TimePartitionInterval   | 时间分区间隔，决定了数据在磁盘上按多长时间进行目录分组，通常采用默认1周即可。                                                                                                                                                                 |
| SchemaRegionGroupNum          | 使用`DETAILS`语句会返回此列，展示数据库的元数据副本组数量，一般不需要修改                                                                                                                                                               |
| DataRegionGroupNum         | 使用`DETAILS`语句会返回此列，展示数据库的数据副本组数量，一般不需要修改                                                                                                                                                                |

**示例:** 

```SQL
SHOW DATABASES DETAILS;
```
```shell
+------------------+-------+-----------------------+---------------------+---------------------+--------------------+------------------+
|          Database|TTL(ms)|SchemaReplicationFactor|DataReplicationFactor|TimePartitionInterval|SchemaRegionGroupNum|DataRegionGroupNum|
+------------------+-------+-----------------------+---------------------+---------------------+--------------------+------------------+
|         database1|    INF|                      1|                    1|            604800000|                   1|                 2|
|information_schema|    INF|                   null|                 null|                 null|                null|              null|
+------------------+-------+-----------------------+---------------------+---------------------+--------------------+------------------+
```

### 1.5 修改数据库

用于修改数据库中的部分属性。

**语法：**

```SQL
ALTER DATABASE (IF EXISTS)? database=identifier SET PROPERTIES propertyAssignments
```

**说明：**

1. `ALTER DATABASE`操作目前仅支持对数据库的`SCHEMA_REGION_GROUP_NUM`、`DATA_REGION_GROUP_NUM`以及`TTL`属性进行修改。

**示例:** 

```SQL
ALTER DATABASE database1 SET PROPERTIES TTL=31536000000;
```

### 1.6 删除数据库

用于删除数据库。

**语法：**

```SQL
DROP DATABASE (IF EXISTS)? <DATABASE_NAME>
```

**说明：**

1. 数据库已被设置为当前使用（use）的数据库，仍然可以被删除（drop）。
2. 删除数据库将导致所选数据库及其内所有表连同其存储的数据一并被删除。

**示例:**

```SQL
DROP DATABASE IF EXISTS database1;
```
