本文实例讲述了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数据库计有所帮助。

更多相关文章

  1. 《Android和PHP最佳实践》官方站
  2. android用户界面之按钮(Button)教程实例汇
  3. TabHost与RadioGroup结合完成的菜单【带效果图】5个Activity
  4. Android(安卓)UI开发第十七篇——Android(安卓)Fragment实例(Lis
  5. Android——Activity四种启动模式
  6. Android布局(序章)
  7. Android发送短信方法实例详解
  8. Android(安卓)读取资源文件实例详解
  9. android 蓝牙通讯

随机推荐

  1. PHP中$是什么意思?
  2. PHP 10 个常见安全问题(实例讲解)
  3. 一个简单QQ群聊案例代码解析(PHP实现)
  4. php面向对象简单概括
  5. 一个简单的部门案例详解(PHP代码实例)
  6. __construct() 和 __destory() 在 PHP 中
  7. 关于php变量申明和内存中的存放方式
  8. PHP面向对象之魔术方法(__tostring,__invo
  9. PHP正则表达式之2种模式和Cookie详解(代码
  10. PHP生命周期