Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

วิธีเพิ่ม prefix ให้ทุกคอลัมน์ใน MySQL ผ่าน View


แนวคิด

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 ตารางจริง