1、说明
生成列是由已存在的字段通过表达式计算得来的
2、生成列类型
VIRTUAL,即虚拟
类型,字段值不实际存储,当读取行时再计算,虚拟列类型不占存储
STORED,即存储
类型,字段值会实际存储起来,当插入或更新时,字段值会计算出来并存储起来
3、用法
col_name data_type [GENERATED ALWAYS] AS (expr)
[VIRTUAL | STORED] [NOT NULL | NULL]
[UNIQUE [KEY]] [[PRIMARY] KEY]
[COMMENT 'string']
如:
CREATE TABLE person (
first_name VARCHAR(10) NOT NULL COMMENT '名',
last_name VARCHAR(10) NOT NULL COMMENT '姓',
full_name VARCHAR(21) GENERATED ALWAYS AS (CONCAT(first_name,' ',last_name)) STORED NOT NULL COMMENT '全名'
);
再如:
ALTER TABLE person ADD full_name_gc VARCHAR(21)
GENERATED ALWAYS AS (CONCAT(first_name,'_',last_name)) VIRTUAL NOT NULL COMMENT '全名(虚拟列)'
详见 https://dev.mysql.com/doc/refman/5.7/en/create-table-generated-columns.html