# 虚拟列

URL: https://caijiao.org/mariadb/advanced/features/virtual-columns
Source: docs/mariadb/advanced/features/virtual-columns.md
Description: 本节介绍 MariaDB 中虚拟列的概念及使用方法，通过虚拟列实现基于表达式的计算字段，提升数据灵活性和查询效率。

## 1. 什么是虚拟列

虚拟列（Virtual Column）是根据表中其它列的表达式计算而来的列，不存储实际数据，而是在查询时动态计算。它可以简化查询逻辑，提升数据一致性。

## 2. 虚拟列的类型

- **虚拟（Virtual）**：不占用存储空间，查询时计算。
- **持久化（Stored）**：计算结果存储在表中，查询更快，但占用存储。

## 3. 创建虚拟列示例

创建带虚拟列的表：

```sql
CREATE TABLE employees (
  first_name VARCHAR(50),
  last_name VARCHAR(50),
  full_name VARCHAR(101) AS (CONCAT(first_name, ' ', last_name)) VIRTUAL
);
````

查询时，`full_name` 自动计算 `first_name` 和 `last_name` 的拼接结果。

## 4. 使用持久化虚拟列

如果查询性能要求高，可以使用 `STORED`：

```sql
CREATE TABLE employees (
  first_name VARCHAR(50),
  last_name VARCHAR(50),
  full_name VARCHAR(101) AS (CONCAT(first_name, ' ', last_name)) STORED
);
```

## 5. 注意事项

* 虚拟列不能直接插入或更新，只能通过修改基础列影响其值。
* 支持索引创建，尤其是持久化虚拟列，提高查询效率。
* 适用于计算字段、格式转换、派生数据等场景。

---

虚拟列是 MariaDB 中强大的功能，能够通过表达式动态生成字段，简化业务逻辑并优化性能。
