Có thể chọn từ show tables
trong MySQL không?Chọn dữ liệu từ truy vấn MySQL "bảng hiển thị"
SELECT * FROM (SHOW TABLES) AS `my_tables`
Điều gì đó dọc theo những dòng này, mặc dù ở trên không hoạt động (trên 5.0.51a, ít nhất).
Có thể chọn từ show tables
trong MySQL không?Chọn dữ liệu từ truy vấn MySQL "bảng hiển thị"
SELECT * FROM (SHOW TABLES) AS `my_tables`
Điều gì đó dọc theo những dòng này, mặc dù ở trên không hoạt động (trên 5.0.51a, ít nhất).
Bạn đã xem xét truy vấn INFORMATION_SCHEMA.Tables chưa? Như trong
SELECT ic.Table_Name,
ic.Column_Name,
ic.data_Type,
IFNULL(Character_Maximum_Length,'') AS `Max`,
ic.Numeric_precision as `Precision`,
ic.numeric_scale as Scale,
ic.Character_Maximum_Length as VarCharSize,
ic.is_nullable as Nulls,
ic.ordinal_position as OrdinalPos,
ic.column_default as ColDefault,
ku.ordinal_position as PK,
kcu.constraint_name,
kcu.ordinal_position,
tc.constraint_type
FROM INFORMATION_SCHEMA.COLUMNS ic
left outer join INFORMATION_SCHEMA.key_column_usage ku
on ku.table_name = ic.table_name
and ku.column_name = ic.column_name
left outer join information_schema.key_column_usage kcu
on kcu.column_name = ic.column_name
and kcu.table_name = ic.table_name
left outer join information_schema.table_constraints tc
on kcu.constraint_name = tc.constraint_name
order by ic.table_name, ic.ordinal_position;
Tôi nghĩ rằng bạn muốn SELECT * FROM INFORMATION_SCHEMA.TABLES
Xem http://dev.mysql.com/doc/refman/5.0/en/tables-table.html
Điều này cung cấp cho bạn (meta) thông tin về các bảng, không phải nội dung của bảng, như OP dự định. – physicalattraction
Điều này cung cấp cho các tên bảng trường hợp thấp hơn trên Windows, trong khi 'SHOW TABLES' cung cấp cho vỏ như được chỉ định. – AndreKR
Tôi nghĩ rằng những gì bạn muốn là nhìn MySQL của information_schema (s): http://dev.mysql.com/doc/refman/5.0/en/tables-table.html
Điều này cung cấp cho bạn (meta) thông tin về các bảng, không phải nội dung của bảng, như OP dự định. – physicalattraction
SELECT * FROM INFORMATION_SCHEMA.TABLES
Đó phải là một khởi đầu tốt. Để biết thêm, hãy kiểm tra INFORMATION_SCHEMA Tables.
Điều này cung cấp cho bạn (meta) thông tin về các bảng, không phải nội dung của bảng, như OP dự định. – physicalattraction
Tôi không hiểu tại sao bạn muốn sử dụng SELECT * FROM
như một phần của tuyên bố.
OP muốn trích xuất dữ liệu từ các Bảng được trả về bởi BẢNG HIỂN THỊ, không có thông tin về Bản thân Bảng. – physicalattraction
Không mà tôi biết, trừ khi bạn chọn từ INFORMATION_SCHEMA
, như những người khác đã đề cập.
Tuy nhiên, lệnh SHOW
là khá linh hoạt, Ví dụ:
SHOW tables like '%s%'
Điều này cung cấp cho bạn (meta) thông tin về các bảng, không phải nội dung của bảng, như OP dự định. – physicalattraction
SELECT column_comment FROM information_schema.columns WHERE table_name = 'myTable' AND column_name = 'myColumnName'
này sẽ trở lại bình luận trên: myTable.myColumnName
Điều này cung cấp cho bạn (meta) thông tin về các bảng, không phải nội dung của bảng, như OP dự định. – physicalattraction
Vâng, SELECT từ table_schema có thể sẽ rất hữu ích cho quản trị hệ thống. Nếu bạn có nhiều máy chủ, cơ sở dữ liệu, bảng ... đôi khi bạn cần DROP hoặc UPDATE bó các phần tử. Ví dụ để tạo truy vấn cho thả tất cả các bảng với tên tiền tố "wp_old _...":
SELECT concat('DROP TABLE ', table_name, ';') FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = '*name_of_your_database*'
AND table_name LIKE 'wp_old_%';
Điều này cung cấp cho bạn (meta) thông tin về các bảng, không phải nội dung của bảng, như OP dự định. – physicalattraction
trong MySql 5.1 bạn có thể thử
show tables like 'user%';
đầu ra:
mysql> show tables like 'user%';
+----------------------------+
| Tables_in_test (user%) |
+----------------------------+
| user |
| user_password |
+----------------------------+
2 rows in set (0.00 sec)
Điều này cung cấp cho bạn (meta) thông tin về các bảng, không phải nội dung của bảng, như OP dự định. – physicalattraction
Bạn không thể đặt các câu lệnh SHOW
bên trong truy vấn phụ như trong ví dụ của mình. Câu lệnh duy nhất có thể truy vấn con là SELECT
.
Như các câu trả lời khác đã nêu, bạn có thể truy vấn trực tiếp INFORMATION_SCHEMA với SELECT
và linh hoạt hơn theo cách đó.
Các câu lệnh SHOW
của MySQL chỉ là các truy vấn đối với các bảng INFORMATION_SCHEMA.
tài @physicalattraction đã đăng nhận xét này trên hầu hết các câu trả lời khác:
này cung cấp cho bạn (meta) thông tin về các bảng, không phải là nội dung của bảng, như OP dự định. - vật lý liên quan
Ngược lại, câu hỏi của OP là không phải nói rằng họ muốn chọn dữ liệu trong tất cả các bảng. Họ nói rằng họ muốn chọn từ kết quả của SHOW TABLES
, mà chỉ là một danh sách các tên bảng.
Nếu OP không muốn chọn tất cả dữ liệu từ tất cả các bảng, thì câu trả lời là không, bạn không thể làm điều đó với một truy vấn. Mỗi truy vấn phải đặt tên bảng của nó một cách rõ ràng. Bạn không thể tạo tên bảng là biến hoặc kết quả của một phần khác của cùng một truy vấn. Ngoài ra, tất cả các hàng của một kết quả truy vấn nhất định phải có cùng các cột.
Vì vậy, cách duy nhất để chọn tất cả dữ liệu từ tất cả các bảng sẽ là chạy SHOW TABLES
và sau đó cho mỗi bảng có tên trong kết quả đó, hãy chạy truy vấn khác.
Bạn có thể gần hơn bạn nghĩ — HIỂN THỊ BẢNG đã cư xử rất giống CHỌN:
$pdo = new PDO("mysql:host=$host;dbname=$dbname",$user,$pass);
foreach ($pdo->query("SHOW TABLES") as $row) {
print "Table $row[Tables_in_$dbname]\n";
}
Để đếm:
SELECT COUNT(*) as total FROM (SELECT TABLE_NAME as tab, TABLES.* FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY tab) tables;
Để liệt kê:
SELECT TABLE_NAME as table, TABLES.* FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY table;
Chào mừng bạn đến với StackOverflow! Ở đây, chúng tôi sử dụng tiếng Anh làm ngôn ngữ chính của chúng tôi. Hãy đảm bảo rằng bài đăng của bạn bằng tiếng Anh. –
Bạn có thể tạo một thủ tục lưu sẵn và đặt tên bảng trong một con trỏ, sau đó lặp qua các tên bảng của bạn để hiển thị dữ liệu.
Bắt đầu với thủ tục lưu trữ: http://www.mysqltutorial.org/getting-started-with-mysql-stored-procedures.aspx
Tạo con trỏ: http://www.mysqltutorial.org/mysql-cursor/
Ví dụ,
CREATE PROCEDURE `ShowFromTables`()
BEGIN
DECLARE v_finished INTEGER DEFAULT 0;
DECLARE c_table varchar(100) DEFAULT "";
DECLARE table_cursor CURSOR FOR
SELECT table_name FROM information_schema.tables WHERE table_name like 'wp_1%';
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET v_finished = 1;
OPEN table_cursor;
get_data: LOOP
FETCH table_cursor INTO c_table;
IF v_finished = 1 THEN
LEAVE get_data;
END IF;
SET @s=CONCAT("SELECT * FROM ",c_table,";");
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP get_data;
CLOSE table_cursor;
END
Sau đó gọi thủ tục lưu trữ:
CALL ShowFromTables();
g này ives bạn (meta) thông tin về các bảng, không phải là nội dung của bảng, như OP dự định. – physicalattraction