Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Tạo bảng tạm (temporary table) từ kết quả SELECT trong MySQL

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ểmMô tả
Phạm viChỉ session tạo ra thấy được (connection-scoped).
Tự động xóaKhi session kết thúc (disconnect) hoặc DROP TEMPORARY TABLE.
Trùng tênCó thể trùng tên bảng thường (bảng thường bị ẩn trong session).
TransactionKhông hỗ trợ transaction (DDL tự commit).
ReplicationKhô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.