Come mostrare i nomi delle colonne di una tabella?


17

Il caso è semplice: hai un database MySQL in cui hai solo un'interfaccia di query SQL e vuoi conoscere la struttura del database con le query. Puoi elencare le tabelle con il show tables;comando, ma come vedi i nomi delle singole colonne?

(l' SELECTistruzione mostra Empty setse non sono presenti dati e NON può essere utilizzato in questo modo.)


Si noti che la soluzione accettata è quella inferiore relativa al desccomando. Curioso, è il più breve, ma ha meno voti. Anche per me è il migliore.
mico,

2
hai chiesto una semplice query SQL. La tua risposta non è SQL, quindi ciò potrebbe spiegare il basso numero di voti. Probabilmente dovresti cambiare il titolo della tua query in: "Come mostrare i nomi delle colonne di una tabella"
Lennart

Buona idea, ora la mia risposta si adatta meglio alla domanda.
mico,

Risposte:


36
select column_name from information_schema.columns where table_name='table'

2
Nel frattempo ho scoperto anche questa query utile: show create table <table_name>dove invece di <table_name> metti il ​​nome della tabella in testo semplice. Questo dà anche i tipi mentre il tuo si adatta molto bene a uno scopo di quotazione.
mico

Come detto da @mico: "show create table tbl_name \ G" potrebbe essere la tua soluzione. Vedi dev.mysql.com/doc/refman/5.7/en/show-create-table.html La parte "\ G" è qui solo per formattare l'output. Saluti.
martedì

6

La migliore soluzione che ho scoperto da solo era il desc table_namecomando. Maggiori informazioni sono disponibili su Elenco tabelle MySQL . Questo comando fornisce la descrizione di una tabella di database, che è esattamente quello che stavo cercando di scoprire.


6

Per assicurarsi di elencare le colonne in una tabella nel database corrente, utilizzare la funzione DATABASE () o SCHEMA () . Restituisce NULL se non ci si trova in un database corrente. Questa query mostrerà le colonne in una tabella nell'ordine in cui sono state definite le colonne:

SELECT column_name,column_type
FROM information_schema.columns
WHERE table_schema = DATABASE()
AND table_name='table'
ORDER BY ordinal_position;


3

come vedi i titoli delle singole tabelle?

Intendi i commenti sulla tabella ?

use stack;
create table t(v integer primary key) comment 'My Special Table';

show tables;
+-----------------+
| Tables_in_stack |
+-----------------+
| t               |
+-----------------+

select table_name, table_comment from information_schema.tables where table_name='t';
+------------+------------------+
| table_name | table_comment    |
+------------+------------------+
| t          | My Special Table |
+------------+------------------+

Volevo quei nomi di colonna e ho già un paio di modi grazie alle risposte veloci. Grazie anche a questo commento, Jack.
mico,

1
Ti dispiace riformulare un po 'la tua domanda per chiarire che sono le colonne che stai cercando?
Jack Douglas,

2
SHOW COLUMNS FROM mydb.mytable;

dove mydb - è il database che contiene la tabella necessaria

mytable - è la tabella necessaria

Restituisce informazioni sulle colonne (ad esempio nomi di colonne, tipo, ecc.)


1
Piccoli frammenti di codice senza spiegazione di come risolvono il problema del PO sono scoraggiati. Prova ad aggiungere maggiori dettagli alla tua risposta.
Erik,

0

Devi unirti information_schema.tablese information_schema.columnsinsieme per ottenere l'elenco delle tabelle e i dettagli delle loro colonne.

information_schema.columnsmostra non solo i dettagli sulle tabelle ma anche le viste. Non è possibile filtrare solo i dettagli della tabella da questa vista del sistema.

Quindi devi unirti.

Quesito di esempio:

select t.TABLE_SCHEMA, t.TABLE_NAME, c.COLUMN_NAME, c.COLUMN_TYPE, c.DATA_TYPE
from information_schema.tables t , information_schema.columns c where 2=2 
and t.table_schema=c.table_schema
and t.table_name=c.table_name
and t.table_type ='BASE TABLE' 
order by t.table_schema, t.table_name, c.column_name 
;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.