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

189

Существует ли быстрый способ получения всех имен столбцов из всех таблиц MySQLбез необходимости перечисления всех таблиц?

Dieter
источник
2
Мне нужен только краткий обзор базы данных. Это не будет код в приложении.
Дитер

Ответы:

304
select * from information_schema.columns
where table_schema = 'your_db'
order by table_name,ordinal_position
Никола Коссу
источник
это было то, что я искал :-) Написал Java-приложение, делающее то же самое сейчас
dieter
Спасибо! Чтобы получить только имена столбцов, используйте это: выберите column_name из information_schema.columns, где table_schema = 'your_db', порядок по table_name, ordinal_position
Фил Гетц
Именно то, что я искал! Спасибо.
zookastos
Как насчет того, чтобы получить количество заполненных данных перед именами столбцов? У меня та же проблема плюс подсчет данных
Гульмухаммад Акбари
как насчет знания первичного ключа?
Дэвид Уолзер
48

Чтобы перечислить все поля из таблицы в MySQL:

select * 
  from information_schema.columns 
 where table_schema = 'your_DB_name' 
   and table_name = 'Your_tablename'
suganya
источник
27
SELECT * FROM information_schema.columns
WHERE table_schema = DATABASE()
ORDER BY table_name, ordinal_position

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

Аппель
источник
Это полезно Меня всегда раздражает жесткое кодирование таких вещей, когда этого можно избежать. Спасибо.
Дэвид
27

лучше использовать следующий запрос, чтобы легко получить все имена столбцов

Show columns from tablename

Раджеш Сатпуте
источник
Иногда вам нужно решение, которое не опирается на информационную
Брэдли М. Дэвис,
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 , которое может привести к усечению данных.

trapper_hag
источник
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 устарел. Лучше всего использовать PHP MySQL в будущем.
JCutting8
5

Подобно ответу, опубликованному @suganya, это не дает прямого ответа на вопрос, но является более быстрой альтернативой для одной таблицы:

DESCRIBE column_name;
Филип Киркбрайд
источник
Это напечатает таблицу, а не только имена столбцов таблицы.
k0pernikus
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
J.BizMai
источник
3

Я написал эту глупую вещь давным-давно и до сих пор фактически использую ее:

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

По сути, он выполняет «SHOW TABLES», затем «DESCRIBE» в каждой таблице, а затем выплевывает его в виде уценки.

Просто отредактируйте под "если имя » и вперед. Вам нужно будет установить pymysql.

lysdexia
источник
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 - это не то, что я бы назвал читаемым
Kaymaz