Làm cách nào để lấy tên của tất cả các cột cho tất cả các bảng trong MySQL?


189

Có một cách nhanh chóng để có được tất cả các tên cột từ tất cả các bảng MySQL, mà không phải liệt kê tất cả các bảng?


2
Tôi chỉ cần một cái nhìn tổng quan nhanh chóng về cơ sở dữ liệu. Nó sẽ không phải là mã trong một ứng dụng.
ăn kiêng

Câu trả lời:


304
select * from information_schema.columns
where table_schema = 'your_db'
order by table_name,ordinal_position

đó là những gì tôi đang tìm kiếm :-) Đã viết một ứng dụng java làm điều tương tự bây giờ
ăn kiêng

Cảm ơn! Để chỉ nhận các tên cột, hãy sử dụng tên này: chọn cột_name từ information_schema.columns trong đó table_schema = 'your_db' theo thứ tự tên_bảng, ordinal_poseition
Phil Goetz

Chính xác những gì tôi đang tìm kiếm ! Cảm ơn.
zookastos

Làm thế nào để có được số lượng dữ liệu điền trước tên cột? Tôi có cùng một vấn đề cộng với số liệu dữ liệu
Gulmuhammad Akbari

Làm thế nào về việc biết khóa chính?
David Walser

48

Để liệt kê tất cả các trường từ một bảng trong MySQL:

select * 
  from information_schema.columns 
 where table_schema = 'your_DB_name' 
   and table_name = 'Your_tablename'

27

tốt hơn là bạn sử dụng truy vấn sau đây để có được tất cả các tên cột dễ dàng

Show columns from tablename


Đôi khi bạn cần một giải pháp không dựa vào information_schema
Bradley M. Davis

26
SELECT * FROM information_schema.columns
WHERE table_schema = DATABASE()
ORDER BY table_name, ordinal_position

Vì tôi không có đủ đại diện để bình luận, đây là một cải tiến nhỏ (theo quan điểm của tôi) về câu trả lời tuyệt vời của nick rulez: thay thế WHERE table_schema = 'your_db'bằng WHERE table_schema = DATABASE().


Điều đó hữu ích. Nó luôn làm tôi khó chịu khi mã hóa những thứ như thế khi có thể tránh được. Cảm ơn.
David

17

Với ý nghĩa là nó hữu ích cho bất kỳ ai khác, điều này sẽ cung cấp cho bạn một danh sách các cột được phân cách bằng dấu phẩy trong mỗi bảng:

SELECT table_name,GROUP_CONCAT(column_name ORDER BY ordinal_position)
FROM information_schema.columns
WHERE table_schema = DATABASE()
GROUP BY table_name
ORDER BY table_name

Lưu ý: Khi sử dụng các bảng có số lượng cột cao và / hoặc có tên trường dài, hãy lưu ý giới hạn group_concat_max_len , điều này có thể khiến dữ liệu bị cắt ngắn.


1
Tôi thích cái này ... vì tôi có thể dễ dàng sao chép tất cả các tên cột.
jatazoulja

6
<?php
        $table = 'orders';
        $query = "SHOW COLUMNS FROM $table";
        if($output = mysql_query($query)):
            $columns = array();
            while($result = mysql_fetch_assoc($output)):
                $columns[] = $result['Field'];
            endwhile;
        endif;
        echo '<pre>';
        print_r($columns);
        echo '</pre>';
?>

1
Bất cứ ai đọc điều này trong năm 2016 - mysql_query đã trở nên phản đối. Tốt nhất để sử dụng mysqli của PHP trong tương lai.
JCocking8


4

Câu hỏi là:

Có cách nào nhanh chóng để có được tất cả các tên CỘT từ tất cả các bảng trong MySQL mà không phải liệt kê tất cả các bảng không?

SQL để có được tất cả thông tin cho mỗi cột

select * from information_schema.columns
where table_schema = 'your_db'
order by table_name,ordinal_position

SQL để có được tất cả các tên màu

select COLUMN_NAME from information_schema.columns
where table_schema = 'your_db'
order by table_name,ordinal_position

3

Tôi đã viết điều ngớ ngẩn này một thời gian dài trước đây và vẫn thực sự sử dụng nó bây giờ và sau đó:

https://gist.github.com/kphretiq/e2f924416a326895233d

Về cơ bản, nó thực hiện một "BẢNG BIỂN", sau đó là "MÔ TẢ" trên mỗi bảng, sau đó nhổ nó ra như đánh dấu.

Chỉ cần chỉnh sửa bên dưới "nếu tên " và đi. Bạn sẽ cần phải cài đặt pymysql.


3

Cõng trên câu trả lời của Nicola với một số php có thể đọc được

$a = mysqli_query($conn,"select * from information_schema.columns
where table_schema = 'your_db'
order by table_name,ordinal_position");
$b = mysqli_fetch_all($a,MYSQLI_ASSOC);
$d = array();
foreach($b as $c){
    if(!is_array($d[$c['TABLE_NAME']])){
        $d[$c['TABLE_NAME']] = array();
    }
    $d[$c['TABLE_NAME']][] = $c['COLUMN_NAME'];
}
echo "<pre>",print_r($d),"</pre>";

1
'một số php có thể đọc được' .. Đặt tên biến với a, b, c không phải là thứ tôi có thể đọc được
Kaymaz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.