生成列的值是根据列定义中的表达式计算得出的。

mysql5.7支持两种类型的生成列:

1、virtual 生成列:当从表中读取记录时,才计算该列值。不会把数据持久化在硬盘上。

2、stored 生成列:向表中写入记录时,计算该列值,并作为常规列持久化存储在硬盘上。

所以 virtual 相较于 stored 需要的的存储空间更少,如果未指定生成列类型,mysql5.7 默认生成列类型为 virtual。

定义生成列的语法:

col_name data_type [GENERATED ALWAYS] AS (expression)[VIRTUAL | STORED] [NOT NULL | NULL][UNIQUE [KEY]] [[PRIMARY] KEY][COMMENT 'string']

我们创建一个表,指定其中一个字段为生成列。

CREATE TABLE test (id INT (11) UNSIGNED NOT NULL AUTO_INCREMENT,chinese DOUBLE NOT NULL DEFAULT '0',math DOUBLE NOT NULL DEFAULT '0',english DOUBLE NOT NULL DEFAULT '0',total_score DOUBLE AS (chinese + math + english),PRIMARY KEY (id)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4;

我们向表中插入一条数据

insert into test(chinese, math, english) values(66, 72, 54);

select * from test;

注意,生成的列不允许我们人为的指定值,这会引发ERROR 3105的错误。

如果要在 insert 语句中包含 total_score 字段名,则只能将其值设为 DEFAULT

insert into test(chinese, math, english, total_score) values(33, 44, 55, DEFAULT);

如果表已经存在了,我们可以通过alter table语句来创建,修改,删除生成列。

alter table test add column times_score double generated always as (chinese * math * english) stored;

修改生成列的数据类型和表达式

alter table test modify column times_score float generated always as (chinese * math * english * 10) stored;

重命名生成的列

alter table test change times_score times_score_new float generated always as (chinese * math * english * 10) stored;

删除生成的列

alter table test drop column times_score_new;

virtual 列不能更改为 stored 的生成列,反之亦然。只能先删除,然后再重新添加

alter table test drop column total_score;
alter table test add column total_score double generated always as (chinese + math + english) stored;

表中的常规字段,可以修改为 stored 生成列,但不能是 virtual 生成列

alter table test modify column chinese double generated always as (math + 1) stored;

stored 生成列可以修改为常规字段,值为生成值

alter table test modify column total_score double;

转载于:https://www.cnblogs.com/jkko123/p/10176722.html

mysql5.7 生成列 generated column相关推荐

  1. PostgreSQL 生成列(Generated Columns)教程

    PostgreSQL 12 增加新的特性--生成列(Generated Columns),也就是计算列.在之前版本也可以实现,但需要定义函数和触发器,利用该功能可以更容易使用并可以提升性能. 生成列是 ...

  2. MySQL5.7之Json Column和Generated Column使用介绍

    目录 前言 一.MySQL中的Generated Column列(计算列) 二.JSON字段相关查询 三.JSON字段相关写操作 四.JSON字段索引以及Generated字段 五.结束语 前言 My ...

  3. MySQL表生成列(Generated Columns)的使用说明

    原文地址 MySQL的表生成列通常又叫做虚拟列或计算列.这个生成列的值是在列定义时包含了一个计算表达式计算得到的,有两种类型的生成列: Virtual(虚拟):这个类型的列会在读取表记录时自动计算此列 ...

  4. mysql动态扩展_动态可扩展查询MYSQL5.7JSON+虚拟列+Mybatis

    背景:现有业务扩展字段,都存在feature字段,存在语义不清晰以及,难以利用索引查询问题 Mysql 5.7后推出利器,JSON+虚拟列,即实现了业务语义统一,也支持索引查询加速 一.简单描述 My ...

  5. mysql中生成列与JSON类型的索引

    MySQL中支持生成列,生成列的值是根据列定义中包含的表达式计算的. 一个简单的例子来认识生成列! CREATE TABLE triangle( sidea DOUBLE, sideb DOUBLE, ...

  6. mysql计算三角形斜边_MySQL 5.7新特性之Generated Column(函数索引)

    MySQL 5.7引入了Generated Column,这篇文章简单地介绍了Generated Column的使用方法和注意事项,为读者了解MySQL 5.7提供一个快速的.完整的教程.这篇文章围绕 ...

  7. Mysql的组合字段Generated Column

    所谓组合字段(自创的名字,没有在网上找到通用的名字),是MySQL5.7加入的新功能,可以定义一个字段,值是其他字段值的组合. 官网中举了一个勾股定理的例子: CREATE TABLE triangl ...

  8. SQL 中的生成列/计算列以及主流数据库实现

    文章目录 什么是生成列? Oracle 中的虚拟列 MySQL 中的生成列 SQL Server 中的计算列 PostgreSQL 中的存储生成列 SQLite 中的生成列 什么是生成列? 在 SQL ...

  9. mysql generated_MySQL 5.7新特性之Generated Column

    这是IMG社区迎来的第一篇投稿,欢迎各位踊跃投稿,共同成长,一起打造最有态度的MySQL社区--IMG.IMG社区的网站,论坛也在完善中,后期会不断推出,目前就让我们在公众账号上讨论吧. IMG官方微 ...

最新文章

  1. 四种常见的激活函数画图及简单改造
  2. Easy Summation 预处理 快速幂
  3. emacs org-mode文件转html文件
  4. java cxf 搭soa,WebService CXF入门问题 SOA 骑着上帝去环游 - 贪吃蛇学院-专业IT技术平台...
  5. 在MFC单文档中,如何操作状态栏
  6. Understanding Clouds from Satellite Images比赛的discussion调研与colab数据集下载配置
  7. 依赖注入和控制反转的理解,写的太好了。
  8. Java Web学习总结(41)——Java EE 8 新功能展望
  9. NSString 和 NSMutableString
  10. 打包vue项目时报错:Expected indentation of 6 spaces but found 10
  11. python检测excel是否打开_Python判断远程服务器上Excel文件是否被人打开的方法_学领未来...
  12. Linux操作系统资源 大合集【鸿蒙OS Suse 红帽 BSD CentOS Arch Ubuntu】 | 寻找C站宝藏
  13. matlab创建wps服务器,wps设置云服务器地址(wps放到服务器)
  14. HashMap底层结构
  15. 概率论——随机变量、概率分布函数、概率密度函数、联合概率密度
  16. 迅雷index.html是什么文件,迅雷看看的缓存文件在哪个文件夹
  17. 社区版pycharm的django创建app失败问题解决
  18. Python | 小白的 Asyncio 教程
  19. 数据分析——人力资源
  20. 团建游戏----气球大赛

热门文章

  1. 浙大这个班诞生128家创业公司,总市值高达千亿!
  2. 在mysql查询数据库密码_如何查询mysql数据库密码
  3. SAP MM初阶之事务代码MIGO界面批次拆分最多输入15行?
  4. 新手必看:Python 3.8六大新功能
  5. AI项目成功的4要素
  6. 了解一下:机器学习性能优化的6个指标
  7. 「BAT面试现场」如何判断一个数是否在40亿个整数中?
  8. AI技术诠释全新智能,多方位优化样样贴心
  9. python刷CSDN阅读量
  10. 人工智能,“抛弃”真实数据集?