MySQL 如何修改表以添加MySQL存储的GENERATED COLUMNS?
生成列是MySQL5.7的一项新功能。与标准列不同,生成列的值是在插入行时计算得出,而不是由插入行的值决定。这意味着生成列可以包含计算和聚合函数,而不必在查询时重新计算所有值。
但是,如果您已经有一个表,并且想向其中添加生成列,该怎么办呢?本文将介绍如何修改现有表以包含生成列。
阅读更多:MySQL 教程
步骤1:查看表定义
首先,我们需要查看表的定义,以确定要添加的生成列的名称和类型。可以使用以下命令查看表的定义:
DESCRIBE table_name;
例如,假设有一个名为“employees”的表,我们想向其中添加一个名为“full_name”的生成列,以组合员工的名字和姓氏。我们可以使用以下命令查看表的定义:
DESCRIBE employees;
步骤2:将表更改为InnoDB存储引擎
如果表使用MyISAM存储引擎,必须将其更改为InnoDB存储引擎,因为MyISAM不支持生成列。可以使用以下命令将表更改为InnoDB存储引擎:
ALTER TABLE table_name ENGINE=InnoDB;
例如,假设“employees”表使用MyISAM存储引擎,我们可以使用以下命令将其更改为InnoDB存储引擎:
ALTER TABLE employees ENGINE=InnoDB;
注意:使用此命令更改存储引擎会使用旧格式的数据文件,并可能需要一些时间来完成。
步骤3:添加生成列
现在我们准备向表中添加生成列。可以使用以下命令添加生成列:
ALTER TABLE table_name
ADD generated_column_name AS (generated_column_expression);
其中,generated_column_name是生成列的名称,generated_column_expression是计算生成列值的表达式。
例如,对于我们的“employees”表,我们可以使用以下命令添加名为“full_name”的生成列:
ALTER TABLE employees
ADD full_name AS (CONCAT(first_name, ' ', last_name));
在这个例子中,生成列“full_name”的值由函数CONCAT()计算而来,该函数将两个标准列“first_name”和“last_name”连接起来。
步骤4:验证生成列的值
现在我们已经添加了生成列,可以使用以下命令验证生成列的值是否正确:
SELECT * FROM table_name;
例如,要验证“employees”表的生成列“full_name”,可以使用以下命令:
SELECT first_name, last_name, full_name FROM employees;
步骤5:删除生成列
如果需要,可以使用以下命令删除生成列:
ALTER TABLE table_name
DROP generated_column_name;
例如,要删除“employees”表的生成列“full_name”,可以使用以下命令:
ALTER TABLE employees
DROP full_name;
结论
现在您已经知道如何向MySQL表中添加生成列了。请记住,在添加生成列之前,必须将表更改为使用InnoDB存储引擎。如果需要删除生成列,请使用ALTER TABLE命令。