基本上生成的列是一項(xiàng)可在 CREATE TABLE 或 ALTER TABLE 語(yǔ)句中使用的功能,并且是一種存儲(chǔ)數(shù)據(jù)的方式,而無(wú)需通過(guò) SQL 中的 INSERT 或 UPDATE 子句實(shí)際發(fā)送數(shù)據(jù)。 MySQL 5.7 中添加了此功能。生成的列在表域內(nèi)工作。其語(yǔ)法如下 –
語(yǔ)法
column_name data_type [GENERATED ALWAYS] AS (expression) [VIRTUAL | STORED] [UNIQUE [KEY]]
登錄后復(fù)制
這里,首先指定列名及其數(shù)據(jù)類型。
- 然后添加 GENERATED ALWAYS 子句以指示該列是生成的列。然后,使用相應(yīng)的選項(xiàng)指示生成列的類型 – VIRTUAL 或 STORED。默認(rèn)情況下,如果您沒(méi)有顯式指定生成列的類型,MySQL 將使用 VIRTUAL。
之后,在 AS 關(guān)鍵字后面的大括號(hào)內(nèi)指定表達(dá)式。表達(dá)式可以包含文字、不帶參數(shù)的內(nèi)置函數(shù)、運(yùn)算符或?qū)ν槐碇腥魏瘟械囊谩H绻褂煤瘮?shù),則它必須是標(biāo)量和確定性的。
最后,如果存儲(chǔ)生成的列,則可以為其定義唯一約束。
示例
在此示例中,我們創(chuàng)建一個(gè)名為employee_data 的表,其中包含員工的詳細(xì)信息以及生成的列,如下所示 –
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)
登錄后復(fù)制
以上就是什么是 MySQL GENERATED COLUMN 以及如何在創(chuàng)建表時(shí)使用它?的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注www.92cms.cn其它相關(guān)文章!