במאמר הקודם למדנו על MySQL subqueries. באופן תיאורטי יש לנו את כל היכולת לכתוב איזו שאילתא חדשה. במאמר הזה נלמד על VIEW – דרך נוחה לשמירת שאילתות מורכבות כטבלה משלהן.
VIEW
בדוגמאות הקודמות יצרנו שאילתא מסובכת למדי שנראית כך:
SELECT my_purchase.costumer_id, purchase_item, costumer_name,costumer_age FROM my_purchase INNER JOIN my_costumer ON my_purchase.costumer_id=my_costumer.costumer_id;
נניח שמדובר בשאילתא שרצה לא מעט פעמים, מדוע לא ליצור סוג של 'שאילתא קבועה'? זה בדיוק מה שה-view יוצר – טבלה חדשה, ממש כמו כל טבלה אחרת אך היא מכילה את נתוני השאילתא שקבענו. הסינטק של VIEW הוא מאד פשוט כמו כל דבר ב-MySQL. ראשית נכתוב CREATE VIEW ואז את שם מסד הנתונים שלנו, נקודה ואז את שם ה-VIEW. אחרי כן רושמים AS ואת ה-SELECT שלנו.
בלי דוגמא שמבהירה הכל אי אפשר:
CREATE VIEW internet_database.my_view AS
SELECT my_purchase.costumer_id,purchase_item, costumer_name,costumer_age FROM my_purchase INNER JOIN my_costumer ON my_purchase.costumer_id=my_costumer.costumer_id;
ועכשיו, אם אסתכל ברשימת הטבלאות שיש במסד הנתונים internet_database, אני אראה שיש לי טבלה חדשה! אך הטבלה הזו היא טבלה דינמית שמתעדכנת כל הזמן בהתאם לשינויים בשאר הטבלאות. על הטבלה הזו אני יכול להריץ כמובן SELECT כאוות נפשי.
שינוי VIEW נעשה עם ALTER בדיוק כמו כל טבלה, גם מחיקה נעשית עם DROP בדומה לטבלה.
STORED PROCEDURE
STORED PROCEDURE הוא החלק המורכב ביותר שיש ב-MySQL. עם יד על הלב, אני לא מכיר הרבה מפתחי ווב שמשתמשים בזה, אך חשוב להכיר את הנושא הזה. מדובר בעצם בשפת התכנות של MySQL שבאמצעותה אנו יכולים להריץ פונקציות יותר מורכבות לביצוע פעולות שונות.
יצירת STORED PROCEDURE
בתחילה אנו נתמקד ב-STORED PROCEDURE פשוט יחסית. אחד שיעשה פעולת SELECT פשוטה על my_costumer. לא משהו שאנו לא מכירים. ראשית, כיוון שאנו הולכים לכתוב פונקציה שיש בה את הסימן ";" שבמקרה הוא גם הסימן שלנו להראות ל-MySQL שהפקודה שלנו הסתיימה, אנו צריכים להגדיר לו סימן אחר. הסימן הזה נקרא DELIMITER. אחרי שאנו מגדירים לו DELIMITER של '//', אנו צריכים לכתוב את הפונקציה ואז להגדיר חזרה את ה-DELIMITER ל: ';'.
DELIMITER //
כאן יש STORED PROCEDURE
DELIMITER ;
בין ה-DELIMITERים, אנו יכולים ליצור את ה-STORED PROCEDURE שלנו. ראשית אנו נפצח ב-CREATE PROCEDURE ואז את שם הפונקציה שלנו עם (). אחרי כן BEGIN ואחרי כן מה הפונקציה עושה. במקרה שלנו SELECT פשוט. ואז END. נשמע פשוט? זה באמת פשוט:
DELIMITER //
mysql> CREATE PROCEDURE myClients()
-> BEGIN
-> SELECT * FROM my_costumer
-> ;
-> END //
DELIMITER ;
והנה סרט הדרכה למי שרוצה לראות איך אני יוצר את זה ממש 'חי'.
קריאה ל-STORED PROCEDURE
הקריאה ל-STORED PROCEDURE היא פשוטה מאד והולכת כך:
CALL myClients();
כאשר ה-myClients זו שם הפונקציה, שימו לב לסוגריים. הפונקציה שיצרתי כרגע היא ללא פרמטרים ולכן אנו לא מעבירים דרכה כלום. מה שיקרה לאחר שהפונקציה תרוץ הוא הדפסה של מה שקורה בתוכה.
מחיקת STORED PROCEDURE
מחיקה של STORED PROCEDURE נעשית עם DROP PROCEDURE ואז שם הפונקציה.
DROP PROCEDURE myClients;
צפייה בכל ה-STORED PROCEDURES
על מנת לראות את כל ה-STORED PROCEDURES שיש לנו על מסד הנתונים, כל מה שצריך לעשות זה להריץ את הפקודה הבאה:
SHOW PROCEDURE STATUS;
אפשר להשתמש בפילטר LIKE (שעליו למדנו במאמר קודם) כדי לסנן תוצאות.
לצפות ב-STORED PROCEDURE ספציפי
אם אנו רוצים לראות STORED PROCEDURE ספציפי, כל מה שעלינו לעשות זה להריץ SHOW CREATE PROCEDURE ואז את שם ה-STORED PROCEDURE. למשל:
SHOW CREATE PROCEDURE myClients;
⚠️המדריכים כאן הם טעימה בלבד! יש ספר מקיף המלמד MySQL מרמת בסיס ועד רמה מתקדמת. הספר הדיגיטלי, שרלוונטי גם לכל מסדי הנתונים שעובדים עם SQL – זמין כאן כחלק מהפרויקט "ללמוד ג'אווהסקריפט בעברית" – זו הדרך הטובה ביותר ללמוד באופן מקיף MySQL.
במאמר הבא אנו נמשיך לדון ב-STORED PROCEDURE והפעם נכתוב פונקציות יותר מורכבות מ-SELECT פשוט.