2012-05-06 26 views
8

En SQLite que se puede ejecutar la siguiente consulta para obtener una lista de columnas en una tabla:consulta SQLite para encontrar las claves principales

PRAGMA table_info(myTable) 

Esto me da las columnas pero no hay información acerca de lo que pueden ser las claves primarias. Además, se puede ejecutar las siguientes dos consultas para la búsqueda de índices y claves externas:

PRAGMA index_list(myTable) 
PRAGMA foreign_key_list(myTable) 

Pero me parece que no puede encontrar la manera de ver las claves primarias. ¿Alguien sabe cómo puedo hacer esto?

Nota: también sé que puedo hacer:

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

Y va a dar a la sentencia de creación del cuadro que muestra las claves primarias. Pero estoy buscando una forma de hacerlo sin analizar la declaración de creación.

Respuesta

8

El table_info le proporciona una columna llamada pk (la última) que indica si se trata de una clave principal (si es el índice de la clave) o no (cero).

para aclarar, de la documentación:

La columna "PK" en el conjunto de resultados es cero para las columnas que no son parte de la clave primaria, y es el índice de la columna en la primaria clave para las columnas que forman parte de la clave principal.

+0

Ahhhhhh mierda, había hecho una suposición que no debería haber hecho en la base de datos que estaba usando. ¡Gracias por señalar esto! – Kyle

+0

Sin embargo, no le proporciona el orden de columnas de las claves primarias compuestas. 'CREATE TABLE ReversePK ( un int NOT NULL, b int NOT NULL, PRIMARY KEY (b, a) )' –

+3

La columna pk en el table_info no es un booleano, el valor que se da la orden de las columnas. –

Cuestiones relacionadas