2012-05-06 17 views
8

In SQLite posso eseguire la seguente query per ottenere un elenco di colonne di una tabella:interrogazione SQLite per trovare le chiavi primarie

PRAGMA table_info(myTable) 

questo mi dà le colonne, ma nessuna informazione su quali possano essere le chiavi primarie. Inoltre, posso eseguire i seguenti due query per la ricerca di indici e chiavi esterne:

PRAGMA index_list(myTable) 
PRAGMA foreign_key_list(myTable) 

Ma io non riesco a capire come visualizzare le chiavi primarie. Qualcuno sa come posso fare questo?

Nota: so anche che posso fare:

select * from sqlite_master where type = 'table' and name ='myTable'; 

e vi darà la CREATE TABLE che mostra le chiavi primarie. Ma sto cercando un modo per farlo senza analizzare la dichiarazione di creazione.

risposta

8

Il table_info DEVE fornire una colonna denominata pk (l'ultima) che indica se è una chiave primaria (in tal caso l'indice di essa nella chiave) oppure no (zero).

Per chiarire, dalla documentazione:

La colonna "pk" nel set di risultati è zero per le colonne che non sono parte della chiave primaria, ed è l'indice della colonna nel primario chiave per le colonne che fanno parte della chiave primaria.

+0

Ahhhhhh merda, avevo fatto un'ipotesi che non avrei dovuto fare sul database che stavo usando. Grazie per aver segnalato questo! – Kyle

+0

Tuttavia, non fornisce l'ordine delle colonne delle chiavi primarie composte. 'CREATE TABLE ReversePK ( un int NOT NULL, b int NOT NULL, PRIMARY KEY (b, a) )' –

+3

La colonna pk nel table_info non è un valore booleano, il valore che si dà l'ordine delle colonne. –

Problemi correlati