MySQL 虚拟生成列如何与数学表达式一起使用?

什么是MySQL虚拟生成列?

在MySQL中,虚拟生成列(Virtual Generated Columns)是一种在表中定义的计算列。 虚拟生成列不存储实际的数据,而是使用提供的公式根据表中的其他列计算它们的值。 在查询中访问虚拟生成列就像访问实际的表列一样。

虚拟生成列的实际值是在查询时由MySQL动态计算的。因此,即使您更改了用于计算虚拟生成列的公式,也不需要显式更新虚拟生成列的值。

MySQL虚拟生成列的数学表达式

MySQL虚拟生成列可以与数学表达式一起使用,这样可以让我们轻松地将一些简单的算术操作应用于已有的表列。下面我们来看一个简单的例子:

CREATE TABLE temperature_data (

id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

temperature DECIMAL(4,2) NOT NULL

);

INSERT INTO temperature_data (temperature) VALUES (23.2), (24.5), (22.1), (25.3);

在上面的例子中,我们创建了一个名为temperature_data的表,其中包含一个名为temperature的列。 该列的数据类型为DECIMAL(4、2),这表示它将包含4位数,其中小数部分有2位。

现在,如果我们想要将这些温度按照华氏度进行排序,可以使用以下公式将摄氏度转换为华氏度:

华氏度 = 摄氏度 x 1.8 + 32

我们可以通过将这个公式应用到虚拟生成列上,来实现按照华氏度排序。 在MySQL中,我们定义虚拟生成列的方式如下:

ALTER TABLE temperature_data ADD COLUMN fahrenheit DECIMAL(4,2) GENERATED ALWAYS AS (temperature * 1.8 + 32) STORED;

在上面的代码中,我们使用ALTER TABLE语句向现有的temperature_data表中添加了一个名为fahrenheit的虚拟生成列。 该列的数据类型仍然是DECIMAL(4,2),用于存储转换后的华氏度温度。 我们定义了一个公式来计算华氏度,然后使用GENERATED ALWAYS选项告诉MySQL要在每个查询中动态计算虚拟生成列的值。 最后,我们使用STORED选项告诉MySQL要将计算所得的值保存到dashboard表中,而不是在每次查询中动态计算它们。

使用虚拟生成列进行条件筛选

在MySQL中,虚拟生成列也可以用作条件筛选,这使您可以在查询中过滤行,而无需在表中首先定义新的列。知道上一段已经将温度转成了华氏温度,如果我们现在想从这个表中获取所有低于80华氏度的记录,可以使用以下查询语句:

SELECT id, temperature, fahrenheit

FROM temperature_data

WHERE fahrenheit < 80;

在上面的代码中,我们仅检索id,temperature和fahrenheit列的值,其中fahrenheit列使用虚拟生成列。 然后用WHERE子句指定了必须满足的筛选条件:fahrenheit必须低于80。 我们没有在表中定义新列,而是在查询中使用了虚拟生成列。

结论

MySQL虚拟生成列是一种强大的功能,它允许我们根据其他列的值动态计算值,甚至可以应用数学计算。使用虚拟生成列可以让我们更快,更简便地进行数据处理和查询筛选。 此外,虚拟生成列的值是在每个查询中动态计算的,这意味着我们不必担心要手动更新虚拟生成列的值。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

数据库标签