Drop vs Truncate
Drop ו-Truncate הן שתי הצהרות SQL (Structured Query Language) המשמשות במערכות ניהול מסדי נתונים, שבהן אנו רוצים להסיר רשומות נתונים ממסד נתונים. גם הצהרות Drop וגם הצהרות Truncate מסירות את כל הנתונים בטבלה ואת הצהרת SQL הקשורה. פעולת המחיקה אינה יעילה במקרה זה מכיוון שהיא משתמשת ביותר שטחי אחסון מאשר שחרור וקיצוץ.
במקרה, אם נרצה למחוק טבלה במסד נתונים עם כל הנתונים שלו, SQL מאפשר לנו לבצע זאת בקלות באמצעות משפט Drop. פקודת Drop היא פקודת DDL (Data Definition Language), וניתן להשתמש בה כדי להרוס מסד נתונים, טבלה, אינדקס או תצוגה קיימים.זה מוחק את כל המידע בטבלה, כמו גם את מבנה הטבלה ממסד הנתונים. כמו כן, ייתכן שנרצה להיפטר מכל הנתונים בטבלה בפשטות, אך ללא הטבלה, ונוכל להשתמש במשפט Truncate ב-SQL בתרחיש כזה. Truncate היא גם פקודת DDL והיא מבטלת את כל השורות בטבלה אך משמרת את הגדרת הטבלה זהה לשימוש עתידי.
פקודה שחרר
כפי שהוזכר קודם לכן, פקודת Drop מסירה את הגדרת הטבלה ואת כל הנתונים, אילוצי השלמות, האינדקסים, הטריגרים והרשאות הגישה שלה, שנוצרו בטבלה המסוימת. אז זה מוריד לחלוטין את האובייקט הקיים ממסד הנתונים, וגם הקשרים לטבלאות אחרות לא יהיו תקפים לאחר ביצוע הפקודה. זה גם מסיר את כל המידע על הטבלה ממילון הנתונים. להלן התחביר הטיפוסי לשימוש במשפט Drop בטבלה.
DROP TABLE
עלינו פשוט להחליף את שם הטבלה שברצוננו להסיר ממסד הנתונים בדוגמה שלמעלה של פקודת Drop.
חשוב לציין שלא ניתן להשתמש בהצהרת Drop כדי למחוק טבלה, שכבר הוזכרה על ידי אילוץ מפתח זר. במקרה זה, יש לבטל תחילה את אילוצי המפתח הזר המתייחס, או את הטבלה המסוימת הזו. כמו כן, לא ניתן להחיל משפט Drop על טבלאות המערכת במסד הנתונים.
מכיוון שפקודת Drop היא הצהרת התחייבות אוטומטית, לא ניתן להחזיר את הפעולה לאחר הפעלתה לאחור ולא יופעלו טריגרים. כאשר טבלה נשמטת, כל ההפניות לטבלה לא יהיו חוקיות, ולכן, אם ברצוננו להשתמש בטבלה שוב, יש ליצור אותה מחדש עם כל אילוצי השלמות והרשאות הגישה. יש לאתר שוב את כל היחסים לטבלאות האחרות.
פקודה לקצץ
פקודה Truncate היא פקודת DDL, והיא מסירה את כל השורות בטבלה ללא שום תנאים שצוינו על ידי המשתמש, ומשחררת את הרווח המשמש את הטבלה, אבל מבנה הטבלה עם העמודות, האינדקסים והאילוצים שלה נשאר זהה. Truncate מבטל נתונים מטבלה על ידי ביטול הקצאת דפי הנתונים המשמשים לאחסון נתוני הטבלה, ורק הקצאות הדפים הללו נשמרות ביומן העסקאות. כך שהוא מנצל פחות משאבי יומן טרנזקציות ומשאבי מערכת בהשוואה לפקודות SQL קשורות אחרות כמו Delete. אז Truncate היא אמירה קצת יותר מהירה מאחרים. להלן התחביר הטיפוסי לפקודת Truncate.
TRUNCATE TABLE
עלינו להחליף את שם הטבלה, שממנו ברצוננו להסיר את כל הנתונים, בתחביר לעיל.
Truncate לא ניתן להשתמש בטבלה שהופניה אליה באמצעות אילוץ מפתח זר. הוא משתמש ב-commit אוטומטית לפני שהוא פועל וב-commit אחר לאחר מכן, כך שהחזרה לאחור של העסקה היא בלתי אפשרית, ולא מופעלים טריגרים. אם אנחנו רוצים לעשות שימוש חוזר בטבלה אנחנו צריכים רק לגשת להגדרת הטבלה הקיימת במסד הנתונים.
מה ההבדל בין Drop ו-Truncate?
גם הפקודות Drop וגם Truncate הן פקודות DDL וגם פקודות commit אוטומטי, כך שלא ניתן להחזיר את העסקאות שבוצעו באמצעות פקודות אלו לאחור.
ההבדל העיקרי בין Drop ו-Truncate הוא שהפקודה Drop מסירה, לא רק את כל הנתונים בטבלה, אלא גם מסירה את מבנה הטבלה לצמיתות ממסד הנתונים עם כל ההפניות, בעוד שהפקודה Truncate מסירה רק את כל הנתונים. השורות בטבלה, והיא משמרת את מבנה הטבלה וההפניות שלה.
אם טבלה נשמטת, הקשרים לטבלאות אחרות לא יהיו תקפים יותר, וגם אילוצי השלמות והרשאות הגישה יוסרו. אז אם הטבלה נדרשת לשימוש חוזר, יש לבנות אותה מחדש עם מערכות היחסים, אילוצי השלמות, וגם הרשאות הגישה. אבל אם טבלה קטועה, מבנה הטבלה והאילוצים שלה נשארים לשימוש עתידי, ולכן, כל אחד מהבידורים לעיל אינו נדרש לשימוש חוזר.
כאשר הפקודות הללו מיושמות, עלינו להיות זהירים בשימוש בהן. כמו כן, עלינו להבין טוב יותר את מהות הפקודות הללו, כיצד הן פועלות, וגם תכנון קפדני לפני השימוש בהן כדי למנוע פספוס של דברים חיוניים.לבסוף, ניתן להשתמש בשתי הפקודות הללו כדי לנקות את מסדי הנתונים במהירות ובקלות, תוך צורך בפחות משאבים.