
SELECT ... INTO לטבלה חדשה.Quantity positive, וכותבים את הביטוי Quantity > 0.ALTER TABLE ... ADD CONSTRAINT ... CHECK, וכך אפשר ללמוד את הפקודה ולשמור אותה.-2 נדחה עם שגיאה על ההפרה של האילוץ.StudentUSA IS NOT NULL OR StudentLocal IS NOT NULL דורש שלפחות אחת מהן תהיה מלאה, ואסור ששתיהן יהיו ריקות.ALTER TABLE OrderDetails2 ADD CONSTRAINT Quantity_positive CHECK (Quantity > 0)ALTER TABLE Enrollments ADD CONSTRAINT Student_one_required CHECK (StudentUSA IS NOT NULL OR StudentLocal IS NOT NULL)הטקסט המלא של הדקות הראשונות בהרצאה «check constraint» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום וברוכים הבאים להרצאה על constraint, מגבלות שאנחנו רוצים לשים על טבלה. לדוגמה על טבלת order details אנחנו רוצים לשים מגבלות כך שאי אפשר יהיה להזמין כמות שלילית.
זאת אומרת, למרות שזאת עמודה של מספר שיכולה לקבל מספר שלילי, אני רוצה לשים עליו מגבלות שלא יוכל לקבל מספר שלילי. בואו נעשה דוגמא כזאת. בואו נעשה דוגמא.
אנחנו את order details הזה נעתיק לתוך טבלה אחרת. כדי לא להרוס אותו, into order details 2 נקרא לו ונעשה אותו גם בלי רווח שלא נצטרך לעשות כל פעם סוגריים מרובעים Select into מעתיק את כל המידע לטבלה חדשה יופי, זה רק בתנאי שטבלת order details 2 לא קיימת, זה עובד
ויש לנו טבלת order details 2 עכשיו אנחנו יכולים לעשות Select from order details 2 ולקבל את כל הטבלה שזה מצוין, דרך אגב זה אדום כי הוא עוד לא מכיר שהאובייקט הזה כבר קיים זאת אומרת אם אני אסגור אותו לגמרי, אפתח פה לעשות רפרש, פה אני אעשה רפרש והנה הוא קיים, אני עושה New Query, הוא כבר מכיר אותו.
אז לקח לו קצת זמן להתעדכן, אז לפעמים ממשק גרפי לא כל כך מתעדכן. בואו ננסה לעשות לו dbo.dbo.order details אתם רואים, האינטליסנס הזה הוא לא ממש אינטליסנס, הוא לא רואה אותו.
אתם רואים, הוא לא רואה אותו. לא נורא, אנחנו לא מתבאסים מזה. order details 2 dbo זה user שיצר אותו אוקיי למעשה השם המלא של הטבלה זה שם של database נקודה שם של user נקודה שם של user נקודה זה נקרא זה השם המלא שם של הדאטאבייס נקודה שם של user שיצר אותו שזה dbo database owner שם של טבלה זה השם המלא של טבלה אם אנחנו באים לפה ושמים
פה northwind אפשר לוותר על החלק הזה אוקיי הלאה אם אם אנחנו בעצמנו dbo, שזה מוגדר לי ב-users של דאטאבייס, אז אפשר לוותר גם על החלק הזה. טוב, אנחנו רוצים פה להכניס כמות שלילית. בואו נראה שכרגע זה אפשרי.
זאת אומרת, אני במקום 12 מתחיל מינוס 2 והוא מקבל. זה לא מקובל עליי. אני רוצה שהוא לא ייתן לי להכניס מינוס 2. איך אנחנו עושים את זה?
אנחנו באים ל-order details, עושים design לטבלה ומוסיפים constraint, זה נקרא check constraint, מוסיפים אותו. מוסיפים צ'ק קונסטריינט פה לרשימה ניתן לה שם קוואנטיטי פוזיטיב פוזיטיב ופה אנחנו כותבים את הביטוי מהו הביטוי שאנחנו רוצים איזה ביטוי אנחנו רוצים שהקוואנטיטי שעמודת הקוואנטיטי תהיה גדולה מאפס נניח
הוא עושה הערכה לכל הביטוי הזה אם יוצא לו אמת אז הוא נותן לי להיכנס אם יוצא לו שקר הוא לא נותן לי להיכנס קוואנטיטי גדול מאפס יופי הצ'ק הזה, הבדיקה הזאת, זה נקרא צ'ק קונסטרנט, יתקיים גם בפעולת אינסרט ואבדק, אוקיי?
וגם הוא יבדוק את זה על המידע קיים. זאת אומרת, כשאני יוצר עכשיו מידע חדש, כאילו הוא יוצר טריגר חדש, הוא גם יבדוק שאכן זה מתקיים, ולא ייתן ליצור סתם טריגר שהוא לא עובד נכון.
יופי, בואו נראה, נעשה לזה סייב לפני הסייב. אני רוצה להראות לכם את הסקריפט שהוא יוצר. Generate Change Script. אנחנו יכולים ככה ללמוד פקודות ואנחנו רואים פה את הפקודה alter table תשנה טבלה שם של טבלה add constraint תוסיף constraint שם של constraint מסוג check זה אומר בדיקה ומה לבדוק אוקיי יפה מאוד אז זה יכלנו להריץ את זה אם היינו רוצים לכתוב סקריפט שמייצר לנו הכל אנחנו לא רוצים אנחנו עושים save ברגע
שעשינו פה save אפשר כבר לסגור את זה אנחנו רואים פה בקונסטרנט שהתבסף לנו הקונסטרנט החדש נעשה edit נבוא להכניס מינוס שתיים, הוא לא נותן לי. הוא כותב לי ש-e-quantity positive, check constraint לא נותן להכניס מידע שגוי.
הטעות הזאת תתגלגל ללקוח, נניח באתר האינטרנט, שהדאטאבייס לא מוכן לקבל את המידע הזה. אתם רואים? הוא לא מוכן לקבל את המידע הזה. תלחצו escape ותבטלו את הפעולה.
יפה. בואו נעשה עוד דוגמה. בואו נעשה עוד דוגמה, אבל נפתח דאטאבייס חדש, New Database, נקרא לו קולג' אוקיי פתחנו דאטאבייס חדש בשם קולג' ויש לנו בדאטאבייס קולג' טבלה חדשה טבלה חדשה תחשבו שזה יש לנו תלמידים מארצות הברית ותלמידים מקומיים אז אנחנו רוצים לשבץ אותם
לקורסים זאת טבלת השיבוצים אוקיי אז אנחנו כותבים ID מסוג אינטג'ר שיהיה איזשהו אינטג'ר כזה שרץ לא מעניין עכשיו אנחנו רוצים ככה סטיודנט מ-USA שזה מספר הסטודנט מ-USA, או שיכול להיות סטודנט מ-Local, מקומי, אוקיי?
סטודנטים המקומיים שלנו, שיש להם גם מספרים סידוריים, או זה או זה, משובצים לקורס ID. זאת טבלת השיבוצים שלי, אוקיי?
זאת טבלת השיבוצים. מה מפריע לי בטבלת השיבוצים הזאת? תראו, קורס ID, אני אומר שהוא לא יכול להיות נ"ל. קורס ID לא יכול להיות נ"ל, אתה חייב להיות בקורס.
אבל אתה יכול להיות או סטודנט USA או סטודנט לוקל. או שאתה פה או שאתה פה. אבל מה אסור? אסור ששניהם יונעל. אסור ששניהם יונעל.
בואו תראו Students Courses, תראו מה אסור. יכול להיות שנניח שיבוץ מספר 1 זה תלמיד עם תעודת זהות 100, תלמיד 100 משובץ לקורס מספר 17. שיבוץ שני, תלמיד מקומי שהמספר שלו 54 גם הוא משובץ לקורס מספר 17. אוקיי?
אבל מה אסור לי לעשות? אסור לי לעשות שלקורס מספר 17 לא משובץ לא זה ולא זה. זה אסור, מבחינתי זה לא הגיוני, זה לא מקובל שלא זה ולא זה. עכשיו, אני צריך לאפשר פונל, אני צריך לאפשר פונל, אבל לא בשניהם ביחד.
לא בשניהם ביחד. איך אני עושה את הדבר הזה? לדוגמה, איך אני עוקף את הלוגיקה הזאת? אז אני משתמש ב-check constraint ומוסיף פה מגבלה. מוסיף פה מגבלה שאני אומר לה, השם שלה שיהיה stent constraint אבל מה החוק