# 动态列

URL: https://caijiao.org/mariadb/advanced/features/dynamic-columns
Source: docs/mariadb/advanced/features/dynamic-columns.md
Description: 本节介绍 MariaDB 的动态列功能，允许在单个表中灵活存储不同结构的列数据，实现更高的扩展性和灵活性。

## 1. 什么是动态列

动态列是 MariaDB 提供的一种特殊功能，允许在一列中存储多个不同的键值对，支持灵活的列结构，适合需要存储非固定字段的数据场景。

## 2. 动态列的特点

- 允许在单个列中存储多种不同的字段和数据类型。
- 通过内置函数访问和修改动态列中的数据。
- 适合存储灵活的、不规则或稀疏的数据结构。

## 3. 创建动态列示例

创建表并插入动态列数据：

```sql
CREATE TABLE products (
  id INT PRIMARY KEY,
  attributes BLOB
);

INSERT INTO products (id, attributes) VALUES
(1, COLUMN_CREATE('color', 'red', 'size', 'M')),
(2, COLUMN_CREATE('color', 'blue', 'weight', 10));
````

## 4. 读取动态列数据

使用 `COLUMN_GET` 函数读取特定属性：

```sql
SELECT
  id,
  COLUMN_GET(attributes, 'color' AS CHAR) AS color,
  COLUMN_GET(attributes, 'size' AS CHAR) AS size
FROM products;
```

## 5. 更新动态列数据

通过 `COLUMN_ADD` 修改或添加字段：

```sql
UPDATE products
SET attributes = COLUMN_ADD(attributes, 'material', 'cotton')
WHERE id = 1;
```

## 6. 注意事项

* 动态列存储为 BLOB 类型，占用空间相对较大。
* 不支持直接对动态列中的字段建立索引，可能影响查询性能。
* 适用于需要灵活字段且不频繁查询字段的场景。

---

动态列功能使 MariaDB 在处理非结构化或半结构化数据时更具灵活性，方便存储和管理多变的数据格式。
