SQL การใช้งาน UNIQUE Constraint

UNIQUE Constraint เป็นข้อจำกัดที่ใช้เพื่อให้มั่นใจว่าค่าที่เก็บอยู่ในคอลัมน์ของฐานข้อมูลจะไม่ซ้ำกัน (unique) ในแต่ละแถว ซึ่งแตกต่างจาก Primary Key ตรงที่สามารถใช้ UNIQUE Constraint กับหลายคอลัมน์ได้ และคอลัมน์ที่มี UNIQUE Constraint สามารถเก็บค่า NULL ได้ (แต่จะเก็บได้แค่ NULL เดียวเท่านั้น)

การใช้งาน UNIQUE Constraint

เราจะสร้างตารางตัวอย่างเพื่อแสดงการประยุกต์ใช้ UNIQUE Constraint ในหลายรูปแบบ ดังนี้

  1. UNIQUE Constraint บนคอลัมน์เดียว
  2. UNIQUE Constraint บนหลายคอลัมน์
  3. การใช้งาน UNIQUE Constraint ร่วมกับ Primary Key

UNIQUE Constraint บนคอลัมน์เดียว

ในตัวอย่างนี้ เราจะสร้างตารางที่เก็บข้อมูลพนักงาน โดยเราต้องการให้ค่าของอีเมลในตารางนี้ไม่ซ้ำกัน

SQL
CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    FirstName VARCHAR(50),
    LastName VARCHAR(50),
    Email VARCHAR(100) UNIQUE
);

คอลัมน์ Email ถูกกำหนด UNIQUE Constraint ซึ่งหมายความว่าทุกค่าของอีเมลในคอลัมน์นี้จะต้องไม่ซ้ำกัน หากมีการพยายามใส่อีเมลที่ซ้ำกัน ระบบจะปฏิเสธและแจ้งข้อผิดพลาด

โครงสร้างของตารางที่ได้จะเป็นดังนี้

แทรกข้อมูลลงในตาราง

SQL
INSERT INTO Employees (EmployeeID, FirstName, LastName, Email)
VALUES (1, 'John', 'Doe', '[email protected]');

INSERT INTO Employees (EmployeeID, FirstName, LastName, Email)
VALUES (2, 'Jane', 'Smith', '[email protected]');

-- ลองแทรกข้อมูลที่ซ้ำกันในคอลัมน์ Email
INSERT INTO Employees (EmployeeID, FirstName, LastName, Email)
VALUES (3, 'Alice', 'Johnson', '[email protected]'); -- จะเกิดข้อผิดพลาดเพราะอีเมลซ้ำ

ผลลัพธ์: เมื่อแทรกข้อมูลพนักงานที่มีอีเมลเดียวกัน ระบบจะแจ้งข้อผิดพลาดเพราะค่าของ Email ซ้ำกัน

UNIQUE Constraint บนหลายคอลัมน์

บางครั้งเราต้องการให้ค่าไม่ซ้ำกันโดยใช้คอลัมน์หลายคอลัมน์ร่วมกัน ในตัวอย่างนี้ เราจะสร้างตารางที่เก็บข้อมูลนักศึกษา โดยเราต้องการให้การรวมกันของคอลัมน์ FirstName และ LastName ไม่ซ้ำกัน

SQL
CREATE TABLE Students (
    StudentID INT PRIMARY KEY,
    FirstName VARCHAR(50),
    LastName VARCHAR(50),
    Email VARCHAR(100),
    CONSTRAINT UC_StudentName UNIQUE (FirstName, LastName)
);

เราใช้ข้อจำกัด UNIQUE กับสองคอลัมน์คือ FirstName และ LastName เพื่อให้แน่ใจว่าไม่มีนักศึกษาสองคนที่มีชื่อและนามสกุลเหมือนกัน (แต่สามารถมีอีเมลเดียวกันได้)

โครงสร้างของตารางที่ได้จะเป็นดังนี้

แทรกข้อมูลลงในตาราง

SQL
INSERT INTO Students (StudentID, FirstName, LastName, Email)
VALUES (1, 'Alice', 'Johnson', '[email protected]');

INSERT INTO Students (StudentID, FirstName, LastName, Email)
VALUES (2, 'Bob', 'Smith', '[email protected]');

-- ลองแทรกข้อมูลที่ซ้ำกันในคอลัมน์ FirstName และ LastName
INSERT INTO Students (StudentID, FirstName, LastName, Email)
VALUES (3, 'Alice', 'Johnson', '[email protected]'); -- จะเกิดข้อผิดพลาดเพราะชื่อและนามสกุลซ้ำ

ผลลัพธ์: เมื่อลองแทรกข้อมูลที่มี FirstName และ LastName เหมือนกัน ระบบจะปฏิเสธและแจ้งข้อผิดพลาด

การใช้งาน UNIQUE Constraint ร่วมกับ Primary Key

ในตัวอย่างนี้ เราจะสร้างตารางที่เก็บข้อมูลเกี่ยวกับสินค้า โดยให้ ProductID เป็น Primary Key และกำหนดให้ ProductCode ไม่ซ้ำกันในตาราง

SQL
CREATE TABLE Products (
    ProductID INT PRIMARY KEY,
    ProductName VARCHAR(100),
    ProductCode VARCHAR(50) UNIQUE
);

ProductID เป็น Primary Key ซึ่งต้องไม่ซ้ำและไม่เป็นค่า NULL ส่วน ProductCode เราใช้ UNIQUE Constraint เพื่อให้มั่นใจว่าสินค้าแต่ละรายการมีรหัสไม่ซ้ำกัน

ทดลองแทรกข้อมูลลงในตาราง

SQL
INSERT INTO Products (ProductID, ProductName, ProductCode)
VALUES (1, 'Laptop', 'P001');

INSERT INTO Products (ProductID, ProductName, ProductCode)
VALUES (2, 'Tablet', 'P002');

-- ลองแทรกข้อมูลที่ซ้ำกันในคอลัมน์ ProductCode
INSERT INTO Products (ProductID, ProductName, ProductCode)
VALUES (3, 'Smartphone', 'P001'); -- จะเกิดข้อผิดพลาดเพราะ ProductCode ซ้ำ

ผลลัพธ์: ระบบจะแจ้งข้อผิดพลาดเมื่อพยายามแทรกรหัสสินค้าที่ซ้ำกัน

แชร์เรื่องนี้