2012-05-06 25 views
8

W SQLite mogę uruchomić następujące zapytanie aby uzyskać listę kolumn w tabeli:SQLite kwerendy do znalezienia kluczy podstawowych

PRAGMA table_info(myTable) 

To daje mi kolumny, ale nie ma informacji o tym, co może być kluczem podstawowym. Dodatkowo mogę uruchomić dwa następujące zapytania do znajdowania indeksów i kluczy obcych:

PRAGMA index_list(myTable) 
PRAGMA foreign_key_list(myTable) 

Ale nie mogę wydawać się, aby dowiedzieć się, jak wyświetlić klucze podstawowe. Czy ktoś wie, jak mogę to zrobić?

Uwaga: wiem też, że mogę zrobić:

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

A to daje instrukcji CREATE TABLE, który pokazuje klucze podstawowe. Ale szukam sposobu, aby to zrobić bez analizowania instrukcji create.

Odpowiedz

8

DOES daje kolumnę o nazwie pk (ostatnia) wskazującą, czy jest to klucz podstawowy (jeśli tak jest w indeksie w kluczu) czy nie (zero).

celu wyjaśnienia, z dokumentacji:

z „pk” kolumna w tabeli wynikowej jest zerem dla kolumn, które nie są częścią klucza podstawowego, i jest indeksem kolumny w głównym Klucz dla kolumn będących częścią klucza podstawowego.

+0

bzdura, założyłem, że nie powinienem był bazować na bazie danych, z której korzystałem. Dzięki za wskazanie tego! – Kyle

+0

Nie podaje ona jednak kolejności kolumn złożonych kluczy podstawowych. 'CREATE TABLE ReversePK ( int NOT NULL, b int NOT NULL, PRIMARY KEY (b, a) )' –

+3

Kolumna pk w table_info nie jest logiczna wartość daje kolejność kolumn. –