แนวคิด
MySQL ไม่มีคำสั่งโดยตรงสำหรับ rename หลายคอลัมน์พร้อมกัน แต่สามารถสร้าง View ที่ตั้งชื่อคอลัมน์ใหม่พร้อม prefix ได้
ตัวอย่าง: เพิ่ม prefix "emp_" ให้ทุกคอลัมน์
1. สร้างตารางต้นฉบับ
mysql> create table employees
-> (
-> id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> name varchar(50),
-> email varchar(100),
-> department varchar(50)
-> );
2. สร้าง View พร้อม prefix
mysql> CREATE OR REPLACE VIEW v_employees_prefixed AS
-> SELECT
-> id AS emp_id,
-> name AS emp_name,
-> email AS emp_email,
-> department AS emp_department
-> FROM employees;
3. ใช้งาน View แทนตารางจริง
mysql> SELECT * FROM v_employees_prefixed;
+--------+----------+---------------------+------------------+ | emp_id | emp_name | emp_email | emp_department | +--------+----------+---------------------+------------------+ | 1 | John | john@example.com | IT | | 2 | Jane | jane@example.com | HR | +--------+----------+---------------------+------------------+
วิธีอัตโนมัติ (Dynamic SQL)
สำหรับตารางที่มีคอลัมน์เยอะ สร้าง stored procedure สร้าง view อัตโนมัติจาก INFORMATION_SCHEMA.COLUMNS
DELIMITER //
CREATE PROCEDURE CreatePrefixedView(IN tbl_name VARCHAR(64), IN prefix VARCHAR(20))
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE col_name VARCHAR(64);
DECLARE cols TEXT DEFAULT '';
DECLARE cur CURSOR FOR
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = tbl_name;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO col_name;
IF done THEN LEAVE read_loop; END IF;
SET cols = CONCAT(cols, IF(cols='','',','), col_name, ' AS ', prefix, col_name);
END LOOP;
CLOSE cur;
SET @sql = CONCAT('CREATE OR REPLACE VIEW ', prefix, tbl_name, ' AS SELECT ', cols, ' FROM ', tbl_name);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END//
DELIMITER ;
เรียกใช้: CALL CreatePrefixedView('employees', 'emp_');
ข้อควรระวัง: View นี้เป็น read-only หากต้อง update ต้อง update ตารางจริง