Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Cột GENERATED COLUMN trong MySQL là gì và cách sử dụng khi tạo bảng?

Về cơ bản, cột tạo (generated columns) là một tính năng có thể sử dụng trong câu lệnh CREATE TABLE hoặc ALTER TABLE, cho phép lưu trữ dữ liệu mà không cần gửi qua mệnh đề INSERT hoặc UPDATE trong SQL. Tính năng này được thêm vào từ MySQL 5.7. Cột tạo hoạt động trong phạm vi bảng. Cú pháp như sau:

Cú pháp

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

Ở đây, trước tiên hãy chỉ định tên cột và kiểu dữ liệu của nó.

  • Sau đó thêm mệnh đề GENERATED ALWAYS để chỉ ra rằng cột này là cột tạo.
  • Tiếp theo, chỉ định loại cột tạo bằng tùy chọn tương ứng: VIRTUAL hoặc STORED. Mặc định MySQL sử dụng VIRTUAL nếu bạn không chỉ định rõ loại.

Sau đó, chỉ định biểu thức trong ngoặc đơn sau từ khóa AS. Biểu thức có thể chứa chữ số, hàm tích hợp sẵn không tham số, toán tử, hoặc tham chiếu đến bất kỳ cột nào trong cùng bảng. Nếu sử dụng hàm, nó phải là hàm vô hướng (scalar) và xác định (deterministic).

Cuối cùng, nếu cột tạo là loại STORED, bạn có thể định nghĩa ràng buộc duy nhất (unique constraint) cho nó.

Ví dụ

Trong ví dụ này, chúng ta tạo bảng employee_data chứa thông tin nhân viên cùng với một cột tạo như sau:

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)