千家信息网

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安全错误 数据库的锁怎样保障安全 咖啡 互联网科技公司排名 科技制造互联网公司 奇酷互联网科技 苏州互联网科技贷款公司 壕鑫互联网络科技 米客互联网科技 火传媒上海互联网科技 中国互联网金融科技基金 恒生科技互联网指数分析 科技与互联网的利与弊 西藏七维空间互联网科技有限公司 银川新华互联网科技职业技术培训学校图片 互联网科技教育视频 昊天互联网科技有限公司 江阴互联网智能科技产品进口 互联网领先科技宣传片 富国互联网科技002692 银川新华互联网科技学校是国营吗 高科技和互联网的现代国家 湖北九亚互联网络科技有限公司 广西互联网科技公司 互联网养老 桔豆科技 互联网科技中介 金融科技与互联网金融相同和不同 洛阳共同富裕互联网科技有限公司 中科明德北京互联网科技 广州燕处互联网科技有限公司 青岛互联网科技园 伍佰万互联网科技是干嘛的
0