משפט CONSTRAINT

אילוץ דומה לאינדקס, על אף שניתן להשתמש בו גם כדי ליצור קשר גומלין עם טבלה אחרת.

השתמש בפסוקית CONSTRAINT במשפטי ALERT TABLE ו- CREATE TABLE כדי ליצור או למחוק אילוצים. קיימים שני סוגים של פסוקיות CONSTRAINT: אחד ליצירת אילוץ על שדה יחיד ואחד ליצירת אילוץ על יותר משדה אחד.

הערה: מנגנון מסד הנתונים של Microsoft Access אינו תומך בשימוש ב- CONSTRAINT, או באחד מהמשפטים של שפת הגדרת הנתונים, עם מסדי נתונים שאינם של Microsoft Access. במקום זאת, השתמש בפעולות שירות DAO Delete במקום זאת.

תחביר

אילוץ של שדה יחיד:

CONSTRAINT name {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES foreigntable [(foreignfield1, foreignfield2)]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

אילוץ של שדות מרובים:

CONSTRAINT name
{PRIMARY KEY (primary1[, primary2 [, ...]]) |
UNIQUE (unique1[, unique2 [, ...]]) |
NOT NULL (notnull1[, notnull2 [, ...]]) |
FOREIGN KEY [NO INDEX] (ref1[, ref2 [, ...]]) REFERENCES foreigntable [(foreignfield1 [, foreignfield2 [, ...]])]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

משפט CONSTRAINT כולל את החלקים הבאים:

חלק

תיאור

שם

שם האילוץ שיש ליצור.

primary1‏, primary2

שם השדה או השדות שיש לציין ב- מפתח ראשי.

unique1, ‏unique2

שם השדה או השדות שיש לציין כמפתח ייחודי.

notnull1‏, notnull2

שם השדה או השדות שמוגבלים לערכים שאינם Null.

ref1, ‏ref2

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

foreigntable

השם של טבלה זרה שמכיל את השדה או השדות שצוינו על-ידי foreignfield.

foreignfield1,‏ foreignfield2

שם השדה או השדות ב- foreigntable שצוינו על-ידי ‏‏ref1‏, ref2. באפשרותך להשמיט פסוקית זו אם השדה שאליו מתבצעת הפניה הוא המפתח הראשי של foreigntable.


הערות

השתמש בתחביר של אילוץ שדה יחיד בפסוקית הגדרת השדה של משפט ALTER TABLE או CREATE TABLE מיד לאחר ציון סוג הנתונים של השדה.

השתמש בתחביר של אילוץ שדות מרובים, בכל פעם שאתה משתמש במילה שמורה CONSTRAINT מחוץ לפסוקית הגדרת שדה במשפט ALTER TABLE או CREATE .

באמצעות CONSTRAINT תוכן להגדיר שדה כאחד מסוגי האילוצים הבאים:

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

  • באפשרותך להשתמש במילים השמורות PRIMARY KEY כדי להגדיר שדה אחד או קבוצת שדות בטבלה לשימוש כמפתח ראשי. כל הערכים במפתח הראשי חייבים להיות ייחודיים ולא Null, ולכל טבלה יכול להיות מפתח ראשי אחד בלבד.

    הערה: אל תגדיר אילוץ PRIMARY KEY בטבלה שכבר יש לה מפתח ראשי, אחרת תתרחש שגיאה.

  • באפשרותך להשתמש את במילים השמורות FOREIGN KEY כדי להגדיר שדה כמפתח זר. אם המפתח הראשי של טבלה זרה מכיל יותר משדה אחד, עליך להשתמש בהגדרת אילוץ מרובה שדות, שמפרטת את כל השדות המפנים, את שם הטבלה הזרה ואת שמות השדות המפנים בטבלה הזרה באותו סדר שבו מפורטים השדות המפנים. אם שדה או שדות שאליהם בוצעה הפניה הם המפתח הראשי של הטבלה הזרה, אין צורך לציין את השדות שאליהם בוצעה הפניה. כברירת מחדל, מנגנון מסד הנתונים מתנהג כאילו המפתח הראשי של הטבלה הזרה הוא השדה שאליו בוצעה הפניה.

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

  • באפשרותך לציין פעולות שיש לבצע בטבלה הזרה בהתבסס על פעולה מתאימה שבוצעה במפתח ראשי בטבלה שבה מוגדר ה- CONSTRAINT. לדוגמה, עיין בהגדרה הבאה עבור טבלת הלקוחות:

CREATE TABLE Customers (CustId INTEGER PRIMARY KEY, CLstNm NCHAR VARYING (50))

עיין בהגדרה הבאה של טבלת ההזמנות, שמגדירה קשר גומלין של מפתח זר שמפנה למפתח הראשי של טבלת הלקוחות:

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE CASCADE ON DELETE CASCADE

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

שקול את ההגדרה השונה הבאה של טבלת ההזמנות, באמצעות הפעולה SET NULL במקום הפעולה CASCADE:

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE SET NULL ON DELETE SET NULL

הפסוקית ON UPDATE SET NULL מציינת שאם המזהה של לקוח (CustId) מתעדכן בטבלת הלקוחות, ערכי המפתחות הזרים המתאימים בטבלת ההזמנות יוגדרו באופן אוטומטי כ- NULL. באופן דומה, הפסוקית ON DELETE SET NULL מציינת שאם לקוח נמחק מטבלת הלקוחות, כל המפתחות הזרים המתאימים בטבלת ההזמנות יוגדרו באופן אוטומטי כ- NULL.

כדי למנוע יצירה אוטומטית של אינדקסים עבור מפתחות זרים, ניתן להשתמש במשנה NO INDEX. יש להשתמש בצורה זו של הגדרת מפתח זר רק במקרים שבהם ערכי האינדקס המתקבלים ישוכפלו בתדירות גבוהה. כאשר הערכים באינדקס מפתח זר משוכפלים לעתים קרובות, השימוש באינדקס יכול להיות פחות יעיל מאשר סריקה פשוטה של הטבלה. ניהול אינדקס מסוג זה, עם שורות שנוספות לטבלה ונמחקות ממנה, פוגע בביצועים ואין לו שום יתרון.



הרחב את הכישורים שלך
סייר בהדרכה
קבל תכונות חדשות לפני כולם
הצטרף למשתתפי Office Insider

האם מידע זה היה שימושי?

תודה על המשוב!

תודה על המשוב! נראה שכדאי לקשר אותך לאחד מנציגי התמיכה של Office.

×