2012-09-11 25 views
14

¿Cómo puedo encontrar qué columna es la clave principal de una tabla mediante una consulta?Pregunta SQL para encontrar la clave principal de una tabla?

+1

Qué base de datos está utilizando? –

+0

@ JoãoSilva - oráculo, servidor sql, mysql. –

+1

Definitivamente debe proporcionar más detalles en caso de tener más preguntas, y usar etiquetas apropiadas para agregar contexto a la pregunta. En esta pregunta, por ejemplo, la respuesta puede ser muy diferente, dependiendo de la base de datos específica que esté utilizando. –

Respuesta

10

Para Oracle, puede buscarlo en el ALL_CONSTRAINTS tabla:

SELECT a.COLUMN_NAME 
FROM all_cons_columns a INNER JOIN all_constraints c 
    ON a.constraint_name = c.constraint_name 
WHERE c.table_name = 'TBL' 
    AND c.constraint_type = 'P'; 

DEMO.

Para SQL Server, ya fue respondida here, y para MySQL, marque @ajon's answer.

15

Este es un duplicado question:

crédito para Lukmdo para esta respuesta:

Podría no se aconseja, pero funciona muy bien:

show index from TABLE where Key_name = 'PRIMARY' ; 

La forma sólida es utilizar INFORMATION_SCHEMA:

SELECT k.COLUMN_NAME 
FROM information_schema.table_constraints t 
LEFT JOIN information_schema.key_column_usage k 
USING(constraint_name,table_schema,table_name) 
WHERE t.constraint_type='PRIMARY KEY' 
    AND t.table_schema=DATABASE() 
    AND t.table_name='owalog'; 
+0

¿Por qué asumes que es MySQL? –

+0

Es cierto que esto se aplica al menos a MySQL – ajon

5

Intentar esta consulta en el servidor SQL:

SELECT  X.NAME AS INDEXNAME, 
      COL_NAME(IC.OBJECT_ID,IC.COLUMN_ID) AS COLUMNNAME 
FROM  SYS.INDEXES X 
INNER JOIN SYS.INDEX_COLUMNS IC 
     ON X.OBJECT_ID = IC.OBJECT_ID 
     AND X.INDEX_ID = IC.INDEX_ID 
WHERE  X.IS_PRIMARY_KEY = 1 
    AND  OBJECT_NAME(IC.OBJECT_ID)='YOUR_TABLE' 
2

La consulta siguiente da la lista de todas las claves principales en la base de datos dada.

SELECT DISTINCT TABLE_NAME ,column_name 
    FROM INFORMATION_SCHEMA.key_column_usage 
    WHERE TABLE_SCHEMA IN ('*your_db_name*'); 
+0

No es estrictamente cierto, devolverá todas las claves únicas, no solo las primarias –

6

Para MySQL:

SELECT GROUP_CONCAT(COLUMN_NAME), TABLE_NAME 
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
WHERE 
    TABLE_SCHEMA = '**database name**' 
    AND CONSTRAINT_NAME='PRIMARY' 
GROUP BY TABLE_NAME; 

Advertencia una clave principal con dos columnas habrán ellos separados por coma (,)

Cuestiones relacionadas