fbpx

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

פקודות ALTER

פקודות אלו מאפשרות לנו לשנות את מבנה הטבלה לאחר שיצרנו אותה.

 

ADD – הוספת עמודה 

ALTER TABLE שם_טבלה 

ADD (שם_עמודה סוג_עמודה [DEFAULT ערך] , 

…

)

דוגמא :

ALTER TABLE emps 

ADD (emp_manager NUMBER(3) DEFAULT 100)

 

v     לא ניתן להגדיר היכן תמוקם העמודה החדשה מיקומה תמיד יהיה האחרון.

v     אם הטבלה מכילה כבר עמודות עם ערכים, העמודה החדשה תאותחל בערכי NULL עבור כל אותן שורות.

 

MODIFY – שינוי עמודה 

ALTER TABLE שם_טבלה

MODIFY(שם_עמודה סוג_עמודה [DEFAULT ערך] , 

…

)

דוגמא :

ALTER TABLE emps 

ADD (emp_manager NUMBER(3) DEFAULT 200)

v     על מנת לשנות את סוג העמודה, העמודה חייבת להיות ריקה מערכים.

v     על מנת להקטין את גודל העמודה, העמודה חייבת להיות ריקה מערכים.

v     שינוי ערך הדיפולט של עמודה ישפיע רק על הערכים הבאים אשר יכנסו לתוכה.                                                 

DROP– מחיקת עמודה

ALTER TABLE emps 

DROP (עמודה)

דוגמא :

ALTER TABLE emps 

DROP (emp_manager)

 

v     ניתן למחוק עמודה אשר מכילה או לא מכילה ערכים.

v     באמצעות פקודה זו ניתן למחוק כל פעם עמודה בודדת.

v     במידה והטבלה מורכבת מעמודה אחת, לא ניתן למחוק אותה ע"י פקודה זו.

 

SET UNUSED – סימון עמודות למחיקה עתידית

באמצעות פקודה זו אנו מסמנים עמודות מסויימות אשר נרצה למחוק בשלב מאוחר יותר :

 

ALTER TABLE שם_טבלה

SET UNUSED (שם_עמודה)

או

ALTER TABLE שם_טבלה 

SET UNUSED COLUMN שם_עמודה 

לדוגמא :

ALTER TABLE emps 

SET UNUSED (emp_manager)

 

מחיקת עמודה מטבלה עלולה להיות פעולה אשר לוקחת זמן רב במקרים מסויימים. ע"י פקודת SET UNUSED אנו מסמנים עמודה אחת או יותר כעמודות אשר יש למחוק בשלב מאוחר יותר ומבצעים את המחיקה כאשר תנאי השרת יותר אופטימליים.

על אף שעמודות אלו לא באמת נמחקות באמצעות פקודת SET UNUSED והזכרון אשר תופסות עמודות אלו לא משתחרר, לא יהיה ניתן לראות אותן ע"י פקודת SELECT או פקודת ה DESC.

אף יהיה ניתן להוסיף עמודה חדשה באותו שם כמו העמודה שסימנו כמיועדת למחיקה.

DROP UNUSED COLUMNSמחיקת עמודות המסומנות כמחוקות

על מנת למחוק עמודות אשר סומנו למחיקה עתידית אנו נשתמש בפקודה :

ALTER TABLE שם_טבלה 

DROP UNUSED COLUMNS

 

שינוי שם עמודה

ALTER TABLE שם_טבלה

RENAME COLUMN שם_עמודה TO שם_עמודה_חדש

לדוגמא :

ALTER TABLE emps 

RENAME COLUMN emp_manager TO manager_id 

 

שינוי שם טבלה

RENAME  שם_טבלה TO שם_טבלה_חדשה

לדוגמא :

RENAME emps TO employees_table 

 

הוספת אילוץ לטבלה

ALTER TABLE שם_טבלה 

ADD [CONSTRAINT שם_אילוץ ] סוג אילוץ (עמודה)

לדוגמא :

ALTER TABLE emps

ADD CONSTRAINT emp_mnid_ck CHECK(manager_id > 0)

 

כדי להוסיף את האילוץ NOT NULL נכתוב :

ALTER TABLE שם_טבלה 

MODIFY (שם_עמודה [CONSTRAINT שם_אילוץ ] NOT NULL (

לדוגמא :

ALTER TABLE employees_table 

MODIFY (manager_id CONSTRAINT emp_mnid_nn NOT NULL)

מחיקת אילוץ מהטבלה

ALTER TABLE employees_table

DROP CONSTRAINT שם_אילוץ | UNIQUE(שם_עמודה) | PRIMARY KEY [CASCADE]

 

מחיקת אילוץ ע"י ציון שמו :

ALTER TABLE employees_table 

DROP CONSTRAINT emps_emml_ck2

מחיקת אילוץ UNIQUE :

ALTER TABLE employees_table 

DROP UNIQUE(emp_mail)

 

מחיקת PRIMARY KEY כאשר אין אילוצים נוספים התלויים בו :

 

ALTER TABLE employees_table 

DROP PRIMARY KEY

 

מחיקת PRIMARY KEY כאשר ישנם אילוצים נוספים התלויים בו (כל האילוצים התלויים בו

ימחקו גם כן) :

ALTER TABLE departments 

DROP PRIMARY KEY CASCADE 

ניטרול אילוץ – DISABLE

ALTER TABLE שם_טבלה 

DISABLE CONSTRAINTשם_אילוץ   [CASCADE] 

לדוגמא :

ALTER TABLE employees_table 

DISABLE emp_sal_ck 

פקודת ה CASCADE תנטרל את כל האילוצים התלויים באילוץ :

 

ALTER TABLE departments 

DISABLE DEPT_ID_PK CASCADE

הפעלת אילוץ – ENABLE

ALTER TABLE שם_טבלה

ENABLE CONSTRAINT שם_אילוץ

לדוגמא :

ALTER TABLE departments 

ENABLE DEPT_ID_PK 

 

v     במידה והפעלנו אילוץ אשר נוטרל לפני כן ע"י פקודת  CASCADE אנו נצטרך להפעיל מחדש את כל האילוצים התלויים בו (אין ENABLE CASCADE).

v     כאשר נפעיל מחדש אילוץ על עמודה מסויימת, הערכים בתוך העמודה חייבים לתאום לאילוץ.

 

DROP TABLE – מחיקת טבלה

DROP TABLE שם_טבלה 

לדוגמא :

DROP TABLE employees_table

 

פקודת TRUNCATE – מחיקת שורות מהטבלה

בדומה לפקודת  DELETE (DML), פקודת  TRUNCATE מוחקת גם היא שורות מן הטבלה.

 

TRUNCATE TABLE שם_טבלה 

לדוגמא :

TRUNCATE TABLE employees_table 

הבדלים בין פקודת  TRUNCATE לפקודת  DELETE :

DELETE

TRUNCATE

פקודת DML, חלק מטרנסאקציה, יש צורך בפקודת COMMIT כדי שהשינוי יעשה קבוע

פקודת DDL ועל כן יתבצע COMMIT אוטומטי לאחר הרצתה

אפשר להגדיר אילו שורות ימחקו

כל השורות בטבלה ימחקו

נחשבת פעולה איטית יותר

נחשבת פעולה מהירה יותר