Giới thiệu
Lệnh RENAME TABLE trong MySQL cho phép đổi tên bảng nhanh chóng, giữ nguyên cấu trúc, dữ liệu, index, khóa ngoại, trigger, v.v.
Cú pháp
RENAME TABLE old_table_name TO new_table_name;
Có thể đổi nhiều bảng cùng lúc:
RENAME TABLE t1 TO t2, t3 TO t4;
Ví dụ minh họa
Tạo bảng DemoTable1
mysql> CREATE TABLE DemoTable1 (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
UserName VARCHAR(100),
UserAge INT,
UserCountryName VARCHAR(100)
);
Xem cấu trúc
mysql> DESC DemoTable1;
+-----------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------------+--------------+------+-----+---------+----------------+ | Id | int(11) | NO | PRI | NULL | auto_increment | | UserName | varchar(100) | YES | | NULL | | | UserAge | int(11) | YES | | NULL | | | UserCountryName | varchar(100) | YES | | NULL | | +-----------------+--------------+------+-----+---------+----------------+
Đổi tên thành DemoTable2
mysql> RENAME TABLE DemoTable1 TO DemoTable2;
Query OK, 0 rows affected (1.22 sec)
Kiểm tra cấu trúc bảng mới
mysql> DESC DemoTable2;
Cấu trúc y hệt DemoTable1.
Lưu ý quan trọng
- Khóa bảng: RENAME TABLE khóa bảng trong quá trình thực hiện. Không thể truy cập bảng lúc đó.
- Khóa ngoại: Nếu bảng bị tham chiếu bởi FK từ bảng khác, RENAME sẽ thất bại (trừ khi dùng
SET FOREIGN_KEY_CHECKS=0- không khuyến khích). - View/Trigger/Procedure: Các object tham chiếu tên bảng cũ sẽ BỊ VỠ (invalid). Cần cập nhật thủ công.
- Quyền (Privileges): Quyền cấp trên bảng cũ **KHÔNG** tự chuyển sang bảng mới. Cần GRANT lại.
- Transaction: RENAME TABLE không thể rollback (implicit commit).
Thay thế: ALTER TABLE RENAME
ALTER TABLE DemoTable1 RENAME TO DemoTable2;
Tương đương nhưng chỉ đổi 1 bảng mỗi câu lệnh.