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


189

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


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'

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 , которое может привести к усечению данных.


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


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 - это не то, что я бы назвал читаемым
Kaymaz
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.