Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MySQL虚拟列

MySQL虚拟列的使用示例

作者:xixingzhe2

虚拟列是MySQL中的一种特殊列,它不存储在表中,而是在查询时动态计算生成,虚拟列可以提高查询效率、减少存储需求、确保数据一致性、简化查询和保护敏感数据,感兴趣的可以了解一下

1、概述

在 MySQL 中,虚拟列(也称为计算列或生成列)是一种特殊的列,它不存储在数据库表中,而是在查询时动态计算生成。虚拟列可以基于表中的其他列进行计算,或者直接计算出一些值。它们在数据库设计和查询优化中有一些重要的用途:

在 MySQL 中,虚拟列可以是存储的(STORED)或非存储的(VIRTUAL)。存储的虚拟列实际上会存储在表中,而非存储的虚拟列则不会存储,仅在查询时计算。

创建虚拟列的语法

以下是创建虚拟列的基本语法:

CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    virtual_column AS (expression),
    ...
);

或者在现有的表中添加虚拟列:

ALTER TABLE table_name
ADD COLUMN virtual_column AS (expression);

2、示例

表结构

假设有一个员工表 employees,包含员工的姓名、年龄和出生日期:

CREATE TABLE `employee` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT NULL,
  `age` int DEFAULT NULL,
  `birth_date` date DEFAULT NULL,
  `full_name` varchar(255) GENERATED ALWAYS AS (concat(`name`,_utf8mb4' (',`age`,_utf8mb4' years old)')) VIRTUAL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='员工';

在这个例子中,full_name 是一个虚拟列,它将员工的姓名和年龄结合起来生成一个完整的名称。

初始化数据

INSERT INTO `employee` VALUES (1, 'Lois Simpson', 12, '2022-12-19', DEFAULT);
INSERT INTO `employee` VALUES (2, 'Nakagawa Sakura', 11, '2021-01-23', DEFAULT);
INSERT INTO `employee` VALUES (3, 'Xiang Rui', 10, '2013-04-04', DEFAULT);
INSERT INTO `employee` VALUES (4, 'Ono Momoe', 11, '2002-07-07', DEFAULT);
INSERT INTO `employee` VALUES (5, 'Fukuda Sara', 11, '2020-12-04', DEFAULT);
INSERT INTO `employee` VALUES (6, 'Ryan Dunn', 11, '2021-11-01', DEFAULT);
INSERT INTO `employee` VALUES (7, 'Ku Tsz Hin', 11, '2004-10-31', DEFAULT);
INSERT INTO `employee` VALUES (8, 'Todd Diaz', 11, '2023-05-11', DEFAULT);
INSERT INTO `employee` VALUES (9, 'Yamada Kenta', 11, '2015-06-15', DEFAULT);
INSERT INTO `employee` VALUES (10, 'Leslie Anderson', 5, '2010-08-19', DEFAULT);

查询

注意事项

通过这些功能,虚拟列在数据库设计和优化中提供了一种灵活且强大的工具。

3、优缺点

优点

缺点

到此这篇关于MySQL虚拟列的使用示例的文章就介绍到这了,更多相关MySQL虚拟列内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

您可能感兴趣的文章:
阅读全文