MySQL MySQL中存储的GENERATED COLUMNS和MySQL虚拟的GENERATED COLUMNS有什么不同呢?
MySQL中的GENERATED COLUMNS是指在表中创建的列,这些列的值是通过计算或者其他方法自动生成的,而不是从其他的列或者外部数据源中获取。在MySQL的版本5.7中,通过使用GENERATED COLUMNS来替代触发器和存储过程等方式来实现计算列的功能。
MySQL中的GENERATED COLUMNS有两种类型:存储的GENERATED COLUMNS和虚拟的GENERATED COLUMNS。这两种类型的主要区别在于它们的存储方式和计算方法。下面将分别对这两种类型进行介绍和比较。
阅读更多:MySQL 教程
存储的GENERATED COLUMNS
存储的GENERATED COLUMNS是指该列的值已经计算出来并存储在表中,将其与普通列相比,存储的GENERATED COLUMNS具有如下特点:
- 存储的GENERATED COLUMNS可以使用索引,而虚拟的GENERATED COLUMNS不可以。
- 当存储的GENERATED COLUMNS的定义需要发生变化时,需要在表中重新创建该列,而虚拟的GENERATED COLUMNS则可以通过ALTER TABLE语句的方式来修改定义。
- 存储的GENERATED COLUMNS在插入或更新行时,MySQL会自动计算该列的值,并将值存储在表中。相对地,虚拟的GENERATED COLUMNS不存储在表中,每次查询时都会重新计算。
下面是一个示例,展示存储的GENERATED COLUMNS的定义和使用方法:
CREATE TABLE `student` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
`score1` INT NOT NULL,
`score2` INT NOT NULL,
`total_score` INT NOT NULL GENERATED ALWAYS AS (score1 + score2) STORED,
PRIMARY KEY (`id`)
);
上述代码中,total_score就是一个存储的GENERATED COLUMNS,它的值是通过score1和score2的值相加得到的。
虚拟的GENERATED COLUMNS
虚拟的GENERATED COLUMNS是指该列的值并不实际存在于表中,每次查询时都会重新计算。相对于存储的GENERATED COLUMNS,虚拟的GENERATED COLUMNS具有如下特点:
- 虚拟的GENERATED COLUMNS不存储在表中,每次查询时都会重新计算。因此,虚拟的GENERATED COLUMNS可以根据需要动态地计算,比存储的GENERATED COLUMNS更加灵活。
- 虚拟的GENERATED COLUMNS不能直接使用索引,需要通过其他方式来进行优化。
下面是一个示例,展示虚拟的GENERATED COLUMNS的定义和使用方法:
CREATE TABLE `student` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
`score1` INT NOT NULL,
`score2` INT NOT NULL,
`total_score` INT NOT NULL GENERATED ALWAYS AS (score1 + score2),
PRIMARY KEY (`id`)
);
上述代码中,total_score就是一个虚拟的GENERATED COLUMNS,它的值是通过score1和score2的值相加得到的。
总结
本篇文章主要介绍了MySQL中的GENERATED COLUMNS,在MySQL的版本5.7中,通过使用GENERATED COLUMNS来替代触发器和存储过程等方式来实现计算列的功能。其中,MySQL中的GENERATED COLUMNS分为存储的GENERATED COLUMNS和虚拟的GENERATED COLUMNS两种类型,主要的区别在于它们的存储方式和计算方法。存储的GENERATED COLUMNS的值已经计算出来并存储在表中,而虚拟的GENERATED COLUMNS的值并不实际存储在表中,每次查询时都会重新计算。根据实际需求和使用情况,可以选择存储的GENERATED COLUMNS或虚拟的GENERATED COLUMNS。