บทนำ
MySQL รองรับ Composite Primary Key (Primary Key หลายคอลัมน์) ซึ่งจะบังคับให้ **ชุดค่า** ของคอลัมน์เหล่านั้นไม่ซ้ำกัน (Unique as a Pair)
รูปแบบการใช้งาน
PRIMARY KEY (yourColumnName1, yourColumnName2);
ตัวอย่างการสร้างตาราง
mysql> CREATE TABLE DemoTable (
-> StudentFirstName VARCHAR(100),
-> StudentLastName VARCHAR(100),
-> StudentAge INT,
-> StudentCountryName VARCHAR(100),
-> PRIMARY KEY(StudentFirstName, StudentLastName)
-> );
Query OK, 0 rows affected (0.74 sec)
ตรวจสอบโครงสร้างตาราง
mysql> DESC DemoTable;
ผลลัพธ์
+--------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+-------+
| StudentFirstName | varchar(100) | NO | PRI | NULL | |
| StudentLastName | varchar(100) | NO | PRI | NULL | |
| StudentAge | int(11) | YES | | NULL | |
| StudentCountryName | varchar(100) | YES | | NULL | |
+--------------------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
คำอธิบาย
- คอลัมน์
StudentFirstNameและStudentLastNameทั้งคู่เป็น Primary Key (Key = PRI) - ค่าของ คู่ (FirstName, LastName) ต้องไม่ซ้ำกัน
- แต่ FirstName เพียงอย่างเดียว หรือ LastName เพียงอย่างเดียว อาจซ้ำได้
- ทั้งสองคอลัมน์ถูกตั้งค่า NOT NULL อัตโนมัติ
ตัวอย่างข้อมูลที่ถูกต้อง/ผิด
| FirstName | LastName | ผลลัพธ์ |
|---|---|---|
| John | Smith | ✅ OK (คู่แรก) |
| John | Doe | ✅ OK (LastName ต่างกัน) |
| Jane | Smith | ✅ OK (FirstName ต่างกัน) |
| John | Smith | ❌ ERROR: Duplicate entry 'John-Smith' for key 'PRIMARY' |
การใช้งานจริง
- ตารางความสัมพันธ์ Many-to-Many (Junction Table)
- ตาราง Log/Event ที่ระบุโดย (EntityId, EventDate)
- ตาราง Configuration ที่ระบุโดย (ConfigKey, Environment)