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

ใช้ PRIMARY KEY แบบคู่ (Composite Key) ใน MySQL

บทนำ

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 อัตโนมัติ

ตัวอย่างข้อมูลที่ถูกต้อง/ผิด

FirstNameLastNameผลลัพธ์
JohnSmith✅ OK (คู่แรก)
JohnDoe✅ OK (LastName ต่างกัน)
JaneSmith✅ OK (FirstName ต่างกัน)
JohnSmith❌ ERROR: Duplicate entry 'John-Smith' for key 'PRIMARY'

การใช้งานจริง

  • ตารางความสัมพันธ์ Many-to-Many (Junction Table)
  • ตาราง Log/Event ที่ระบุโดย (EntityId, EventDate)
  • ตาราง Configuration ที่ระบุโดย (ConfigKey, Environment)