Tôi đã vật lộn khá lâu với cú pháp thích hợp cho CHỌN TẠM THỜI BẢNG TẠM THỜI. Sau khi tìm ra một vài điều, tôi muốn chia sẻ câu trả lời với những người còn lại trong cộng đồng.
Thông tin cơ bản về câu lệnh có sẵn tại các liên kết MySQL sau:
CHỌN TẠO BẢNG và TẠO BẢNG .
Đôi khi, việc giải thích thông số kỹ thuật có thể gây khó khăn. Vì hầu hết mọi người học tốt nhất từ các ví dụ, tôi sẽ chia sẻ cách tôi đã tạo một câu lệnh hoạt động và cách bạn có thể sửa đổi nó để phù hợp với bạn.
-
Thêm nhiều chỉ mục
Câu lệnh này chỉ ra cách thêm nhiều chỉ mục (lưu ý rằng tên chỉ mục - trong trường hợp viết thường - là tùy chọn):
CREATE TEMPORARY TABLE core.my_tmp_table (INDEX my_index_name (tag, time), UNIQUE my_unique_index_name (order_number)) SELECT * FROM core.my_big_table WHERE my_val = 1
-
Thêm khóa chính mới :
CREATE TEMPORARY TABLE core.my_tmp_table (PRIMARY KEY my_pkey (order_number), INDEX cmpd_key (user_id, time)) SELECT * FROM core.my_big_table
-
Tạo cột bổ sung
Bạn có thể tạo một bảng mới với nhiều cột hơn số cột được chỉ định trong câu lệnh SELECT. Chỉ định cột bổ sung trong định nghĩa bảng. Các cột được chỉ định trong định nghĩa bảng và không được tìm thấy trong lựa chọn sẽ là cột đầu tiên trong bảng mới, tiếp theo là các cột được chèn bởi câu lệnh SELECT.
CREATE TEMPORARY TABLE core.my_tmp_table (my_new_id BIGINT NOT NULL AUTO_INCREMENT, PRIMARY KEY my_pkey (my_new_id), INDEX my_unique_index_name (invoice_number)) SELECT * FROM core.my_big_table
-
Xác định lại kiểu dữ liệu cho các cột từ SELECT
Bạn có thể xác định lại kiểu dữ liệu của một cột đang được CHỌN. Trong ví dụ bên dưới, thẻ cột là MEDIUMINT trong core.my_big_table và tôi đang định nghĩa lại nó thành BIGINT trong core.my_tmp_table.
CREATE TEMPORARY TABLE core.my_tmp_table (tag BIGINT, my_time DATETIME, INDEX my_unique_index_name (tag) ) SELECT * FROM core.my_big_table
-
Định nghĩa trường nâng cao trong khi tạo
Tất cả các định nghĩa cột thông thường đều có sẵn như khi bạn tạo một bảng bình thường. Ví dụ:
CREATE TEMPORARY TABLE core.my_tmp_table (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, value BIGINT UNSIGNED NOT NULL DEFAULT 0 UNIQUE, location VARCHAR(20) DEFAULT "NEEDS TO BE SET", country CHAR(2) DEFAULT "XX" COMMENT "Two-letter country code", INDEX my_index_name (location)) ENGINE=MyISAM SELECT * FROM core.my_big_table