คอลัมน์ที่สร้างขึ้นโดยทั่วไปเป็นคุณลักษณะที่สามารถใช้ในคำสั่ง CREATE TABLE หรือ ALTER TABLE และเป็นวิธีจัดเก็บข้อมูลโดยไม่ต้องส่งข้อมูลผ่าน INSERT หรือ UPDATE clause ใน SQL คุณลักษณะนี้ได้รับการเพิ่มใน 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)