Primary Key คืออะไร? ทำไมถึงสำคัญ?
หลังจากที่เราได้เรียนรู้เรื่องชนิดข้อมูล (Data Types) ใน MySQL กันไปแล้ว ในบทนี้เราจะมาทำความรู้จักกับ Primary Key ซึ่งเป็นส่วนประกอบสำคัญในการออกแบบฐานข้อมูลที่มีประสิทธิภาพและถูกต้อง
Primary Key คือ คอลัมน์ (Column) หรือกลุ่มของคอลัมน์ ในตารางที่ใช้สำหรับ ระบุแต่ละแถว (Row) ในตารางนั้นๆ อย่างไม่ซ้ำกัน พูดง่ายๆ คือ Primary Key ทำหน้าที่เป็นเหมือนเลขประจำตัวประชาชนของแต่ละแถวในตาราง ทำให้เราสามารถอ้างอิงและจัดการข้อมูลแต่ละแถวได้อย่างถูกต้องแม่นยำ
ทำไมต้องมี Primary Key?
การมี Primary Key ช่วยให้เรา:
- ระบุแถวข้อมูลได้อย่างแม่นยำ: ทำให้เราสามารถดึงข้อมูล, แก้ไขข้อมูล, หรือลบข้อมูลเฉพาะแถวที่เราต้องการได้อย่างถูกต้อง
- ป้องกันข้อมูลซ้ำซ้อน: Primary Key บังคับให้ค่าในคอลัมน์นั้นๆ ต้องไม่ซ้ำกัน ทำให้มั่นใจได้ว่าไม่มีข้อมูลที่เหมือนกันทุกประการในตาราง
- สร้างความสัมพันธ์ระหว่างตาราง: Primary Key ถูกใช้เป็นตัวเชื่อมโยง (Link) ระหว่างตารางต่างๆ ในฐานข้อมูล ทำให้เราสามารถดึงข้อมูลจากหลายตารางมาเชื่อมโยงกันได้ (ซึ่งเราจะเรียนรู้เรื่องนี้ในบท Foreign Key ต่อไป)
- เพิ่มประสิทธิภาพในการค้นหาข้อมูล: MySQL สามารถใช้ Primary Key ในการสร้าง Index ซึ่งช่วยให้การค้นหาข้อมูลในตารางทำได้รวดเร็วขึ้น
คุณสมบัติของ Primary Key
Primary Key มีคุณสมบัติหลักๆ 2 ประการ:
- Unique Identifier (ไม่ซ้ำกัน): ค่าในคอลัมน์ที่เป็น Primary Key จะต้องไม่ซ้ำกันในทุกแถวของตาราง
- NOT NULL (ต้องมีค่า): คอลัมน์ที่เป็น Primary Key จะต้องมีค่าในทุกแถว จะเว้นว่าง (NULL) ไม่ได้
วิธีการกำหนด Primary Key
เราสามารถกำหนด Primary Key ได้ตอนสร้างตาราง (CREATE TABLE) หรือแก้ไขตารางที่มีอยู่แล้ว (ALTER TABLE)
1. กำหนด Primary Key ตอนสร้างตาราง (CREATE TABLE)
เราสามารถกำหนด Primary Key ได้โดยใช้ Keyword PRIMARY KEY ในคำสั่ง CREATE TABLE
CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name VARCHAR(255),
price DECIMAL(10, 2)
);
ในตัวอย่างนี้ เรากำหนดให้คอลัมน์ product_id เป็น Primary Key ของตาราง products นั่นหมายความว่าค่าในคอลัมน์ product_id จะต้องไม่ซ้ำกันและห้ามเป็นค่าว่าง
การกำหนด Primary Key หลายคอลัมน์ (Composite Primary Key): ในบางกรณี เราอาจจำเป็นต้องใช้หลายคอลัมน์ร่วมกันเพื่อระบุแต่ละแถวในตารางอย่างไม่ซ้ำกัน เราเรียก Primary Key ที่ประกอบด้วยหลายคอลัมน์ว่า "Composite Primary Key" ตัวอย่าง:
CREATE TABLE order_items (
order_id INT,
product_id INT,
quantity INT,
PRIMARY KEY (order_id, product_id)
);
ในตัวอย่างนี้ เรากำหนดให้คอลัมน์ order_id และ product_id ร่วมกันเป็น Primary Key ของตาราง order_items นั่นหมายความว่าค่าของ order_id และ product_id ที่ประกอบกันจะต้องไม่ซ้ำกัน
2. กำหนด Primary Key หลังจากสร้างตารางแล้ว (ALTER TABLE)
หากเราต้องการกำหนด Primary Key ให้กับตารางที่มีอยู่แล้ว เราสามารถใช้คำสั่ง ALTER TABLE ร่วมกับ ADD PRIMARY KEY
ALTER TABLE products
ADD PRIMARY KEY (product_id);
คำสั่งนี้จะเพิ่ม Primary Key ให้กับคอลัมน์ product_id ในตาราง products
AUTO_INCREMENT: การกำหนดค่า Primary Key อัตโนมัติ
ในหลายกรณี เราต้องการให้ MySQL กำหนดค่า Primary Key ให้เราโดยอัตโนมัติ เพื่อความสะดวกและป้องกันข้อผิดพลาดจากการกำหนดค่าซ้ำ เราสามารถใช้คุณสมบัติ AUTO_INCREMENT ร่วมกับ Primary Key ได้
AUTO_INCREMENT เป็นคุณสมบัติที่ทำให้ MySQL เพิ่มค่าของคอลัมน์นั้นๆ โดยอัตโนมัติเมื่อมีการเพิ่มแถวใหม่ลงในตาราง โดยค่าเริ่มต้นมักจะเริ่มจาก 1 และเพิ่มขึ้นทีละ 1
ข้อควรระวัง: AUTO_INCREMENT มักจะใช้กับคอลัมน์ที่มีชนิดข้อมูลเป็นตัวเลข (เช่น INT)
CREATE TABLE customers (
customer_id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(255),
last_name VARCHAR(255),
email VARCHAR(255)
);
ในตัวอย่างนี้ เรากำหนดให้คอลัมน์ customer_id เป็น Primary Key และใช้คุณสมบัติ AUTO_INCREMENT นั่นหมายความว่าเมื่อเราเพิ่มลูกค้าใหม่ลงในตาราง customers MySQL จะกำหนดค่า customer_id ให้โดยอัตโนมัติ
INSERT INTO customers (first_name, last_name, email)
VALUES ('John', 'Doe', '[email protected]');
INSERT INTO customers (first_name, last_name, email)
VALUES ('Jane', 'Smith', '[email protected]');
หลังจากรันคำสั่ง INSERT ทั้งสอง ค่าในคอลัมน์ customer_id จะเป็น 1 และ 2 ตามลำดับ โดยที่เราไม่ต้องกำหนดค่าเอง
ตัวอย่างการใช้งาน Primary Key
ลองพิจารณาตาราง employees ที่เก็บข้อมูลพนักงาน:
CREATE TABLE employees (
employee_id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(255),
last_name VARCHAR(255),
email VARCHAR(255),
phone_number VARCHAR(20),
hire_date DATE,
job_id INT,
salary DECIMAL(10, 2),
department_id INT
);
ในตารางนี้ เรากำหนดให้ employee_id เป็น Primary Key และใช้ AUTO_INCREMENT เพื่อให้ MySQL กำหนดค่า ID ให้กับพนักงานแต่ละคนโดยอัตโนมัติ ทำให้เราสามารถระบุพนักงานแต่ละคนได้อย่างแม่นยำและไม่ซ้ำกัน
เมื่อเราต้องการดึงข้อมูลของพนักงานชื่อ John Doe เราสามารถใช้ employee_id ในการระบุแถวที่เราต้องการ:
SELECT *
FROM employees
WHERE employee_id = 1; -- สมมติว่า John Doe มี employee_id เป็น 1
คำสั่งนี้จะดึงข้อมูลทั้งหมดของพนักงานที่มี employee_id เท่ากับ 1
สรุป
Primary Key เป็นส่วนประกอบสำคัญในการออกแบบฐานข้อมูลที่มีประสิทธิภาพ ช่วยให้เราสามารถระบุแต่ละแถวในตารางได้อย่างแม่นยำ ป้องกันข้อมูลซ้ำซ้อน และสร้างความสัมพันธ์ระหว่างตารางต่างๆ ได้ การทำความเข้าใจและใช้งาน Primary Key อย่างถูกต้องจะช่วยให้เราสร้างฐานข้อมูลที่แข็งแกร่งและเชื่อถือได้
ในบทถัดไป เราจะมาเรียนรู้เรื่อง Foreign Key ซึ่งเป็น Constraint ที่ใช้สร้างความสัมพันธ์ระหว่างตารางต่างๆ โดยอ้างอิงจาก Primary Key ของตารางอื่น