mysql5.7 生成列 generated column用法实例分析
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本文实例讲述了mysql5.7 生成列 generated column用法。分享给大家供大家参考,具体如下:生成列的值是根据列定义中的表达式计算得出的。mysql5.7支持两种类型的生成列:1、vi
千家信息网最后更新 2026年11月01日mysql5.7 生成列 generated column用法实例分析
本文实例讲述了mysql5.7 生成列 generated column用法。分享给大家供大家参考,具体如下:
生成列的值是根据列定义中的表达式计算得出的。
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;
更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL查询技巧大全》、《MySQL常用函数大汇总》、《MySQL日志操作技巧大全》、《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》及《MySQL数据库锁相关技巧汇总》
希望本文所述对大家MySQL数据库计有所帮助。
生成
技巧
数据
字段
类型
大全
常规
存储
数据库
硬盘
表达式
语句
实例
专题
事务
兴趣
内容
函数
反之亦然
可以通过
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
广州为想互联网科技有限公司
科技互联网项目
互联网科技会
互联网科技战争
北京互联网科技公司
深圳互联网络科技有限公司
齐家互联网科技
碳银互联网科技
汇久创客互联网科技
上海致骋互联网科技
猫创互联网科技
云创客互联网科技公司
互联网经济与金融科技
亳州好赞互联网科技有限公司
中和天地互联网科技有限公司
科技互联网的核心竞争力
厦门江牛科技互联网
九思连强互联网电子科技有限公司
广州智享互联网科技
互联网科技快速发展优美句子
南京欣网互联网络科技
万易互联网科技
凡科互联网科技
狮子座互联网科技有限公司
西安互联网科技公司
亿账通互联网科技
互联网金融 科技创新
华脉科技工业互联网产品
全球顶尖互联网科技公司
唯美互联网科技