千家信息网

mysql5.7 生成列 generated column用法实例分析

发表于:2024-09-24 作者:千家信息网编辑
千家信息网最后更新 2024年09月24日,本文实例讲述了mysql5.7 生成列 generated column用法。分享给大家供大家参考,具体如下:生成列的值是根据列定义中的表达式计算得出的。mysql5.7支持两种类型的生成列:1、vi
千家信息网最后更新 2024年09月24日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安全错误 数据库的锁怎样保障安全 怎么解除无法打开数据库 如何学会服务器管理 霸州erp平台网络技术 常见项目管理服务器有哪些 备案的域名服务器换了怎么办 墙纸软件开发背景 深圳农商银行软件开发 中国互联网科技爆发 浪潮云平台软件开发工程师 数据库怎么生成新表 软件开发有必要考个研究生吗 家庭教育及网络安全重庆 德州精创软件开发公司 换一张网络安全的手抄报 国内做数据库的技术人员多么 互联网时代用什么软件开发 操作系统与网络技术 软件开发外包在哪里开发 金典网络技术 寻乌软件开发文档 闪烁之光服务器符文数据 数据库比较基础的知识点 学校行业网络安全自查报告 北京市网络安全办公室 辽宁数据软件开发过程标准 软件开发公司起什么名字好听 orcle数据库应用开发及实践 青岛加加互联网络科技有限公司 方舟加入有模组的服务器 计算机网络技术管理技术考题
0