Các cột được tạo về cơ bản là một tính năng có thể được sử dụng trong các câu lệnh CREATE TABLE hoặc ALTER TABLE và là một cách lưu trữ dữ liệu mà không thực sự gửi nó thông qua mệnh đề INSERT hoặc UPDATE trong SQL. Tính năng này đã được thêm vào MySQL 5.7. Một cột được tạo hoạt động trong miền bảng. Cú pháp của nó sẽ như sau -
Cú pháp
column_name data_type [GENERATED ALWAYS] AS (expression) [VIRTUAL | STORED] [UNIQUE [KEY]]
Ở đây, trước hết, hãy chỉ định tên cột và kiểu dữ liệu của nó.
- Sau đó, thêm mệnh đề LUÔN ĐƯỢC PHÁT SINH để chỉ ra rằng cột đó là cột đã tạo.
- Sau đó, cho biết loại cột được tạo bằng cách sử dụng tùy chọn tương ứng - VIRTUAL hay STORED. Theo mặc định, MySQL sử dụng VIRTUAL nếu bạn không chỉ định rõ ràng loại cột được tạo.
Sau đó, chỉ định biểu thức trong dấu ngoặc nhọn sau từ khóa AS. Biểu thức có thể chứa các ký tự, các hàm dựng sẵn không có tham số, toán tử hoặc tham chiếu đến bất kỳ cột nào trong cùng một bảng. Nếu bạn sử dụng một hàm, nó phải vô hướng và xác định.
Cuối cùng, nếu cột đã tạo được lưu trữ, bạn có thể xác định một ràng buộc duy nhất cho nó.
Ví dụ
Trong ví dụ này, chúng tôi đang tạo một bảng có tên là worker_data có thông tin chi tiết về nhân viên cùng với một cột được 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)