Kodokon kodokon.com

การสร้างสกีมา: CREATE TABLE และข้อจำกัด

ออกแบบตารางของคุณเองด้วยชนิดข้อมูลที่เหมาะสมและข้อจำกัด NOT NULL, UNIQUE และ PRIMARY KEY ที่ปกป้องข้อมูลของคุณ

8 นาที · 3 คำถาม

เปิดบทเรียนนี้ใน Kodokon

จนถึงตอนนี้คุณได้คิวรีตารางที่สร้างไว้เรียบร้อยแล้ว แต่นักพัฒนามืออาชีพเป็นผู้ออกแบบมัน สกีมาที่ดีจะปฏิเสธข้อมูลที่ไม่ถูกต้อง ตั้งแต่ตอนแทรกข้อมูล มันคือแนวป้องกันด่านแรกของคุณ ก่อนโค้ดของแอปพลิเคชันใด ๆ ใน sqliteonline.com หรือ sqlite3 ให้สร้างตารางนี้:

SQL
CREATE TABLE users (
  id INTEGER PRIMARY KEY,
  email TEXT NOT NULL UNIQUE,
  username TEXT NOT NULL UNIQUE,
  created_at TEXT NOT NULL
    DEFAULT (datetime('now'))
);
ข้อจำกัดสามอย่าง: NOT NULL, UNIQUE และค่าเริ่มต้น

SQLite รู้จักชนิดการจัดเก็บเพียงห้าชนิด: INTEGER, REAL, TEXT, BLOB และ NULL วันที่จะถูกเก็บที่นั่นเป็น TEXT ในรูปแบบ ISO (2026-07-04) ที่อื่น ๆ (PostgreSQL, MySQL) คุณจะประกาศเป็น VARCHAR(255), TIMESTAMP หรือ BOOLEAN แทน หลักการยังคงเหมือนเดิม เปลี่ยนเพียงชื่อของชนิดข้อมูล ตอนนี้ลองทดสอบข้อจำกัดของคุณ:

SQL
INSERT INTO users (email, username)
VALUES ('alice@example.com', 'alice');

INSERT INTO users (email, username)
VALUES ('alice@example.com', 'alice2');
การแทรกครั้งที่สองล้มเหลว: UNIQUE constraint failed

คีย์หลัก (primary key) ระบุตัวตนของแต่ละแถว ไม่เป็น NULL ไม่ซ้ำกัน และมีได้เพียงหนึ่งตัวต่อตาราง ใน SQLite INTEGER PRIMARY KEY มีคุณสมบัติที่มีค่า นั่นคือคอลัมน์จะเพิ่มค่าอัตโนมัติเมื่อคุณละค่าของมันไว้ ดังเช่นในการแทรกข้างต้น บน PostgreSQL คุณจะเขียน GENERATED ALWAYS AS IDENTITY และบน MySQL เขียน AUTO_INCREMENT สุดท้าย ให้เพิ่มกฎทางธุรกิจด้วย CHECK:

SQL
CREATE TABLE products (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  sku TEXT NOT NULL UNIQUE,
  price REAL NOT NULL CHECK (price >= 0)
);

INSERT INTO products (name, sku, price)
VALUES ('Keyboard', 'KB-01', -5);
ถูกปฏิเสธ: CHECK constraint failed จะไม่มีราคาติดลบใดผ่านเข้าไปได้

ทดสอบความรู้

ตรวจสอบว่าคุณจำประเด็นสำคัญของบทเรียนนี้ได้ครบถ้วน

  1. ข้อจำกัดใดรับประกันว่าจะไม่มีค่าซ้ำปรากฏในคอลัมน์ email?
    • NOT NULL
    • UNIQUE
    • CHECK
    • DEFAULT
  2. ความแตกต่างระหว่าง PRIMARY KEY กับ UNIQUE คืออะไร?
    • ไม่มี พวกมันเป็นคำพ้องกัน
    • คีย์หลักระบุตัวตนของแถว มีได้เพียงหนึ่งตัวต่อตาราง และไม่เป็น NULL เลย
    • UNIQUE เข้มงวดกว่า PRIMARY KEY
  3. ใน SQLite จะเกิดอะไรขึ้นถ้าคุณแทรกแถวโดยไม่ระบุค่าให้คอลัมน์ INTEGER PRIMARY KEY?
    • เกิดข้อผิดพลาด NOT NULL
    • SQLite สร้างจำนวนเต็มที่ไม่ซ้ำให้โดยอัตโนมัติ
    • คอลัมน์ยังคงเป็น NULL