MySQL生成列简介
创建新表时请在CREATE TABLE语句中指定表列。然后可以使用INSERTUPDATE和DELETE 语句直接修改表中的列数据。
MySQL 5.7引入了一个名为generated column 的新功能。它被称为生成列因为此列中的数据是基于预定义的表达式或其他列计算的。
例如具有contacts以下结构
CREATE TABLE IF NOT EXISTS contacts (id INT AUTO_INCREMENT PRIMARY KEY,first_name VARCHAR(50) NOT NULL,last_name VARCHAR(50) NOT NULL,email VARCHAR(100) NOT NULL);
要获取联系人的全名请使用以下CONCAT()函数
SELECT id, CONCAT(first_name, , last_name), emailFROMcontacts;
通过使用MySQL生成的列您可以contacts按如下方式重新创建表
DROP TABLE IF EXISTS contacts;CREATE TABLE contacts (id INT AUTO_INCREMENT PRIMARY KEY,first_name VARCHAR(50) NOT NULL,last_name VARCHAR(50) NOT NULL,fullname varchar(101) GENERATED ALWAYS AS (CONCAT(first_name, ,last_name)),email VARCHAR(100) NOT NULL);
这GENERATED ALWAYS as (expression)是创建生成列的语法。
要测试fullname列请contacts在表中插入一行。
INSERT INTO contacts(first_name,last_name, email)VALUES(john,doe,john.doemysqltutorial.org);
可以从表中查询数据contacts。
SELECT *FROMcontacts;
当从contacts表中查询数据时将立即计算fullname列中的值。
MySQL提供了两种类型的生成列存储列和虚拟列。每次读取数据时都会动态计算虚拟列而在更新数据时会物理计算和存储存储的列。
根据此定义上例中的 fullname列是虚拟列。
MySQL生成了列的语法
定义生成列的语法如下
column_name data_type [GENERATED ALWAYS] AS (expression)[VIRTUAL | STORED] [UNIQUE [KEY]]