546
צפיות
צפיות
6
תשובות
תשובות
האם ייתכן שבMYSQL מבוטלת אפשרות
האם ייתכן שב – MYSQL מבוטלת אפשרות של עדכון ומחיקה קסקדיים?
הפעלתי אצלי במחשב מספר שאילתות ויצרתי טבלאות.
אצלי במחשב הכל עובד כשורה: 2 טבלאות ובינהן תלות יחיד-רבים ועובדת אפשרות של מחיקה ועדכון קסקדיים.
כאשר אני מפעיל את אותן השאילתות על שרת שבו בסופו של דבר יהיה האתר, אמנם נוצרות הטבלאות, אבל אין עדכון ומחיקה קסקדיים…
ברור לי שהשאילתות תקינות כי בדקתי במחשב שלי,
מה יכולה להיות הסיבה שזה לא עובד בשרת שבו האתר ?
תודה מראש
6 תשובות
תגדיר "אין עדכון ומחיקה"
אתה מקבל שגיאה כלשהי או שזה פשוט לא פועל?
לא מקבל שום הודעה
למשל יש לי טבלת מבחנים, ולכל מבחן מיוחסות שאלות השמורות בטבלה אחרת.
כשאני מוחק מבחן ע"י שאילתה שמתייחסת למבחן ספציפי, אני מצפה שכל השאלות המיוחסות תמחקנה – וזה לא קורה – פשוט המבחן נמחק ובמערכת נשארות השאלות המשתייכות למבחן שכבר איננו. אין שום הודעה.
כפי שציינתי שאילתות שהרצתי ליצירת הטבלאות והקשרים נכונות, כי בדקתי אותן במחשב שלי. וגם כשהרצתי אותן על השרת שבו האתר העתידי לא הייתה שום הודעת שגיאה.
דוגמה לשאילתה:
CREATE TABLE `question` (
`question_num` INTEGER UNSIGNED NOT NULL
AUTO_INCREMENT,
`question_name` VARCHAR(45) NOT NULL,
`level` VARCHAR(1) NOT NULL,
`picture` BLOB NOT NULL,
`size` INTEGER UNSIGNED NOT NULL,
`test_num` INTEGER UNSIGNED NOT NULL,
PRIMARY KEY(`question_num`),
CONSTRAINT `FK_test_num` FOREIGN KEY
`FK_test_num` (`test_num`)
REFERENCES `test` (`test_num`)
ON DELETE CASCADE
ON UPDATE CASCADE
)
"אין עדכון ומחיקה"
"אין עדכון ומחיקה"- קסקדיים,
אני בונה את בסיס הנתונים (מנורמלות 3NF) עם קשרים בין טבלאות.
ואם יש למשל קשר יחיד רבים בין טבלאות שונות למשל טבלה של מנהלים וטבלה של עובדים כאשר לכל מנהל יש הרבה עובדים ולא ייתכן מצב של עובדים ללא מנהל.
אז מחיקה של מנהל צריכה להפעיל אוטומטית מנגנון פנימי במסד הנתונים שימחוק גם את כל העובדים שתחתיו. כמו כן אם נשנה את שמו של מנהל מסויים אז כל העובדים המיוחסים אליו ימשיכו להיות מיוחסים אליו ולא למנהל שקבר לא קיים למעשה במערכת (כי שמו שונה)
יש דרך אחרת – אך לא רצויה
הדרך האחרת היא לא להשתמש במנגון פנימי לעדכון ומחיקה קסקדיים, אלא לבצע אותם ע"י שאילתות – קודם שאילתה על טבלה אחת ועז על האחרת.
וזה מאוד לא רצוי כי במקה זה יכול להווצר מצב של חוסר אמינות של הנתונים.
הדוגמה הכי גסה: אם הרצתי שאילתות מחיקה של נתונים קשורים משתי טבלאות אז ייתכן שאחת מהן תתבצע והשניה לא (בגלל שגיאה במערכת) והתוצאה: נשאר נתונים לא אמינים/ לא נכונים במערכת.
במחיקה קסקדית במקרה של תקלה לא ימחק כלום – מאף טבלה (זה "הכל או כלום")
וכך נוכל שוב להריץ את השאילתה
טאנזאקציה פשוטה תפתור את זה.
לגבי השאלה עצמה – אפפעם לא יצא לי לעבוד עם mySql, ככה שאין לי מושג במה הוא תומך ובמה לא.
תודה זהר