Query ตรวจสอบ Primary Key จาก Information Schema
mysql> SELECT
COLUMN_NAME,
CASE WHEN COLUMN_KEY = 'PRI'
THEN 'This is a Primary key Column'
ELSE 'This is not a Primary key Column'
END AS Output
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'DemoTable1886'
ORDER BY TABLE_NAME, ORDINAL_POSITION;
ตัวอย่างตาราง
mysql> CREATE TABLE DemoTable1886 (
Id INT NOT NULL,
FirstName VARCHAR(20),
LastName VARCHAR(20),
Age INT,
DateOfBirth DATETIME,
Education VARCHAR(40),
PRIMARY KEY(Id)
);
ผลลัพธ์
+-------------+--------------------------------+
| COLUMN_NAME | Output |
+-------------+--------------------------------+
| Id | This is a Primary key Column |
| FirstName | This is not a Primary key Column |
| LastName | This is not a Primary key Column |
| Age | This is not a Primary key Column |
| DateOfBirth | This is not a Primary key Column |
| Education | This is not a Primary key Column |
+-------------+--------------------------------+
คอลัมน์สำคัญใน INFORMATION_SCHEMA.COLUMNS
| คอลัมน์ | คำอธิบาย |
| COLUMN_NAME | ชื่อคอลัมน์ |
| COLUMN_KEY | 'PRI'=Primary Key, 'UNI'=Unique, 'MUL'=Index (Non-Unique), ''=No Index |
| DATA_TYPE | ชนิดข้อมูล |
| IS_NULLABLE | 'YES' หรือ 'NO' |
| COLUMN_DEFAULT | Default Value |
| EXTRA | 'auto_increment' ฯลฯ |
| ORDINAL_POSITION | ลำดับคอลัมน์ |
Query อื่นๆ ที่มีประโยชน์
-- ดู Primary Key Columns ทั้งหมดใน Database
SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND COLUMN_KEY = 'PRI'
ORDER BY TABLE_NAME, ORDINAL_POSITION;
-- ดู Index ทั้งหมดของตาราง
SHOW INDEX FROM DemoTable1886;
-- หรือ
SELECT * FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'DemoTable1886';
การใช้งานใน Application
-- Dynamic SQL สร้าง Query ตาม PK
SELECT CONCAT('SELECT ', GROUP_CONCAT(COLUMN_NAME), ' FROM ', TABLE_NAME)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'mytable'
AND COLUMN_KEY = 'PRI';