mysql5.7 生成列 generated column用法实例分析
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本文实例讲述了mysql5.7 生成列 generated column用法。分享给大家供大家参考,具体如下:生成列的值是根据列定义中的表达式计算得出的。mysql5.7支持两种类型的生成列:1、vi
千家信息网最后更新 2025年11月07日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安全错误
数据库的锁怎样保障安全
拼多多软件开发
软件开发项目实践心得体会
泉州数据库安全
挂备案阿里云服务器ip
互联网结合电子科技教学
软件开发人才笔试题
天津拍拍购网络技术有限公司
介绍网络安全ppt
西安网络安全专业大学
智能充电网络安全吗
奉化一站式软件开发教程
游戏网络安全陷阱
数据库选错索引
由于计算机网络技术的发展
沃尔沃事故数据库
vpn服务器搭建软件
网络安全体系构件包括哪两项
c ef 更新数据库
网络安全包含数据安全
网络安全课标准尺度
家用小型服务器
2022网络安全攻防演练
vb数据库名称
对软件开发专业培养的建议
sql数据库查询用户名命令
关于网络安全宣传漫画
卡迪夫贝尔法斯特网络安全
特种网络技术标准
软件开发风险分析及管理
数据库系统时间