2012-05-06 11 views
8

En SQLite je peux exécuter la requête suivante pour obtenir une liste des colonnes dans un tableau:requête SQLite pour trouver les clés primaires

PRAGMA table_info(myTable) 

Cela me donne les colonnes, mais aucune information sur ce que les clés primaires peuvent être. De plus, je peux exécuter les deux requêtes pour trouver des index et des clés étrangères suivantes:

PRAGMA index_list(myTable) 
PRAGMA foreign_key_list(myTable) 

Mais je ne peux pas à comprendre comment afficher les clés primaires. Est-ce que quelqu'un sait comment je peux y arriver?

Note: Je sais aussi que je peux faire:

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

Et il donnera la l'instruction create table qui montre les clés primaires. Mais je cherche un moyen de le faire sans analyser l'instruction create.

Répondre

8

Le table_info DOES vous donne une colonne nommée pk (la dernière) indiquant s'il s'agit d'une clé primaire (si c'est le cas dans la clé) ou non (zéro).

Pour clarifier les choses, de la documentation:

La colonne « pk » dans le jeu de résultats est égal à zéro pour les colonnes qui ne sont pas partie de la clé primaire, et est l'indice de la colonne dans le primaire clé pour les colonnes faisant partie de la clé primaire.

+0

Ahhhhhh merde, j'avais fait une supposition que je n'aurais pas dû faire sur la base de données que j'utilisais. Merci de l'avoir signalé! – Kyle

+0

Toutefois, il ne vous donne pas l'ordre des colonnes des clés primaires composées. CREATE TABLE ReversePK ( un int NOT NULL, b int NOT NULL, clé primaire (b, a) ) ' –

+3

La colonne pk dans le table_info n'est pas un booléen, la valeur que vous donne l'ordre des colonnes. –

Questions connexes