الانتقال إلى المحتوى الرئيسي
الوحدة 9 · الدرس 3 من 435/57 في الدورة~10 min
دروس الوحدة (3/4)

تغيير الهيكل: ALTER TABLE

تتغير احتياجات التطبيق بمرور الوقت، ويجب على قاعدة البيانات مواكبة ذلك. ALTER TABLE هو الأمر (متعدد الاستخدامات للغاية) المخصص لتعديل مخططات الجدول الموجودة دون الاضطرار إلى إسقاطها (المخاطرة بالبيانات الموجودة بالداخل).

تعديل الأعمدة (إضافة / إسقاط / تغيير)

تتطلب إضافة عمود العناية. إذا كان الجدول يحتوي بالفعل على بيانات، فإن إضافة عمود "NOT NULL" سيؤدي إلى حدوث خطأ في Postgres: ما الذي يجب إدراجه في الصفوف القديمة؟ يجب عليك ربط DEFAULT.

SQL
-- Aggiungiamo una colonna
ALTER TABLE users ADD COLUMN age INTEGER; -- Ok, sarà NULL ovunque

-- Aggiungiamo NOT NULL, quindi diamogli un deafult
ALTER TABLE users ADD COLUMN active BOOLEAN NOT NULL DEFAULT true;

-- Cancellare una colonna (ATTENZIONE! i dati andranno persi)
ALTER TABLE users DROP COLUMN age;

ليس فقط الإضافة أو الإزالة: غالبًا ما تحتاج إلى إعادة تكوين type للعمود أو أحد قيوده:

SQL
-- Cambia il tipo di dato (postgreSQL farà un 'cast' dei dati esistenti se possibile)
ALTER TABLE users ALTER COLUMN username TYPE VARCHAR(100);

-- Aggiunge il vincolo NOT NULL
ALTER TABLE users ALTER COLUMN username SET NOT NULL;

-- Rimuove il vincolo NOT NULL (ritorna ad accettare null)
ALTER TABLE users ALTER COLUMN username DROP NOT NULL;

إضافة القيود في وقت التشغيل

تمامًا كما هو الحال مع CREATE TABLE، يمكننا استخدام ALTER TABLE لإرفاق CONSTRAINT بجدول قيد الاستخدام بالفعل في تطبيق الإنتاج.

SQL
-- Aggiungi un nuovo Foreign Key
ALTER TABLE orders
  ADD CONSTRAINT fk_order_status FOREIGN KEY (status_id) REFERENCES statuses(id);

-- Aggiungi un CHECK
ALTER TABLE products
  ADD CONSTRAINT price_positive CHECK (price > 0);

-- E per distruggerli?
ALTER TABLE products DROP CONSTRAINT price_positive;

إعادة تسمية

يمكن إعادة تسمية كل من الأعمدة والجداول:

SQL
ALTER TABLE users RENAME TO auth_users;
ALTER TABLE auth_users RENAME COLUMN username TO login_name;

جربه

تمرين#sql.m9.l3.e1
المحاولات: 0جارٍ التحميل…

يحتوي جدول "المنتجات" حاليًا على عمود "الاسم". قم بتعديل الجدول عن طريق إعادة تسمية عمود "الاسم" إلى "العنوان". استخدم عملية إعادة تسمية العمود.

جارٍ تحميل المحرر…
إظهار التلميح

بناء الجملة: تغيير الجدول ... إعادة تسمية العمود ... إلى ...

الحل متاح بعد 3 من المحاولات

إضافة القيود في مرحلة ما بعد الإنتاج

تمرين#sql.m9.l3.e2
المحاولات: 0جارٍ التحميل…

قم بتعديل جدول "المنتجات" عن طريق إضافة قيد التحقق (المسمى "verifica_prezzo") الذي يتطلب أن يكون السعر (العمود "السعر") أكبر من 0. ويجب إضافة القيد دون إسقاط العمود الأصلي.

جارٍ تحميل المحرر…
إظهار التلميح

بناء الجملة: ALTER TABLE table ADD CONSTRAINT name CHECK (...)

الحل متاح بعد 3 من المحاولات