MySQL MySQL中存储的GENERATED COLUMNS和MySQL虚拟的GENERATED COLUMNS有什么不同呢?

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具有如下特点:

  1. 存储的GENERATED COLUMNS可以使用索引,而虚拟的GENERATED COLUMNS不可以。
  2. 当存储的GENERATED COLUMNS的定义需要发生变化时,需要在表中重新创建该列,而虚拟的GENERATED COLUMNS则可以通过ALTER TABLE语句的方式来修改定义。
  3. 存储的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具有如下特点:

  1. 虚拟的GENERATED COLUMNS不存储在表中,每次查询时都会重新计算。因此,虚拟的GENERATED COLUMNS可以根据需要动态地计算,比存储的GENERATED COLUMNS更加灵活。
  2. 虚拟的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。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程