Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ตรวจสอบว่า Column เป็น Primary Key ใน MySQL

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_DEFAULTDefault 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';