Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

MySQL GENERATED COLUMN이란 무엇이며 테이블을 생성하는 동안 어떻게 사용합니까?


기본적으로 생성된 열은 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)