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

Primary Key (คีย์หลัก) ใน SQL Server

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