it-swarm-vi.tech

Chọn dữ liệu từ "bảng hiển thị" truy vấn MySQL

Có thể chọn từ show tables trong MySQL?

SELECT * FROM (SHOW TABLES) AS `my_tables`

Một cái gì đó dọc theo các dòng này, mặc dù ở trên không hoạt động (ít nhất là trên 5.0.51a).

52
BioTronic

Tôi nghĩ bạn muốn SELECT * FROM INFORMATION_SCHEMA.TABLES

Xem http://dev.mysql.com/doc/refman/5.0/en/tables-table.html

42
Andrew

Không phải 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 khá linh hoạt, ví dụ:

SHOW tables like '%s%'
20
Lucas Oman

Để đế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;
11
Ivan Ferrer

Bạn có thể gần gũi hơn bạn nghĩ - HIỂN THỊ BẢNG đã cư xử rất giống như 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";
}
4
Bob Stein

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;
4
BigJim

Bạn không thể đặt các câu lệnh SHOW bên trong một truy vấn con như trong ví dụ của bạn. Câu lệnh duy nhất có thể đi trong 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 Information_SCHema trực tiếp bằng SELECT và linh hoạt hơn rất nhiều theo cách đó.

Các câu lệnh SHOW của MySQL chỉ là các truy vấn bên trong các bảng Information_SCHema.

Người dùng @physicalWOR đã đăng bình luận này trên hầu hết các câu trả lời khác:

Đ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. - vật lý

Ngược lại, câu hỏi của OP không không 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, đó 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ể thực hiện với một truy vấn. Mỗi truy vấn phải đặt tên bảng rõ ràng. Bạn không thể đặt tên bảng là một 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 kết quả truy vấn đã cho phải có cùng 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 một truy vấn khác.

4
Bill Karwin

Bạn có thể tạo một thủ tục được lưu trữ và đặt tên bảng vào một con trỏ, sau đó lặp qua tên bảng của bạn để hiển thị dữ liệu.

Bắt đầu với thủ tục được lưu trữ: http://www.mysqltutorial.org/getting-started-with-mysql-stored-procedures.aspx

Tạo một con trỏ: http://www.mysqltutorial.org/mysql-cthon/

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 được lưu trữ:

CALL ShowFromTables();
3
Bridget Arrington
SELECT column_comment FROM information_schema.columns WHERE table_name = 'myTable' AND column_name = 'myColumnName'

Điều này sẽ trả về nhận xét về: myTable.myColumnName

3
Brian

Tôi nghĩ những gì bạn muốn là lượt xem information_schema của MySQL: http://dev.mysql.com/doc/refman/5.0/en/tables-table.html

3
Matt Rogish
SELECT * FROM INFORMATION_SCHEMA.TABLES

Đó nên là một khởi đầu tốt. Để biết thêm, hãy kiểm tra Bảng thông tin_SCHema .

3
Sören Kuklau

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)
2
MT467

Có, CHỌN từ bảng_schema có thể 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 CẬP NHẬT các phần tử. Ví dụ: để tạo truy vấn cho DROP tất cả các bảng có 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_%';
2
Srdjan

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ố.

12.5.5.30. Cú pháp hiển thị BẢNG

1
Derek B. Bell