PHƯƠNG PHÁP 1: bảng tạm thời
Những câu trả lời đã được đăng về việc sử dụng một bảng tạm thời thường sẽ là giải pháp thích hợp nhất. Nhưng có một điểm quan trọng là nếu truy vấn chạy như, tất cả các phép nối vv sẽ được xử lý, có khả năng mất nhiều thời gian trong một số trường hợp. May mắn thay, MySQL cho phép LIMIT 0
trả về không có hàng và các trạng thái documentation rằng điều này "nhanh chóng trả về một tập rỗng". Các thủ tục lưu trữ sau đây sẽ làm công việc này cho bạn bằng cách tham gia một chuỗi truy vấn SQL như là đầu vào, gói nó với LIMIT 0
, chạy truy vấn năng động để tạo ra một bảng tạm thời và sau đó hiển thị các cột của nó:
CREATE PROCEDURE showColumns(IN sqlToShow TEXT)
BEGIN
DROP TEMPORARY TABLE IF EXISTS tempTable;
SET @sqlLimit0 = CONCAT('CREATE TEMPORARY TABLE tempTable AS (SELECT * FROM (',
sqlToShow, ') subq LIMIT 0)');
PREPARE stmt FROM @sqlLimit0;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SHOW COLUMNS FROM tempTable;
END;
Một điểm quan trọng là truy vấn được truyền vào không nên có dấu chấm phẩy ở cuối. (Nếu cần thiết, các thủ tục lưu trữ có thể được sửa đổi để loại bỏ trailing dấu chấm phẩy nhưng tôi muốn giữ nó đơn giản.)
Đây là một bản demo trực tiếp hiển thị nó trong hành động: http://rextester.com/NVWY58430
PHƯƠNG PHÁP 2: INFORMATION_SCHEMA.COLUMNS
Các thông tin tương tự được trả về bởi SHOW COLUMNS
cũng có thể được lấy trực tiếp từ các INFORMATION_SCHEMA.COLUMNS
bảng:
SELECT TABLE_NAME AS `Table`,
COLUMN_NAME AS `Field`,
COLUMN_TYPE AS `Type`,
IS_NULLABLE AS `Null`,
COLUMN_KEY AS `Key`,
COLUMN_DEFAULT AS `Default`,
EXTRA AS `Extra`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA` = SCHEMA() -- This uses the current schema
AND `TABLE_NAME` IN ('table1', 'table2', 'etc.');
-- ...or could go even further and restrict to particular columns in tables if desired
Các đau khổ trên từ những nhược điểm của yêu cầu bảng (và cột tùy chọn) tên được nhập bằng tay và không hiển thị tên bí danh trong số SELECT
nhưng nó thực hiện công việc cơ bản. Ưu điểm của nó là nó không yêu cầu người dùng có quyền tạo bảng tạm thời và thông tin được trả lại có thể được mở rộng để cung cấp thêm thông tin cột như độ dài ký tự tối đa, độ chính xác/tỷ lệ, cột nhận xét, v.v.
Bạn chỉ muốn truy xuất các cột được liên kết với một bảng và thông tin tương ứng của chúng? –
CÓ nhưng từ Truy vấn động, không phải từ TABLE –
Có các API để tìm nạp siêu dữ liệu về tập hợp kết quả. Bạn sử dụng môi trường ngôn ngữ lập trình nào? Nên có giải pháp cho hầu hết các ngôn ngữ, nhưng để cung cấp một ví dụ tôi cần biết bạn sử dụng ngôn ngữ nào. –