2012-09-11 37 views
14

Làm cách nào để tìm cột nào là khóa chính của bảng bằng cách sử dụng truy vấn?Truy vấn SQL để tìm khóa chính của bảng?

+1

Những cơ sở dữ liệu bạn đang sử dụng? –

+0

@ JoãoSilva - oracle, máy chủ sql, mysql. –

+1

Bạn chắc chắn nên cung cấp thêm chi tiết trong trường hợp có thêm câu hỏi và sử dụng các thẻ thích hợp để thêm một số ngữ cảnh cho câu hỏi. Trong câu hỏi này, ví dụ, câu trả lời có thể rất khác nhau, tùy thuộc vào cơ sở dữ liệu cụ thể mà bạn đang sử dụng. –

Trả lời

10

Đối với Oracle, bạn có thể tra cứu nó trong ALL_CONSTRAINTS bảng:

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.

Đối với SQL Server, nó đã được trả lời here và để kiểm tra MySQL @ajon's answer.

15

Đây là một bản sao question:

tín dụng để Lukmdo cho câu trả lời này:

Nó có thể không được khuyến cáo nhưng chỉ hoạt động tốt:

show index from TABLE where Key_name = 'PRIMARY' ; 

Cách rắn là sử dụng 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

Tại sao bạn cho rằng đó là MySQL? –

+0

Đúng, điều này áp dụng ít nhất cho MySQL – ajon

5

Hãy thử truy vấn này trong SQL server:

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

Các truy vấn sau đây cung cấp cho các danh sách tất cả các từ khóa chính trong cơ sở dữ liệu nhất định.

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

Không hoàn toàn đúng, nó sẽ trả về tất cả các khóa duy nhất, không chỉ các –

6

Đối với 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; 

Cảnh báo một khóa chính với hai cột sẽ phải họ tách ra bởi tình trạng hôn mê (,)

Các vấn đề liên quan