SQL ΞΕΝΟ ΚΛΕΙΔΙ: Πώς να δημιουργήσετε στον SQL Server με Παράδειγμα
Τι είναι το Ξένο ΚΛΕΙΔΙ;
A Ξένο κλειδί παρέχει έναν τρόπο επιβολής της ακεραιότητας αναφοράς στον SQL Server. Με απλά λόγια, το ξένο κλειδί διασφαλίζει ότι οι τιμές σε έναν πίνακα πρέπει να υπάρχουν σε έναν άλλο πίνακα.
Κανόνες για ΞΕΝΟ ΚΛΕΙΔΙ
- Το NULL επιτρέπεται στο ξένο κλειδί SQL.
- Ο πίνακας που αναφέρεται ονομάζεται Γονικός πίνακας
- Ο πίνακας με το ξένο κλειδί στην SQL ονομάζεται Child Table.
- Το ξένο κλειδί SQL στον θυγατρικό πίνακα αναφέρεται στο πρωτεύον κλειδί στον γονικό πίνακα.
- Αυτή η σχέση γονέα-παιδιού επιβάλλει τον κανόνα που είναι γνωστός ως «Αναφορική Integrity. "
Το παρακάτω παράδειγμα ξένου κλειδιού στην SQL με διάγραμμα συνοψίζει όλα τα παραπάνω σημεία για το ΞΕΝΟ ΚΛΕΙΔΙ

Πώς να δημιουργήσετε ΞΕΝΟ ΚΛΕΙΔΙ σε SQL
Μπορούμε να δημιουργήσουμε ένα Ξένο κλειδί στον διακομιστή SQL στο 2 τρόποι:
- Στούντιο διαχείρισης διακομιστή SQL
- T-sql
Στούντιο διαχείρισης διακομιστή SQL
Γονικός πίνακας: Ας πούμε, έχουμε έναν υπάρχοντα πίνακα Γονέα ως "Μάθημα". Το Course_ID και το Course_name είναι δύο στήλες με το Course_Id ως πρωτεύον κλειδί.
Παιδικό τραπέζι: Πρέπει να δημιουργήσουμε τον δεύτερο πίνακα ως παιδικό τραπέζι. "Course_ID" και "Course_Strength" ως δύο στήλες. Ωστόσο, το «Course_ID» θα είναι Ξένο κλειδί.
Βήμα 1) Κάντε δεξί κλικ στο Tables>New> Table…
Βήμα 2) Εισαγάγετε το όνομα δύο στηλών ως "Course_ID" και "Course_Strength". Κάντε δεξί κλικ στη στήλη 'Course_Id'. Τώρα κάντε κλικ στο Σχέση.
Βήμα 3) In «Σχέση με το εξωτερικό κλειδί,' Κάντε κλικ 'Προσθήκη'
Βήμα 4) Στο «Πίνακας και Προδιαγραφές στήλης» κάντε κλικ στο εικονίδιο «…».
Βήμα 5) Επιλέξτε «Πίνακας Πρωτεύοντος Κλειδιού» ως «ΜΑΘΗΜΑ» και ο νέος πίνακας που δημιουργείται τώρα ως «Πίνακας ξένων κλειδιών» από το αναπτυσσόμενο μενού.
Βήμα 6) «Πίνακας πρωτεύοντος κλειδιού» – Επιλέξτε τη στήλη «Αναγνωριστικό_μαθήματος» ως στήλη «Πίνακας κύριου κλειδιού».
"Πίνακας ξένων κλειδιών"- Επιλέξτε τη στήλη "Αναγνωριστικό_μαθήματος" ως στήλη "Πίνακας ξένων κλειδιών". Κάντε κλικ στο OK.
Βήμα 7) Κάντε κλικ στο Προσθήκη.
Βήμα 8) Δώστε το όνομα του πίνακα ως 'Course_Strength' και κάντε κλικ στο Εντάξει.
Αποτέλεσμα: Έχουμε ορίσει τη σχέση γονέα-παιδιού μεταξύ 'Σειρά μαθημάτων' και "Δύναμη_μαθήματος".
T-SQL: Δημιουργήστε έναν πίνακα Parent-child χρησιμοποιώντας T-SQL
Γονικός πίνακας: Επανεξετάστε, έχουμε έναν υπάρχοντα Γονικό πίνακα με όνομα πίνακα ως "Μάθημα".
Το Course_ID και το Course_name είναι δύο στήλες με το Course_Id ως πρωτεύον κλειδί.
Παιδικό τραπέζι: Πρέπει να δημιουργήσουμε τον δεύτερο πίνακα ως θυγατρικό πίνακα με το όνομα "Course_Strength_TSQL".
"Course_ID" και "Course_Strength" ως δύο στήλες για τον θυγατρικό πίνακα Course_Strength_TSQL.' Ωστόσο, το «Course_ID» θα είναι Ξένο κλειδί.
Παρακάτω είναι η σύνταξη για τη δημιουργία πίνακα με ΞΕΝΟ ΚΛΕΙΔΙ
Σύνταξη:
CREATE TABLE childTable ( column_1 datatype [ NULL |NOT NULL ], column_2 datatype [ NULL |NOT NULL ], ... CONSTRAINT fkey_name FOREIGN KEY (child_column1, child_column2, ... child_column_n) REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n) [ ON DELETE { NO ACTION |CASCADE |SET NULL |SET DEFAULT } ] [ ON UPDATE { NO ACTION |CASCADE |SET NULL |SET DEFAULT } ] );
Ακολουθεί μια περιγραφή των παραπάνω παραμέτρων:
- childTable είναι το όνομα του πίνακα που πρόκειται να δημιουργηθεί.
- στήλη_1, στήλη_2- οι στήλες που θα προστεθούν στον πίνακα.
- fkey_name- το όνομα του περιορισμού ξένου κλειδιού που θα δημιουργηθεί.
- child_column1, child_column2…child_column_n- το όνομα των στηλών chidTable για αναφορά στο πρωτεύον κλειδί στο parentTable.
- parentTable- το όνομα του γονικού πίνακα του οποίου το κλειδί πρέπει να αναφέρεται στον θυγατρικό πίνακα.
- parent_column1, parent_column2, … parent_column3- οι στήλες που αποτελούν το πρωτεύον κλειδί του γονικού πίνακα.
- ΣΤΗ ΔΙΑΓΡΑΦΗ. Μια προαιρετική παράμετρος. Καθορίζει τι συμβαίνει με τα θυγατρικά δεδομένα μετά τη διαγραφή των γονικών δεδομένων. Ορισμένες από τις τιμές για αυτήν την παράμετρο περιλαμβάνουν ΚΑΜΙΑ ΕΝΕΡΓΕΙΑ, SET NULL, CASCADE ή SET DEFAULT.
- ON UPDATE- Μια προαιρετική παράμετρος. Καθορίζει τι συμβαίνει με τα θυγατρικά δεδομένα μετά την ενημέρωση των γονικών δεδομένων. Ορισμένες από τις τιμές για αυτήν την παράμετρο περιλαμβάνουν NO ACTION, SET NULL, CASCADE ή SET DEFAULT.
- ΚΑΜΙΑ ΕΝΕΡΓΕΙΑ- χρησιμοποιείται μαζί με ON DELETE και ON UPDATE. Σημαίνει ότι τίποτα δεν θα συμβεί στα θυγατρικά δεδομένα μετά την ενημέρωση ή τη διαγραφή των γονικών δεδομένων.
- CASCADE- χρησιμοποιείται μαζί με ON DELETE και ON UPDATE. Τα θυγατρικά δεδομένα είτε θα διαγραφούν είτε θα ενημερωθούν μετά τη διαγραφή ή την ενημέρωση των γονικών δεδομένων.
- SET NULL- χρησιμοποιείται μαζί με ON DELETE και ON UPDATE. Το παιδί θα οριστεί ως μηδενικό μετά την ενημέρωση ή τη διαγραφή των γονικών δεδομένων.
- SET DEFAULT- χρησιμοποιείται μαζί με ON DELETE και ON UPDATE. Τα θυγατρικά δεδομένα θα οριστούν στις προεπιλεγμένες τιμές μετά από ενημέρωση ή διαγραφή των γονικών δεδομένων.
Ας δούμε ένα παράδειγμα ξένου κλειδιού στην SQL για να δημιουργήσουμε έναν πίνακα με μία στήλη ως ΞΕΝΟ ΚΛΕΙΔΙ:
Παράδειγμα ξένου κλειδιού σε SQL
Ερώτηση:
CREATE TABLE Course_Strength_TSQL ( Course_ID Int, Course_Strength Varchar(20) CONSTRAINT FK FOREIGN KEY (Course_ID) REFERENCES COURSE (Course_ID) )
Βήμα 1) Εκτελέστε το ερώτημα κάνοντας κλικ στο execute.
Αποτέλεσμα: Έχουμε ορίσει τη σχέση γονέα-παιδιού μεταξύ 'Σειρά μαθημάτων' και 'Course_Strength_TSQL.'
Χρήση ALTER TABLE
Τώρα θα μάθουμε πώς να χρησιμοποιούμε ξένο κλειδί στην SQL και να προσθέτουμε ξένο κλειδί στον διακομιστή SQL χρησιμοποιώντας τη δήλωση ALTER TABLE, θα χρησιμοποιήσουμε τη σύνταξη που δίνεται παρακάτω:
ALTER TABLE childTable ADD CONSTRAINT fkey_name FOREIGN KEY (child_column1, child_column2, ... child_column_n) REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n);
Ακολουθεί μια περιγραφή των παραμέτρων που χρησιμοποιήθηκαν παραπάνω:
- childTable είναι το όνομα του πίνακα που πρόκειται να δημιουργηθεί.
- στήλη_1, στήλη_2- οι στήλες που θα προστεθούν στον πίνακα.
- fkey_name- το όνομα του περιορισμού ξένου κλειδιού που θα δημιουργηθεί.
- child_column1, child_column2…child_column_n- το όνομα των στηλών chidTable για αναφορά στο πρωτεύον κλειδί στο parentTable.
- parentTable- το όνομα του γονικού πίνακα του οποίου το κλειδί πρέπει να αναφέρεται στον θυγατρικό πίνακα.
- parent_column1, parent_column2, … parent_column3- οι στήλες που αποτελούν το πρωτεύον κλειδί του γονικού πίνακα.
Παράδειγμα αλλαγής πίνακα προσθήκης ξένου κλειδιού:
ALTER TABLE department ADD CONSTRAINT fkey_student_admission FOREIGN KEY (admission) REFERENCES students (admission);
Έχουμε δημιουργήσει ένα ξένο κλειδί με το όνομα fkey_student_admission στον πίνακα του τμήματος. Αυτό το ξένο κλειδί αναφέρεται στη στήλη αποδοχής του πίνακα μαθητών.
Παράδειγμα ερωτήματος Ξένο ΚΛΕΙΔΙ
Αρχικά, ας δούμε τα Δεδομένα Γονικού Πίνακα, ΠΟΡΕΙΑ.
Ερώτηση:
SELECT * from COURSE;
Τώρα ας εισαγάγουμε μια σειρά στον πίνακα Child: 'Course_Strength_TSQL.'
Θα προσπαθήσουμε να εισαγάγουμε δύο τύπους σειρών
- Ο πρώτος τύπος, για τον οποίο το Course_Id στον θυγατρικό πίνακα θα υπάρχει στο Course_Id του πίνακα Parent. δηλαδή Course_Id = 1 και 2
- Ο δεύτερος τύπος, για τον οποίο το Course_Id στον θυγατρικό πίνακα δεν υπάρχει στον πίνακα Course_Id του γονικού πίνακα. δηλαδή Course_Id = 5
Ερώτηση:
Insert into COURSE_STRENGTH values (1,'SQL'); Insert into COURSE_STRENGTH values (2,'Python'); Insert into COURSE_STRENGTH values (5,'PERL');
Αποτέλεσμα: Ας εκτελέσουμε το ερώτημα μαζί για να δούμε τον πίνακα γονέων και παιδιών
Η σειρά με το Course_ID 1 και 2 υπάρχουν στον πίνακα Course_Strength. Ενώ, το Course_ID 5 αποτελεί εξαίρεση.
Σύνοψη
- Κάθε τιμή του ξένου κλειδιού πρέπει να αποτελεί μέρος του Πρωτεύων κλειδί άλλων τραπεζιών.
- The MySQL Το ξένο κλειδί μπορεί να αναφέρεται σε άλλη στήλη στον ίδιο πίνακα. Αυτή η αναφορά είναι γνωστή ως αυτοαναφορά.
- Περιορισμός ξένου κλειδιού SQL : χρησιμοποιείται για τη διασφάλιση των συνδέσεων μεταξύ πινάκων και μη έγκυρων δεδομένων που πρόκειται να εισαχθούν στη στήλη Ξένου κλειδιού.
- Μπορείτε να δημιουργήσετε ένα ξένο κλειδί χρησιμοποιώντας Δημιουργία πίνακα, Αλλαγή πίνακα ή Στούντιο διαχείρισης διακομιστή SQL.
- Εδώ είναι η διαφορά μεταξύ Πρωτεύοντος Κλειδιού έναντι Ξένου κλειδιού: Click Here