生成列是由已存在的字段经过表达式计算得来的html
VIRTUAL,即虚拟
类型,字段值不实际存储,当读取行时再计算,虚拟列类型不占存储
STORED,即存储
类型,字段值会实际存储起来,当插入或更新时,字段值会计算出来并存储起来mysql
col_name data_type [GENERATED ALWAYS] AS (expr) [VIRTUAL | STORED] [NOT NULL | NULL] [UNIQUE [KEY]] [[PRIMARY] KEY] [COMMENT 'string']
如:sql
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 '全名' );
再如:code
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.htmlhtm