SQL ΞΕΝΟ ΚΛΕΙΔΙ: Πώς να δημιουργήσετε στον SQL Server με Παράδειγμα

Τι είναι το Ξένο ΚΛΕΙΔΙ;

A Ξένο κλειδί παρέχει έναν τρόπο επιβολής της ακεραιότητας αναφοράς στον SQL Server. Με απλά λόγια, το ξένο κλειδί διασφαλίζει ότι οι τιμές σε έναν πίνακα πρέπει να υπάρχουν σε έναν άλλο πίνακα.

Κανόνες για ΞΕΝΟ ΚΛΕΙΔΙ

  • Το NULL επιτρέπεται στο ξένο κλειδί SQL.
  • Ο πίνακας που αναφέρεται ονομάζεται Γονικός πίνακας
  • Ο πίνακας με το ξένο κλειδί στην SQL ονομάζεται Child Table.
  • Το ξένο κλειδί SQL στον θυγατρικό πίνακα αναφέρεται στο πρωτεύον κλειδί στον γονικό πίνακα.
  • Αυτή η σχέση γονέα-παιδιού επιβάλλει τον κανόνα που είναι γνωστός ως «Αναφορική Integrity. "

Το παρακάτω παράδειγμα ξένου κλειδιού στην SQL με διάγραμμα συνοψίζει όλα τα παραπάνω σημεία για το ΞΕΝΟ ΚΛΕΙΔΙ

Κανόνες για ΞΕΝΟ ΚΛΕΙΔΙ στην SQL
Πώς λειτουργεί το ξένο κλειδί

Πώς να δημιουργήσετε ΞΕΝΟ ΚΛΕΙΔΙ σε SQL

Μπορούμε να δημιουργήσουμε ένα Ξένο κλειδί στον διακομιστή SQL στο 2 τρόποι:

  1. Στούντιο διαχείρισης διακομιστή SQL
  2. T-sql

Στούντιο διαχείρισης διακομιστή SQL

Γονικός πίνακας: Ας πούμε, έχουμε έναν υπάρχοντα πίνακα Γονέα ως "Μάθημα". Το Course_ID και το Course_name είναι δύο στήλες με το Course_Id ως πρωτεύον κλειδί.

Δημιουργήστε ΞΕΝΟ ΚΛΕΙΔΙ σε SQL

Παιδικό τραπέζι: Πρέπει να δημιουργήσουμε τον δεύτερο πίνακα ως παιδικό τραπέζι. "Course_ID" και "Course_Strength" ως δύο στήλες. Ωστόσο, το «Course_ID» θα είναι Ξένο κλειδί.

Βήμα 1) Κάντε δεξί κλικ στο Tables>New> Table…

Δημιουργήστε ΞΕΝΟ ΚΛΕΙΔΙ σε SQL

Βήμα 2) Εισαγάγετε το όνομα δύο στηλών ως "Course_ID" και "Course_Strength". Κάντε δεξί κλικ στη στήλη 'Course_Id'. Τώρα κάντε κλικ στο Σχέση.

Δημιουργήστε ΞΕΝΟ ΚΛΕΙΔΙ σε SQL

Βήμα 3) In «Σχέση με το εξωτερικό κλειδί,' Κάντε κλικ 'Προσθήκη'

Δημιουργήστε ΞΕΝΟ ΚΛΕΙΔΙ σε SQL

Βήμα 4) Στο «Πίνακας και Προδιαγραφές στήλης» κάντε κλικ στο εικονίδιο «…».

Δημιουργήστε ΞΕΝΟ ΚΛΕΙΔΙ σε SQL

Βήμα 5) Επιλέξτε «Πίνακας Πρωτεύοντος Κλειδιού» ως «ΜΑΘΗΜΑ» και ο νέος πίνακας που δημιουργείται τώρα ως «Πίνακας ξένων κλειδιών» από το αναπτυσσόμενο μενού.

Δημιουργήστε ΞΕΝΟ ΚΛΕΙΔΙ σε SQL

Βήμα 6) «Πίνακας πρωτεύοντος κλειδιού» – Επιλέξτε τη στήλη «Αναγνωριστικό_μαθήματος» ως στήλη «Πίνακας κύριου κλειδιού».

"Πίνακας ξένων κλειδιών"- Επιλέξτε τη στήλη "Αναγνωριστικό_μαθήματος" ως στήλη "Πίνακας ξένων κλειδιών". Κάντε κλικ στο OK.

Δημιουργήστε ΞΕΝΟ ΚΛΕΙΔΙ σε SQL

Βήμα 7) Κάντε κλικ στο Προσθήκη.

Δημιουργήστε ΞΕΝΟ ΚΛΕΙΔΙ σε SQL

Βήμα 8) Δώστε το όνομα του πίνακα ως 'Course_Strength' και κάντε κλικ στο Εντάξει.

Δημιουργήστε ΞΕΝΟ ΚΛΕΙΔΙ σε SQL

Αποτέλεσμα: Έχουμε ορίσει τη σχέση γονέα-παιδιού μεταξύ 'Σειρά μαθημάτων' και "Δύναμη_μαθήματος".

Δημιουργήστε ΞΕΝΟ ΚΛΕΙΔΙ σε SQL

T-SQL: Δημιουργήστε έναν πίνακα Parent-child χρησιμοποιώντας T-SQL

Γονικός πίνακας: Επανεξετάστε, έχουμε έναν υπάρχοντα Γονικό πίνακα με όνομα πίνακα ως "Μάθημα".

Το Course_ID και το Course_name είναι δύο στήλες με το Course_Id ως πρωτεύον κλειδί.

Δημιουργήστε έναν πίνακα γονέα-παιδιού χρησιμοποιώντας την T-SQL

Παιδικό τραπέζι: Πρέπει να δημιουργήσουμε τον δεύτερο πίνακα ως θυγατρικό πίνακα με το όνομα "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.

Ξένο κλειδί σε SQL

Αποτέλεσμα: Έχουμε ορίσει τη σχέση γονέα-παιδιού μεταξύ 'Σειρά μαθημάτων' και 'Course_Strength_TSQL.'

Ξένο κλειδί σε SQL

Χρήση 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.'

Θα προσπαθήσουμε να εισαγάγουμε δύο τύπους σειρών

  1. Ο πρώτος τύπος, για τον οποίο το Course_Id στον θυγατρικό πίνακα θα υπάρχει στο Course_Id του πίνακα Parent. δηλαδή Course_Id = 1 και 2
  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