ข้อจำกัด 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ข้อจำกัด NOT NULL และ CHECK
- ข้อจำกัด UNIQUE และคีย์ผสม
- FOREIGN KEY และการดำเนินการด้านความสัมพันธ์
- ค่า DEFAULT และคอลัมน์ที่สร้างขึ้น