
# 修改数据库属性
#### 功能描述
ALTER DATABASE语句用于修改数据库的属性或位置。DATABASE、SCHEMA和NAMESPACE关键字可互换使用。如果数据库不存在，会报错。
#### 语法格式
设置属性
```
ALTER { DATABASE | SCHEMA | NAMESPACE } database_name
    SET { DBPROPERTIES | PROPERTIES } ( property_name = property_value [, ...] )
```
删除属性
```
ALTER { DATABASE | SCHEMA | NAMESPACE } database_name
    UNSET { DBPROPERTIES | PROPERTIES } ( property_name [, ...] )
```
修改位置
```
ALTER { DATABASE | SCHEMA | NAMESPACE } database_name
    SET LOCATION 'new_location'
```
#### 关键字
- **DATABASE / SCHEMA / NAMESPACE**：三者等效，可互换使用，建议使用DATABASE。
- **SET DBPROPERTIES / SET PROPERTIES**：设置数据库属性，DBPROPERTIES和PROPERTIES等效。
- **UNSET DBPROPERTIES / UNSET PROPERTIES**：删除数据库属性。如果指定的属性不存在，命令会忽略并成功执行。
- **SET LOCATION**：修改数据库的默认存储位置。
 
#### 参数说明
表1参数说明 
| 参数                                    | 是否必选    | 描述                                                       |
|:---|:---|:---|
| database_name                         | 是       | 要修改的数据库名称。                                               |
| SET DBPROPERTIES / SET PROPERTIES     | 是       | 设置数据库属性。指定的属性值会覆盖同名的已有属性值。主要用于记录数据库的元数据信息。               |
| UNSET DBPROPERTIES / UNSET PROPERTIES | 是       | 删除数据库属性。如果指定的属性不存在，命令会忽略并成功执行。                           |
| property_name                         | 是       | 属性名称。                                                    |
| property_value                        | 是（SET时） | 属性值。                                                     |
| SET LOCATION                          | 是       | 修改数据库的默认存储位置。不会将当前数据库目录中的数据从旧位置移动到新位置，也不影响数据库下已有表/分区的位置。 |
   
#### 注意事项
- 修改数据库位置不会自动迁移已有数据，仅影响后续新建表的默认位置。
- SET LOCATION的路径需为OBS格式（如obs://bucket-name/path/）。
- DATABASE、SCHEMA和NAMESPACE关键字可互换使用，建议使用DATABASE。
- DBPROPERTIES和PROPERTIES关键字可互换使用。
- 使用DESCRIBE DATABASE EXTENDED可验证属性和位置的修改结果。
 
#### 示例1：设置数据库属性
创建数据库inventory，并设置属性。
```
CREATE DATABASE IF NOT EXISTS inventory
  LOCATION 'obs://my-bucket/inventory/';
ALTER DATABASE inventory SET DBPROPERTIES ('Edited-by' = 'John', 'Edit-date' = '01/01/2001');
```
验证属性：
```
DESCRIBE DATABASE EXTENDED inventory;
```
结果示例：
| database_description_item | database_description_value                 |
|:---|:---|
| Database Name             | inventory                                  |
| Location                  | obs://my-bucket/inventory/                 |
| Properties                | ((Edit-date,01/01/2001), (Edited-by,John)) |
   
#### 示例2：修改数据库位置
```
ALTER DATABASE inventory SET LOCATION 'obs://my-bucket/new-inventory/';
```
验证新位置：
```
DESCRIBE DATABASE EXTENDED inventory;
```
#### 示例3：删除数据库属性
```
ALTER DATABASE inventory UNSET DBPROPERTIES ('Edited-by');
```
删除不存在的属性时命令会忽略并成功执行：
```
ALTER DATABASE inventory UNSET DBPROPERTIES ('non-existent');
```
#### 示例4：使用SCHEMA/NAMESPACE关键字
SCHEMA、NAMESPACE与DATABASE等效，可替换使用。
```
ALTER SCHEMA inventory SET DBPROPERTIES ('Owner' = 'Admin');  
ALTER NAMESPACE inventory SET DBPROPERTIES ('Department' = 'Engineering');
```
