การเตรียมข้อมูล
mysql> CREATE TABLE DemoTable1859 (Id INT);
mysql> INSERT INTO DemoTable1859 VALUES(101), (102);
สร้าง Procedure Rename Table
mysql> DELIMITER //
mysql> CREATE PROCEDURE alter_table_name_sp()
BEGIN
ALTER TABLE DemoTable1859 RENAME exampleTable;
END //
mysql> DELIMITER ;
เรียกใช้และตรวจสอบ
mysql> CALL alter_table_name_sp();
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT * FROM exampleTable;
+------+
| Id |
+------+
| 101 |
| 102 |
+------+
ไวยากรณ์ RENAME TABLE
-- วิธี 1: ALTER TABLE (ใน Procedure ได้)
ALTER TABLE old_name RENAME new_name;
-- วิธี 2: RENAME TABLE (Standalone, หลายตารางพร้อมกันได้)
RENAME TABLE old1 TO new1, old2 TO new2;
สิ่งที่เกิดขึ้นเมื่อ RENAME
- ข้อมูล Index, Trigger, Constraint ย้ายไปด้วย
- View/Stored Procedure ที่อ้างอิงตารางเก่า → จะ Broken (ต้องแก้เอง)
- Foreign Key จากตารางอื่น → อาจ Error (ขึ้นกับ Engine)
- Lock: Metadata Lock ระหว่างดำเนินการ
ข้อจำกัดใน Stored Procedure
- ไม่สามารถใช้
RENAME TABLE statement ตรงๆ ใน Procedure ได้ (Syntax Error)
- ต้องใช้
ALTER TABLE ... RENAME แทน
- Dynamic SQL (PREPARE/EXECUTE) ถ้าต้องการ Rename แบบ Dynamic
Dynamic Rename Example
CREATE PROCEDURE rename_table_dynamic(IN old_name VARCHAR(64), IN new_name VARCHAR(64))
BEGIN
SET @sql = CONCAT('ALTER TABLE `', old_name, '` RENAME `', new_name, '`');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END //