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

Rename Table ใน MySQL Stored Procedure ด้วย ALTER TABLE RENAME

การเตรียมข้อมูล

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 //