0Pricing
SQL Academy · บทเรียน

ข้อจำกัด NOT NULL และ CHECK

ห้ามค่าที่ขาดหายด้วย NOT NULL และตรวจสอบกฎของโดเมนด้วย CHECK (price > 0, status IN ('active','archived'))

ข้อจำกัด NOT NULL และ CHECK เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดจึงต้องมีข้อจำกัด

ข้อจำกัดจะย้ายการตรวจสอบความถูกต้องเข้าไปไว้ในฐานข้อมูล ประโยชน์นั้นมหาศาล: ทุกแอป สคริปต์ และคำสั่งสอบถามเฉพาะกิจจะเขียนข้อมูลที่ถูกต้อง หรือไม่ก็ล้มเหลวพร้อมแจ้งข้อผิดพลาดอย่างชัดเจน

NOT NULL

ข้อจำกัดที่ง่ายที่สุด: คอลัมน์นี้ต้องมีค่า:

CREATE TABLE users (
  id    BIGSERIAL PRIMARY KEY,
  email VARCHAR(255) NOT NULL,
  age   INT                                  -- NULL allowed
);

การเพิ่ม NOT NULL ภายหลัง

เติมข้อมูลให้แถวเดิมก่อน แล้วจึงเพิ่มข้อจำกัด:

UPDATE users SET email = 'unknown@example.com' WHERE email IS NULL;
ALTER TABLE users ALTER COLUMN email SET NOT NULL;

ข้อจำกัด CHECK

นิพจน์บูลีนใด ๆ ที่ทุกแถวต้องทำให้เป็นจริง:

CREATE TABLE products (
  id BIGSERIAL PRIMARY KEY,
  name TEXT NOT NULL,
  price NUMERIC(10,2) NOT NULL CHECK (price > 0),
  discount NUMERIC(5,2) DEFAULT 0 CHECK (discount BETWEEN 0 AND 100)
);

CHECK กับค่าที่คล้าย Enum

จำกัดคอลัมน์ให้อยู่ในชุดค่าที่กำหนด:

CREATE TABLE orders (
  id BIGSERIAL PRIMARY KEY,
  status TEXT NOT NULL
    CHECK (status IN ('pending','paid','shipped','cancelled'))
);

NULL ผ่าน CHECK ได้อย่างเงียบ ๆ

ข้อจำกัด CHECK จะผ่านเมื่อนิพจน์เป็น NULL (ไม่ทราบค่า) หากต้องการการรับประกันที่เข้มงวด ให้ใช้ร่วมกับ NOT NULL:

CREATE TABLE invoices (
  amount NUMERIC(10,2) NOT NULL CHECK (amount > 0)
);

CHECK หลายคอลัมน์

คุณสามารถอ้างอิงหลายคอลัมน์ได้:

CREATE TABLE bookings (
  start_at TIMESTAMPTZ NOT NULL,
  end_at   TIMESTAMPTZ NOT NULL,
  CHECK (start_at < end_at)
);

การเพิ่ม CHECK ภายหลัง

ตรวจสอบแถวที่มีอยู่ก่อน แล้วจึงเพิ่มข้อจำกัด:

ALTER TABLE products
  ADD CONSTRAINT positive_price CHECK (price > 0);
-- fails if any row violates it

เคล็ดลับ NOT VALID สำหรับตารางขนาดใหญ่

ข้ามการสแกนทั้งหมดในเบื้องต้น แล้วตรวจสอบภายหลังในเบื้องหลัง:

ALTER TABLE products
  ADD CONSTRAINT positive_price CHECK (price > 0) NOT VALID;
ALTER TABLE products VALIDATE CONSTRAINT positive_price;

ข้อจำกัดที่มีชื่อ

ตั้งชื่อข้อจำกัดเสมอ เพื่อให้ข้อความข้อผิดพลาดและการย้ายโครงสร้างฐานข้อมูลคาดเดาได้:

ALTER TABLE products
  ADD CONSTRAINT products_price_positive CHECK (price > 0);

อย่าทำตรรกะซ้ำในแอป

หากฐานข้อมูลบังคับใช้กฎนั้น ทุกเส้นทางของโค้ดก็จะได้รับประโยชน์ และจะไม่มีกรณี “ลืมตรวจสอบความถูกต้อง” คุณยังควรมีการตรวจสอบซ้ำในแอปเพื่อประสบการณ์ผู้ใช้ (แจ้งผลได้ทันที) แต่ให้ฐานข้อมูลเป็นแหล่งข้อมูลหลักที่เชื่อถือได้

สรุป

NOT NULL และ CHECK ช่วยป้องกันข้อมูลเสียหายที่พบบ่อยที่สุด

  • NOT NULL: ไม่มีค่าที่ขาดหาย
  • CHECK: กฎใด ๆ ที่ใช้กับแต่ละแถว
  • ใช้ NOT VALID + VALIDATE สำหรับการเพิ่มข้อจำกัดโดยไม่ปิดระบบ

ตรวจสอบความเข้าใจอย่างรวดเร็ว

จะเกิดอะไรขึ้นหากคุณเขียน CHECK (price > 0) กับคอลัมน์ที่ไม่มี NOT NULL

คำถามที่พบบ่อย

บทเรียน “ข้อจำกัด NOT NULL และ CHECK” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ข้อจำกัด NOT NULL และ CHECK” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ข้อจำกัด NOT NULL และ CHECK”

ห้ามค่าที่ขาดหายด้วย NOT NULL และตรวจสอบกฎของโดเมนด้วย CHECK (price > 0, status IN ('active','archived')) คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “ข้อจำกัด NOT NULL และ CHECK” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม

ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ข้อจำกัด NOT NULL และ CHECK
  2. ข้อจำกัด UNIQUE และคีย์ผสม
  3. FOREIGN KEY และการดำเนินการด้านความสัมพันธ์
  4. ค่า DEFAULT และคอลัมน์ที่สร้างขึ้น
← กลับไปที่ SQL Academy