Як отримати імена всіх стовпців для всіх таблиць у MySQL?


189

Чи є швидкий спосіб отримати всі назви стовпців з усіх таблиць MySQL, не перераховуючи всі таблиці?


2
Мені потрібен лише швидкий огляд бази даних. Це не буде кодом у додатку.
dieter

Відповіді:


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

це те, що я шукав :-) Написав java-додаток, роблячи ті самі речі дотепер
dieter

Дякую! Щоб отримати лише назви стовпців, скористайтеся цим: виберіть ім'я стовпця з інформаційних стовпців information_schema.columns, де table_schema = 'your_db' упорядкуйте таблицю_name, ordinal_position
Phil Goetz

Саме те, що я шукав! Дякую.
зоокастос

Як щодо отримання кількості заповнених даних перед іменами стовпців? У мене така ж проблема плюс кількість даних
Гулмухаммад Акбарі

як щодо знання первинного ключа?
Девід Уолсер

48

Щоб перерахувати всі поля з таблиці в MySQL:

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

27

краще використовувати наступний запит, щоб легко отримати всі назви стовпців

Show columns from tablename


Іноді потрібно рішення, яке не покладається на information_schema
Bradley M. Davis,

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

Оскільки мені не вистачає респондентів для коментарів, ось незначне поліпшення (на мій погляд) щодо чудової відповіді Ніка Рулеца: заміни WHERE table_schema = 'your_db'на WHERE table_schema = DATABASE().


Це корисно. Мене завжди дратує жорстке кодування таких речей, коли цього можна уникнути. Дякую.
Девід

17

З огляду на те, що це корисно будь-кому іншому, це надасть вам список колон у кожній таблиці:

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

Примітка. Використовуючи таблиці з великою кількістю стовпців та / або з довгими іменами полів, пам’ятайте про обмеження group_concat_max_len , яке може спричинити скорочення даних.


1
Мені подобається цей ... оскільки я міг легко скопіювати всі назви стовпців.
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
Усі, хто читав це у 2016 році - mysql_query застарів. Найкраще використовувати mysqli PHP, що йде вперед.
JCutting8


4

Питання:

Чи існує швидкий спосіб отримати всі НАЗВИНИ КОЛІН з усіх таблиць в MySQL, не перераховуючи всі таблиці?

SQL, щоб отримати всю інформацію для кожного стовпця

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

SQL, щоб отримати всі ІМЕНІ СТОЛІННЯ

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

3

Я писав цю нерозумну річ давно і досі фактично використовую її час від часу:

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

В основному, це "SHOW TABLES", потім "DESCRIBE" на кожній таблиці, а потім виписує її як розмітку.

Просто відредагуйте нижче "якщо ім'я " та перейдіть. Вам потрібно буде встановити pymysql.


3

Пігбік на відповідь Ніколи з читаним php

$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
'деякий читабельний php' .. Названня змінних за допомогою a, b, c - це не те, що я б назвав читабельним
Каймаз
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.