MySQL 什么是GENERATED COLUMN?如何在创建表时使用它?

MySQL 什么是GENERATED COLUMN?如何在创建表时使用它?

生成列(generated columns)是一种特性,可用于 CREATE TABLE 或 ALTER TABLE 语句中,是一种无需通过 SQL 的 INSERT 或 UPDATE 子句发送数据而存储它的方式。此特性已在 MySQL 5.7 中添加。生成列仅在表域内起作用。其语法如下:

阅读更多:MySQL 教程

语法

column_name data_type [GENERATED ALWAYS] AS (expression)
[VIRTUAL | STORED] [UNIQUE [KEY]]

在这里,首先指定列名及其数据类型。

  • 然后添加 GENERATED ALWAYS 子句,指示该列为生成列。
  • 接下来,通过使用相应的选项(VIRTUAL 或 STORED)指示生成列的类型。如果没有明确指定生成列的类型,默认情况下,MySQL 将使用 VIRTUAL。

然后,在 AS 关键字之后在括号中指定表达式。该表达式可以包含文字、没有参数的内置函数、运算符或对同一表中的任何列的引用。如果使用函数,它必须是标量和确定的。

最后,如果生成列是存储的,可以为其定义唯一约束。

示例

在此示例中,我们创建了一个名为 employee_data 的表,其中包含员工的详细信息以及以下生成列 –

mysql> Create table employee_data(ID INT AUTO_INCREMENT PRIMARY KEY, First_name VARCHAR(50) NOT NULL, Last_name VARCHAR(50) NOT NULL, FULL_NAME VARCHAR(90) GENERATED ALWAYS AS(CONCAT(First_name,' ',Last_name)));
Query OK, 0 rows affected (0.55 sec)

mysql> DESCRIBE employee_data;
+------------+-------------+------+-----+---------+-------------------+
| Field      | Type        | Null | Key | Default | Extra             |
+------------+-------------+------+-----+---------+-------------------+
| ID         | int(11)     | NO   | PRI | NULL    | auto_increment    |
| First_name | varchar(50) | NO   |     | NULL    |                   |
| Last_name  | varchar(50) | NO   |     | NULL    |                   |
| FULL_NAME  | varchar(90) | YES  |     | NULL    | VIRTUAL GENERATED |
+------------+-------------+------+-----+---------+-------------------+
4 rows in set (0.00 sec)

mysql> INSERT INTO employee_data(first_name, Last_name) values('Yashpal','Sharma');
Query OK, 1 rows affected (0.09 sec)

mysql> INSERT INTO employee_data(first_name, Last_name) values('Krishan','Kumar');
Query OK, 1 rows affected (0.09 sec)

mysql> INSERT INTO employee_data(first_name, Last_name) values('Rakesh','Arora');
Query OK, 1 rows affected (0.08 sec)

mysql> Select * from employee_data;
+----+------------+-----------+----------------+
| ID | First_name | Last_name | FULL_NAME      |
+----+------------+-----------+----------------+
| 1  | Yashpal    | Sharma    | Yashpal Sharma |
| 2  | Krishan    | Kumar     | Krishan Kumar  |
| 3  | Rakesh     | Arora     | Rakesh Arora   |
+----+------------+-----------+----------------+
3 rows in set (0.00 sec)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程