0Pricing
SQL Academy · درس

القيم الافتراضية والأعمدة المُولَّدة

وفّر قيمًا افتراضية مثل NOW() وuuid_generate_v4() و'pending'، واحسب القيم تلقائيًا باستخدام أعمدة GENERATED ALWAYS AS.

القيم الافتراضية والأعمدة المُولَّدة درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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()
);

القيم الافتراضية الشائعة

أنماط ستستخدمها في كل مكان:

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-filled

tsvector مولّد للبحث في النص الكامل

من الاستخدامات الرائعة للأعمدة المولّدة 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 مناسبة جدًا للبيانات المشتقة
  • أعمدة الهوية هي النمط الحديث للمفتاح الأساسي

تحقق سريع

أي عبارة تجعل العمود يُملأ تلقائيًا بالوقت الحالي عند تنفيذ INSERT إذا لم تُ supplied قيمة؟

الأسئلة الشائعة

هل درس «القيم الافتراضية والأعمدة المُولَّدة» مجاني؟

نعم — نص درس «القيم الافتراضية والأعمدة المُولَّدة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.

ماذا ستتعلم في «القيم الافتراضية والأعمدة المُولَّدة»؟

وفّر قيمًا افتراضية مثل NOW() وuuid_generate_v4() و'pending'، واحسب القيم تلقائيًا باستخدام أعمدة GENERATED ALWAYS AS. تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟

لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «القيم الافتراضية والأعمدة المُولَّدة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟

نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. قيود NOT NULL وCHECK
  2. قيود UNIQUE والمفاتيح المركبة
  3. FOREIGN KEY والإجراءات المرجعية
  4. القيم الافتراضية والأعمدة المُولَّدة
← العودة إلى SQL Academy