2011-12-07 31 views
9

Về cơ bản tôi muốn lấy tên bảng và tên trường cho mỗi bảng từ cơ sở dữ liệu hiện tại được kết nối, không có gì khác.Nhận lược đồ cơ sở dữ liệu với một truy vấn?

Điều này có khả thi không?

Tôi biết rằng SHOW TABLES FROM my_database được bạn tên bảng, và SHOW COLUMNS FROM my_table sẽ giúp bạn có được các lĩnh vực, nhưng đó là ít nhất [1 x # của bảng] truy vấn và tôi nhận được thêm thông tin mà tôi muốn :)

+0

Có cần phải bằng PHP hay bạn có thể sử dụng [mysql dump] (http://www.howtogeek.com/howto/programming/mysql/dump-just-the-table-structure-to- a-file-in-mysql /)? –

+0

trong php (Tôi đang sử dụng PDO để thực hiện truy vấn) – Alex

Trả lời

15

Bảng INFORMATION_SCHEMA.COLUMNS có những gì bạn đang yêu cầu.

SELECT table_name, column_name 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE table_schema = 'YourDBName' 
    ORDER BY table_name, ordinal_position 
+0

Tôi nhận được thông tin từ tất cả các cơ sở dữ liệu – Alex

+0

@ Alex: Tôi đã thêm một mệnh đề where cho bạn. –

+0

cảm ơn bạn, hoạt động hoàn hảo :) – Alex

4
SELECT * 
FROM information_schema.tables t 
JOIN information_schema.columns c ON t.TABLE_NAME = c.TABLE_NAME 
AND t.TABLE_CATALOG=c.TABLE_CATALOG 
AND t.TABLE_SCHEMA=c.TABLE_SCHEMA 

hoạt động cho SQLSERVER 2005. Các tên cột có thể khác với MySQL (tôi cho rằng đó là những gì bạn đang sử dụng), nhưng khái niệm cũng giống nhau.

+0

SQL Server và MySQL đều sử dụng cấu trúc information_schema tương đối hợp lý với SQL chuẩn, nhưng FWIW MySQL không hỗ trợ danh mục, vì vậy table_catalog luôn là chuỗi chữ '' def ' '. –

1

"Hiển thị cơ sở dữ liệu", "Hiển thị bảng" và "mô tả bảng" là cách tốt nhất, nhanh nhất mà tôi biết trong MySql.

Nhưng chúng MySql cụ thể.

Nếu bạn muốn:

a) một cách cầm tay để truy vấn CSDL của bạn

... AND ... 

b) kiểm soát chặt hơn truy vấn của bạn, sau đó nhìn vào INFORMATION_SCHEMA:

http://dev.mysql.com/doc/refman/5.0/en/information-schema.html

SYNTAX:

SELECT table_name FROM INFORMATION_SCHEMA.TABLES 
    WHERE table_schema = 'db_name' 
    [AND table_name LIKE 'wild'] 
4
SELECT t.name AS tblName, 
SCHEMA_NAME(schema_id) AS [schemaName], 
c.name AS colName 
FROM sys.tables AS t 
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID 
ORDER BY tblName; 
0

Sau một vài thử nghiệm, tôi đã thực hiện mã sql này để xem các cột trong bảng của tôi.

SELECT 
TABLE_NAME as table_name, 
COLUMN_NAME as column_name, 
COLUMN_TYPE as data_type, 
COLUMN_DEFAULT as default_value, 
IS_NULLABLE as nullable, 
COLUMN_KEY as constraints, 
EXTRA as constraints2, 
CHARACTER_SET_NAME as charset, 
COLLATION_NAME as collation 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE table_schema = '<YOUR_DATABASE_NAME>' 
AND TABLE_NAME='<YOUR_TABLE_NAME>' 
ORDER BY table_name, ordinal_position 
Các vấn đề liên quan