什么是 MySQL 生成列,以及如何在创建表时使用它?
基本上,生成列是一个可以在 CREATE TABLE 或 ALTER TABLE 语句中使用的功能,它是一种存储数据的方式,而无需实际通过 SQL 中的 INSERT 或 UPDATE 子句发送数据。此功能已在 MySQL 5.7 中添加。生成列在表域中工作。其语法如下所示:
语法
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 row affected (0.09 sec)
mysql> INSERT INTO employee_data(first_name, Last_name) values('Krishan','Kumar');
Query OK, 1 row affected (0.09 sec)
mysql> INSERT INTO employee_data(first_name, Last_name) values('Rakesh','Arora');
Query OK, 1 row 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)
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP