mysql5.7 生成列 generated column用法实例分析
16lz
2021-12-19
本文实例讲述了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);
注意,生成的列不允许我们人为的指定值,这会引发ERROR 3105的错误。
如果要在 insert 语句中包含 total_score 字段名,则只能将其值设为 DEFAULT
insert into test(chinese, math, english, total_score) values(33, 44, 55, DEFAULT);
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;
alter table test drop column total_score;alter table test add column total_score double generated always as (chinese + math + english) stored;
alter table test modify column chinese double generated always as (math + 1) stored;
alter table test modify column total_score double;
希望本文所述对大家MySQL数据库计有所帮助。
更多相关文章
- 《Android和PHP最佳实践》官方站
- android用户界面之按钮(Button)教程实例汇
- TabHost与RadioGroup结合完成的菜单【带效果图】5个Activity
- Android(安卓)UI开发第十七篇——Android(安卓)Fragment实例(Lis
- Android——Activity四种启动模式
- Android布局(序章)
- Android发送短信方法实例详解
- Android(安卓)读取资源文件实例详解
- android 蓝牙通讯