返回顶部
首页 > 资讯 > 数据库 >什么是mysql的虚拟列以及应用实例
  • 513
分享到

什么是mysql的虚拟列以及应用实例

mysql数据库java 2023-09-20 19:09:00 513人浏览 泡泡鱼
摘要

目录 简介虚拟列的分类虚拟列使用示例 简介 Mysql的虚拟列是一种新特性,可以在查询时直接使用虚拟列(代替视图) 存储虚拟列可以用作实例化缓存,以用于动态计算成本高昂的复杂条件。虚拟列可

目录

简介

Mysql的虚拟列是一种新特性,可以在查询时直接使用虚拟列(代替视图) 存储虚拟列可以用作实例化缓存,以用于动态计算成本高昂的复杂条件。虚拟列可以在创建表时定义,并在查询时像普通列一样使用。虚拟列通常用于计算或汇总数据,例如计算总价、计算平均值等。

定义mysql虚拟列(generated-columns)是Mysql 5.7加入的新特性。从名字来讲,“生成的字段”,并不是主动插入的值。MySQL的文档,是这么解释虚拟列的:There are two kinds of Generated Columns: virtual (default) and store-generated (non-default). Virtual columns are generated on the fly as part of an INSERT or UPDATE statement, and they are not stored in the table. Stored-generated columns are calculated based on the values of other columns and are stored in the table.

虚拟列的分类

在MySQL中,虚拟列有两种类型:STORED和VIRTUAL,分别表示存储列和虚拟列。

  • 存储列(STORED):表示虚拟列的值实际上是被计算出来并存储在表中的,可以在查询时直接使用。存储列的优点是它们可以被索引,这意味着它们可以更快地被搜索,但是它们也会占用更多的存储空间。存储列的值在数据插入或更新时动态计算,并存储在表中。

其中的公式为:

alter table table_name    modify column_name int as (表达式) stored;

AS (表达式):定义该列为虚拟列,并指定其值的计算方式。表达式是一个SQL表达式,用于计算虚拟列的值。

STORED:表示该虚拟列的值会被计算出来并存储在表中。

  • 虚拟列(VIRTUAL):表示虚拟列的值不会存储在表中,而是在查询时动态计算。虚拟列的优点是它们不会占用额外的存储空间,但是它们不能被索引,因此在大型表中使用虚拟列时需要谨慎,否则可能会影响查询性能。 在上述SQL语句中,使用了STORED关键字表示该虚拟列的值会被计算出来并存储在表中。因此,每次查询表时,MySQL都会返回存储在表中的虚拟列值,而不是在查询时计算虚拟列的值。

其中公式为:

alter table table_name    add column_name int as (表达式);

AS (表达式):定义该列为虚拟列,并指定其值的计算方式。表达式是一个SQL表达式,用于计算虚拟列的值。

虚拟列使用示例

创建数据库mydb,创建用户表并插入数据

create database mydb;use mydb;create table t_user(    id          bigint auto_increment        primary key,    name        varchar(255)  null,    age         int default 0 null);INSERT INTO mydb.t_user (name, age) VALUES ('小明', 12)INSERT INTO mydb.t_user (name, age) VALUES ('小红', 18)

插入两条数据。

创建虚拟存储列

alter table mydb.t_user    add store_age int as (age + 9) stored;

创建了store_age的虚拟存储列,以age为标准加9.

展示效果

idnameagestore_age
1小明1221
2小红1827

可以看到store_age的数据都是在age的基础上加了9

创建虚拟列

alter table mydb.t_user    add virtual_age int as (age + 87);

创建了virtual_age的虚拟列,以age为标准加87.

展示效果

idnameagestore_agevirtual_age
1小明122199
2小红1827105

可以看到virtual_age的数据都是在age的基础上加了87.

来源地址:https://blog.csdn.net/qq_30503389/article/details/131243934

您可能感兴趣的文档:

--结束END--

本文标题: 什么是mysql的虚拟列以及应用实例

本文链接: https://www.lsjlt.com/news/413217.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作