ค่า DEFAULT และคอลัมน์ที่สร้างขึ้น
กำหนดค่า DEFAULT (NOW(), uuid_generate_v4(), 'pending') และคำนวณค่าทันทีด้วยคอลัมน์ GENERATED ALWAYS AS
ค่า DEFAULT และคอลัมน์ที่สร้างขึ้น เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
DEFAULT: เติมค่าที่ขาดหายโดยอัตโนมัติ
เมื่อ INSERT ไม่ระบุคอลัมน์ จะใช้ค่า DEFAULT:
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY,
email VARCHAR(255) NOT NULL,
status TEXT NOT NULL DEFAULT 'active',
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);DEFAULT ที่ใช้บ่อย
รูปแบบที่คุณจะใช้ในทุกที่:
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
id UUID PRIMARY KEY DEFAULT gen_random_uuid()
is_active BOOLEAN NOT NULL DEFAULT true
status TEXT NOT NULL DEFAULT 'pending'การเพิ่ม DEFAULT ภายหลัง
แถวเดิมจะไม่ถูกเติมค่าข้อมูลย้อนหลังโดยค่าเริ่มต้น มีเพียงการเพิ่มข้อมูลใหม่เท่านั้นที่ใช้ค่าเริ่มต้น:
ALTER TABLE users ALTER COLUMN status SET DEFAULT 'active';
-- For existing rows, backfill manually:
UPDATE users SET status = 'active' WHERE status IS NULL;การเพิ่ม NOT NULL พร้อม DEFAULT
PostgreSQL 11 ขึ้นไปรองรับการเพิ่มคอลัมน์ NOT NULL ที่มี DEFAULT คงที่ได้อย่างรวดเร็ว โดยไม่ต้องเขียนตารางใหม่:
ALTER TABLE users
ADD COLUMN signup_source TEXT NOT NULL DEFAULT 'web';
-- Fast in PG 11+, slow beforeคอลัมน์ที่สร้างจากการคำนวณ (STORED)
คอลัมน์ที่ค่าถูกคำนวณโดยอัตโนมัติจากคอลัมน์อื่น:
CREATE TABLE orders (
id BIGSERIAL PRIMARY KEY,
qty INT NOT NULL,
unit_price NUMERIC(10,2) NOT NULL,
total NUMERIC(12,2) GENERATED ALWAYS AS (qty * unit_price) STORED
);
INSERT INTO orders (qty, unit_price) VALUES (3, 9.99);
SELECT * FROM orders; -- total is auto-filledtsvector ที่สร้างขึ้นสำหรับการค้นหาข้อความเต็มรูปแบบ
การใช้งานที่ยอดเยี่ยมของคอลัมน์ที่สร้างขึ้นแบบ STORED:
ALTER TABLE articles
ADD COLUMN search_doc tsvector
GENERATED ALWAYS AS (to_tsvector('english', title || ' ' || body)) STORED;
CREATE INDEX articles_search_idx ON articles USING GIN(search_doc);คอลัมน์ที่สร้างขึ้นแบบเสมือน
ปัจจุบัน PostgreSQL รองรับเฉพาะ STORED (แบบเสมือนจะมาในรุ่นอนาคต) ฐานข้อมูลอื่น ๆ เช่น MySQL รองรับคอลัมน์ VIRTUAL ที่คำนวณค่าในเวลาที่ SELECT
คุณไม่สามารถ INSERT ลงในคอลัมน์ที่สร้างขึ้นได้
การพยายามเขียนค่าให้คอลัมน์นี้จะทำให้เกิดข้อผิดพลาด — ค่านี้ถูกคำนวณ ไม่ได้จัดเก็บโดยคุณ:
INSERT INTO orders (qty, unit_price, total) VALUES (3, 9.99, 30);
-- ERROR: column "total" can only be updated to DEFAULTค่าเริ่มต้นตามลำดับ
SERIAL/BIGSERIAL เป็นรูปแบบย่อของ "ค่าเริ่มต้นจากลำดับ":
-- Roughly equivalent:
CREATE TABLE t (id BIGSERIAL PRIMARY KEY);
-- =>
CREATE SEQUENCE t_id_seq;
CREATE TABLE t (id BIGINT PRIMARY KEY DEFAULT nextval('t_id_seq'));
ALTER SEQUENCE t_id_seq OWNED BY t.id;คอลัมน์ IDENTITY
วิธีมาตรฐานของ SQL ในการกำหนดอัตลักษณ์:
CREATE TABLE t (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name TEXT
);
-- GENERATED BY DEFAULT AS IDENTITY allows explicit overrides.DEFAULT และตรรกะทางธุรกิจ
กำหนดค่าเริ่มต้นให้เรียบง่าย ตรรกะที่ซับซ้อนควรอยู่ในโค้ดของแอปหรือทริกเกอร์ BEFORE INSERT
สรุปทบทวน
DEFAULT เติมค่าที่เว้นว่างไว้ ส่วน GENERATED จะคำนวณจากคอลัมน์อื่น
- NOW(), gen_random_uuid(), ค่าคงที่
- คอลัมน์ STORED ที่คำนวณแล้วเหมาะอย่างยิ่งสำหรับข้อมูลที่ได้มาจากการคำนวณ
- คอลัมน์ IDENTITY เป็นรูปแบบ PK สมัยใหม่
ตรวจสอบความเข้าใจ
ส่วนคำสั่งใดทำให้คอลัมน์ถูกเติมด้วยเวลาปัจจุบันโดยอัตโนมัติเมื่อ INSERT หากไม่ได้ระบุค่า
เรียนรู้ SQL ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 46
- บทเรียน
- 183
คำถามที่พบบ่อย
บทเรียน “ค่า DEFAULT และคอลัมน์ที่สร้างขึ้น” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ค่า DEFAULT และคอลัมน์ที่สร้างขึ้น” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ค่า DEFAULT และคอลัมน์ที่สร้างขึ้น”
กำหนดค่า DEFAULT (NOW(), uuid_generate_v4(), 'pending') และคำนวณค่าทันทีด้วยคอลัมน์ GENERATED ALWAYS AS คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “ค่า DEFAULT และคอลัมน์ที่สร้างขึ้น” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม
ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ข้อจำกัด NOT NULL และ CHECK
- ข้อจำกัด UNIQUE และคีย์ผสม
- FOREIGN KEY และการดำเนินการด้านความสัมพันธ์
- ค่า DEFAULT และคอลัมน์ที่สร้างขึ้น