MySQL 什么是MySQL GENERATED COLUMN?
在MySQL 5.7版本之后,引入了新的功能——生成列(GENERATED COLUMN)。该功能可以自动计算并填充新列的值,而无需使用触发器或应用层逻辑。
GENERATED COLUMN有两种类型: 存储的和虚拟的。
- 存储的GENERATED COLUMN:将值存储在表中
- 虚拟的GENERATED COLUMN:只在SQL查询期间计算值
GENERATED COLUMN可以用于计算常见的值,如JSON数据或日期时间戳。同时,它还有助于减少应用程序代码复杂性和错误,并且可以提高性能。
阅读更多:MySQL 教程
如何在创建表时使用MySQL GENERATED COLUMN?
在创建表时,可以使用以下语法定义GENERATED COLUMN:
column_name data_type GENERATED ALWAYS AS (expression) [VIRTUAL|STORED],
- column_name:新列的名称
- data_type:列数据类型(必填项)
- GENERATED ALWAYS:生成列的标识。ALWAYS选项表示该列始终是GENERATED COLUMN,不允许用户插入值
- AS (expression):定义列的表达式。可以是任何SQL表达式,如函数调用、算术运算或连接运算符。
- VIRTUAL或STORED:定义生成列的类型。虚拟列只在SQL查询期间计算值,并不存储在表中。存储列将计算值存储在表中。
以下是一个示例:
CREATE TABLE employee (
id INT,
first_name VARCHAR(50),
last_name VARCHAR(50),
hire_date DATE,
salary DECIMAL(10,2),
bonus DECIMAL(5,2),
total_salary DECIMAL(15,2)
GENERATED ALWAYS AS (salary + IFNULL(bonus, 0)) STORED
);
在这个示例中,total_salary列将根据salary和bonus列的值计算出来,而不需要写应用逻辑或使用触发器。
结论
MySQL GENERATED COLUMN是生成列的新特性,可以自动计算并填充新列的值。在创建表时,可以使用GENERATED ALWAYS关键字定义生成列的基础表达式。该功能可以帮助我们减少应用程序代码复杂性和错误,并且可以提高性能。
极客笔记