דילוג לתוכן המרכזי
מודול 9 · שיעור 3 מתוך 435/57 בקורס~10 min
שיעורי מודול (3/4)

שינוי המבנה: ALTER TABLE

הצרכים של אפליקציה משתנים עם הזמן, ומסד הנתונים חייב לעמוד בקצב. ALTER TABLE היא הפקודה (הרב-תכליתית) המוקדשת לשינוי סכימות טבלה קיימות מבלי צורך לבטל אותן (לסכן את הנתונים בפנים).

שינוי עמודות (ADD / DROP / ALTER)

הוספת עמודה דורשת טיפול. אם הטבלה כבר מכילה נתונים, הוספת עמודה "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טוען...

בטבלה 'מוצרים' יש כרגע עמודה 'שם'. שנה את הטבלה על ידי שינוי שם העמודה 'שם' ל'כותרת'. השתמש בפעולת RENAME COLUMN.

טוען עורך...
הצג רמז

תחביר: ALTER TABLE ... שנה שם עמודה ... ל ...

הפתרון זמין לאחר 3 ניסיונות

הוספת אילוצים בפוסט-פרודקשן

פעילות גופנית#sql.m9.l3.e2
ניסיונות: 0טוען...

שנה את טבלת 'מוצרים' על-ידי הוספת אילוץ CHECK (ששמו 'verifica_prezzo') המחייב את המחיר (העמודה 'מחיר') להיות גדול מ-0. יש להוסיף את האילוץ מבלי להפיל את העמודה המקורית.

טוען עורך...
הצג רמז

תחביר: טבלת ALTER TABLE הוסף שם אילוץ בדוק (...)

הפתרון זמין לאחר 3 ניסיונות