Cú pháp
CREATE TEMPORARY TABLE ten_bang_tam
SELECT ... FROM bang_nguon ...;
Ví dụ
Tạo bảng nguồn:
CREATE TABLE DemoTable1 (Id INT, Name VARCHAR(100));
INSERT INTO DemoTable1 VALUES
(100, 'John'), (110, 'Chris'), (120, 'Robert'), (130, 'David');
Tạo temporary table từ SELECT:
CREATE TEMPORARY TABLE DemoTable2
SELECT * FROM DemoTable1;
Kiểm tra:
SELECT * FROM DemoTable2;
Kết quả: 4 dòng giống hệt DemoTable1.
| Đặc điểm | Mô tả |
|---|---|
| Phạm vi | Chỉ session tạo ra thấy được (connection-scoped). |
| Tự động xóa | Khi session kết thúc (disconnect) hoặc DROP TEMPORARY TABLE. |
| Trùng tên | Có thể trùng tên bảng thường (bảng thường bị ẩn trong session). |
| Transaction | Không hỗ trợ transaction (DDL tự commit). |
| Replication | Không replicate sang slave (statement-based). |
Các cách tạo khác
-- 1. Tạo rỗng rồi INSERT
CREATE TEMPORARY TABLE tmp (id INT, name VARCHAR(100));
INSERT INTO tmp SELECT * FROM DemoTable1;
-- 2. Chỉ lấy một số cột
CREATE TEMPORARY TABLE tmp AS SELECT Id, Name FROM DemoTable1 WHERE Id > 100;
-- 3. Có index
CREATE TEMPORARY TABLE tmp (PRIMARY KEY(id)) SELECT * FROM DemoTable1;
Ứng dụng
- Chia query phức tạp thành nhiều bước (intermediate results).
- Lưu kết quả trung gian cho nhiều truy vấn tiếp theo.
- ETL, data transformation trong stored procedure.
- Tránh lặp lại subquery phức tạp.
Lưu ý
- Không dùng trong prepared statement (MySQL limitation).
- Memory/Temp table engine: MEMORY (mặc định) hoặc InnoDB/MyISAM tùy cấu hình.
- Kích thước lớn → chuyển sang disk (tmpdir), chậm.