Primary Key คืออะไร?
Primary Key คือฟิลด์ (หรือชุดฟิลด์) ที่ระบุแถวข้อมูลได้อย่าง唯一 ไม่มีค่า NULL ได้ ตารางหนึ่งมี PK ได้เพียง 1 อัน สร้างได้ทั้งตอน CREATE TABLE และ ALTER TABLE
1. สร้าง PK พร้อม CREATE TABLE
รูปแบบที่ 1: ระบุติดคอลัมน์
CREATE TABLE table_name (
column1 data_type [NULL | NOT NULL] [PRIMARY KEY],
column2 data_type [NULL | NOT NULL],
...
);
รูปแบบที่ 2: ใช้ CONSTRAINT (แนะนำ เนื่องจากตั้งชื่อ constraint ได้ และรองรับ Composite Key)
CREATE TABLE table_name (
column1 data_type [NULL | NOT NULL],
column2 data_type [NULL | NOT NULL],
...
CONSTRAINT constraint_name PRIMARY KEY (col1, col2, ... col_n)
);
ตัวอย่าง
-- PK เดี่ยว
CREATE TABLE nhanvien (
nhanvien_id INT PRIMARY KEY,
ho VARCHAR(50) NOT NULL,
ten VARCHAR(50) NOT NULL,
luong MONEY
);
-- PK แบบ CONSTRAINT
CREATE TABLE nhanvien (
nhanvien_id INT,
ho VARCHAR(50) NOT NULL,
ten VARCHAR(50) NOT NULL,
luong MONEY,
CONSTRAINT nhanvien_pk PRIMARY KEY (nhanvien_id)
);
-- Composite PK (หลายคอลัมน์)
CREATE TABLE vien (
ho VARCHAR(50) NOT NULL,
ten VARCHAR(50) NOT NULL,
luong MONEY,
CONSTRAINT nhanvien_pk PRIMARY KEY (ho, ten)
);
2. เพิ่ม PK ด้วย ALTER TABLE
คอลัมน์ต้องเป็น NOT NULL ก่อน ถ้าเป็น NULL ต้อง drop/create ใหม่
ALTER TABLE table_name
ADD CONSTRAINT constraint_name PRIMARY KEY (col1, col2, ... col_n);
ตัวอย่าง
-- PK เดี่ยว
ALTER TABLE nhanvien
ADD CONSTRAINT nhanvien_pk PRIMARY KEY (nhanvien_id);
-- Composite PK
ALTER TABLE staff
ADD CONSTRAINT nhanvien_pk PRIMARY KEY (ho, ten);
3. ลบ Primary Key
ALTER TABLE table_name
DROP CONSTRAINT constraint_name;
ALTER TABLE staff
DROP CONSTRAINT nhanvien_pk;
4. ปิดใช้งาน (Disable) Primary Key
ALTER INDEX constraint_name ON table_name DISABLE;
ALTER INDEX nhanvien_pk ON nhanvien DISABLE;
5. เปิดใช้งาน (Enable/Rebuild) Primary Key
ALTER INDEX constraint_name ON table_name REBUILD;
ALTER INDEX nhanvien_pk ON nhanvien REBUILD;
สรุป: ใช้ CONSTRAINT ตั้งชื่อ PK เพื่อจัดการง่าย (disable/enable/drop ได้โดยชื่อ) และรองรับ Composite Key