Πώς να χρησιμοποιήσετε τους περιορισμούς ξένων κλειδιών MySQL

How Use Mysql Foreign Key Constraints



Ο περιορισμός ξένου κλειδιού χρησιμοποιείται για τη δημιουργία σχέσης μεταξύ δύο πινάκων στη βάση δεδομένων MySQL. Είναι ένα πολύ σημαντικό χαρακτηριστικό της MySQL να ορίσει διαφορετικούς τύπους περιορισμών στους σχετικούς πίνακες. Για να ορίσετε οποιονδήποτε περιορισμό ξένου κλειδιού για οποιονδήποτε πίνακα, πρέπει να χρησιμοποιήσετε το κύριο κλειδί ενός άλλου πίνακα. Το πρωτεύον κλειδί είναι ένα μοναδικό κλειδί για έναν πίνακα για τον προσδιορισμό της συγκεκριμένης σειράς στον πίνακα και όταν αυτό το πρωτεύον κλειδί χρησιμοποιείται σε έναν άλλο πίνακα για τη δημιουργία σχέσης ένα προς ένα ή ένα προς πολλά ή πολλά προς πολλά, τότε ονομάζεται ξένο κλειδί. Οι δυνατότητες των ξένων κλειδιών και ο τρόπος χρήσης αυτών των κλειδιών στους πίνακες MySQL εμφανίζονται σε αυτό το άρθρο.

Χαρακτηριστικά των περιορισμών του εξωτερικού κλειδιού:

Μερικά σημαντικά χαρακτηριστικά των περιορισμών του εξωτερικού εξηγούνται παρακάτω.







  • Ο τύπος δεδομένων του ξένου κλειδιού που χρησιμοποιείται στον θυγατρικό πίνακα πρέπει να είναι ο ίδιος με τον τύπο δεδομένων του κύριου κλειδιού που χρησιμοποιείται στον γονικό πίνακα για να παραπέμψει το ξένο κλειδί.
  • Οποιαδήποτε στήλη ευρετηρίου ή πολλαπλές στήλες μπορεί να αναφέρεται ως ξένο κλειδί μόνο για τον πίνακα InnoDB.
  • Για τη δημιουργία ξένου κλειδιού απαιτούνται δικαιώματα αναφοράς ή τουλάχιστον ένα από τα προνόμια των δηλώσεων SELECT, INSERT, UPDATE και DELETE.
  • Ένα ξένο κλειδί μπορεί να δημιουργηθεί με δύο τρόπους. Ένα χρησιμοποιώντας τη δήλωση ΔΗΜΙΟΥΡΓΙΑ και ένα άλλο χρησιμοποιώντας τη δήλωση ALTER.

Προαπαιτούμενο:

Πριν δημιουργήσετε έναν περιορισμό ξένου κλειδιού, πρέπει να δημιουργήσετε μια βάση δεδομένων και έναν μητρικό πίνακα με το κύριο κλειδί. Ας υποθέσουμε ότι το όνομα της βάσης δεδομένων είναι « βιβλιοθήκη »Και περιέχει δύο γονικούς πίνακες με το όνομα« βιβλία ' και ' οφειλέτης ’. Δημιουργήστε μια σύνδεση με τον διακομιστή MySQL χρησιμοποιώντας το mysql πελάτη και εκτελέστε τις ακόλουθες προτάσεις SQL για να δημιουργήσετε τη βάση δεδομένων και τους πίνακες.



ΔΗΜΙΟΥΡΓΩ ΒΑΣΗ ΔΕΔΟΜΕΝΩΝ βιβλιοθήκη?
ΧΡΗΣΗ βιβλιοθήκη?

ΔΗΜΙΟΥΡΓΩ ΤΡΑΠΕΖΙ βιβλία(
ταυτότητα INT ΔΕΝ ΜΗΔΕΝΙΚΟ ΑΥΤΟΜΑΤΗ ΑΥΞΗΣΗ ,
τίτλος varchar (πενήντα) ΔΕΝ ΜΗΔΕΝΙΚΟ ,
συγγραφέας varchar (πενήντα) ΔΕΝ ΜΗΔΕΝΙΚΟ ,
εκδότης varchar (πενήντα) ΔΕΝ ΜΗΔΕΝΙΚΟ ,
ΠΡΩΤΕΥΩΝ ΚΛΕΙΔΙ (ταυτότητα)
) ΜΗΧΑΝΗ = INNODB ?

ΔΗΜΙΟΥΡΓΩ ΤΡΑΠΕΖΙ δανειολήπτες(
ταυτότητα VARCHAR (πενήντα) ΔΕΝ ΜΗΔΕΝΙΚΟ ,
όνομα varchar (πενήντα) ΔΕΝ ΜΗΔΕΝΙΚΟ ,
διεύθυνση varchar (πενήντα) ΔΕΝ ΜΗΔΕΝΙΚΟ ,
ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ varchar (πενήντα) ΔΕΝ ΜΗΔΕΝΙΚΟ ,
ΠΡΩΤΕΥΩΝ ΚΛΕΙΔΙ (ταυτότητα)
) ΜΗΧΑΝΗ = INNODB ?



Ορίστε περιορισμό εξωτερικού κλειδιού χρησιμοποιώντας τη δήλωση ΔΗΜΙΟΥΡΓΙΑ

Δημιουργήστε έναν πίνακα με το όνομα « book_borrow_info «Με ξένους βασικούς περιορισμούς εκτελώντας την ακόλουθη δήλωση. Εδώ, το book_id πεδίο είναι α ξένο κλειδί για αυτόν τον πίνακα και κάθε τιμή αυτού του πεδίου πρέπει να υπάρχει στο ταυτότητα πεδίο του βιβλία τραπέζι. βιβλία είναι ο γονικός πίνακας και book_borrow_info είναι το παιδικό τραπέζι. Δύο περιορισμοί τίθενται επίσης με το ξένο κλειδί εδώ. Αυτά είναι ΔΙΑΓΡΑΦΗ CASCADE και ΕΝΗΜΕΡΩΣΗ CASCADE Το Αυτό σημαίνει ότι εάν κάποιο κύριο κλειδί αφαιρέσει ή ενημερώσει από τον γονικό πίνακα, τότε οι αντίστοιχες εγγραφές που σχετίζονται με τον θυγατρικό πίνακα που σχετίζονται με το ξένο κλειδί θα καταργηθούν ή το εξωτερικό κλειδί θα ενημερωθεί.





ΔΗΜΙΟΥΡΓΩ ΤΡΑΠΕΖΙ book_borrow_info(
δανεισμός_id VARCHAR (πενήντα),
book_id INT ,
δανεισμός_ημερομηνία ΗΜΕΡΟΜΗΝΙΑ ΔΕΝ ΜΗΔΕΝΙΚΟ ,
ημερομηνία επιστροφής ΗΜΕΡΟΜΗΝΙΑ ΔΕΝ ΜΗΔΕΝΙΚΟ ,
κατάσταση VARCHAR (δεκαπέντε) ΔΕΝ ΜΗΔΕΝΙΚΟ ,
ΔΕΙΚΤΗΣ par_ind(book_id),
ΠΡΩΤΕΥΩΝ ΚΛΕΙΔΙ (δανεισμός_id,δανεισμός_ημερομηνία),
ΞΕΝΟ ΚΛΕΙΔΙ (book_id) ΒΙΒΛΙΟΓΡΑΦΙΚΕΣ ΑΝΑΦΟΡΕΣ βιβλία(ταυτότητα)
ΕΠΙ ΔΙΑΓΡΑΦΩ ΑΛΛΗΛΟΥΧΙΑ
ΕΠΙ ΕΚΣΥΓΧΡΟΝΙΖΩ ΑΛΛΗΛΟΥΧΙΑ
) ΜΗΧΑΝΗ = INNODB ?

Τώρα, εκτελέστε τις ακόλουθες προτάσεις SQL για να εισαγάγετε μερικές εγγραφές και στους δύο πίνακες. Η πρώτη δήλωση INSERT θα εισαγάγει τέσσερις εγγραφές βιβλία τραπέζι. Οι τέσσερις τιμές του ταυτότητα πεδίο του βιβλία Ο πίνακας θα είναι 1, 2, 3 και 4 για το χαρακτηριστικό αυτόματης αύξησης. Η δεύτερη δήλωση INSERT θα εισαγάγει τέσσερις εγγραφές book_borrow_info βασισμένο στο ταυτότητα αξία του βιβλία τραπέζι.



ΕΙΣΑΓΕΤΕ ΣΕ βιβλία ΑΞΙΕΣ
( ΜΗΔΕΝΙΚΟ , «To Kill a Mockingbird», «Χάρπερ Λι», «Grand Central Publishing»),
( ΜΗΔΕΝΙΚΟ , «Εκατό χρόνια μοναξιάς», «Γκαρσία Μάρκες», «Λούτφι Οζκόκ»),
( ΜΗΔΕΝΙΚΟ , «Ένα πέρασμα στην Ινδία», «Φόρστερ, Ε.Μ.», 'BBC Hulton Picture Library'),
( ΜΗΔΕΝΙΚΟ , 'Αόρατος άνθρωπος', «Ραλφ Έλισον», 'Encyclopædia Britannica, Inc.')?

ΕΙΣΑΓΕΤΕ ΣΕ book_borrow_info ΑΞΙΕΣ
('123490', 1, «2020-02-15», «2020-02-25», 'Επέστρεψαν'),
('157643', 2, '2020-03-31', '2020-03-10', 'Εκκρεμής'),
('174562', 4, '2020-04-04', '2020-04-24', «Δανεικός»),
('146788', 3, «2020-04-10», «2020-01-20», «Δανεικός»)?

Εάν προσπαθήσετε να εισαγάγετε μια τιμή στο ξένο κλειδί του θυγατρικού πίνακα που δεν υπάρχει στο κύριο πεδίο κλειδιού του γονικού πίνακα, τότε η MySQL θα δημιουργήσει ένα σφάλμα. Η ακόλουθη πρόταση SQL θα δημιουργήσει σφάλμα επειδή ο γονικός πίνακας, βιβλία δεν περιέχει καμία τιμή ταυτότητας 10 Το

ΕΙΣΑΓΕΤΕ ΣΕ book_borrow_info ΑΞΙΕΣ
('195684', 10, «2020-04-15», '2020-04-30', 'Επέστρεψαν')?

Αφού εκτελέσετε την ακόλουθη δήλωση ΔΙΑΓΡΑΦΗ, πότε η τέταρτη εγγραφή θα αφαιρεθεί από το βιβλία πίνακα τότε οι σχετικές εγγραφές από το book_borrow_info Ο πίνακας θα αφαιρεθεί αυτόματα για τον περιορισμό του ξένου κλειδιού.

ΔΙΑΓΡΑΦΩ ΑΠΟ βιβλία ΟΠΟΥ ταυτότητα= 4?
ΕΠΙΛΕΓΩ * από βιβλία?
ΕΠΙΛΕΓΩ * από book_borrow_info?

Ορίστε περιορισμό εξωτερικού κλειδιού χρησιμοποιώντας τη δήλωση ALTER

Αρχικά, εισάγετε μερικές εγγραφές δανειολήπτες πίνακα και αυτός ο πίνακας θα οριστεί ως γονικός πίνακας στον επόμενο ΗΛΙΚΙΑ δήλωση.

ΕΙΣΑΓΕΤΕ ΣΕ δανειολήπτες ΑΞΙΕΣ
('123490', 'Πάτρικ Γουντ', '34 West Street LANCASTER LA14 9ZH ', '[email protected]'),
('157643', «Έζρα Μάρτιν», '10 The Grove BIRMINGHAM B98 1EU ', '[email protected]'),
('174562', 'John Innes Archie', '55 Main Road LIVERPOOL L2 3OD ', '[email protected]'),
('146788', «Φρέντερικ Χάνσον», '85 Highfield Road SHREWSBURY SY46 3ME ', '[email protected]')?

Εκτελέστε το παρακάτω ΗΛΙΚΙΑ δήλωση για να θέσετε έναν άλλο περιορισμό κλειδιού για το εξωτερικό book_borrow_info τραπέζι για να δημιουργήσετε τη σχέση δανειολήπτες τραπέζι. Εδώ, δανεισμός_id ορίζεται ως ξένο κλειδί για book_borrow_info τραπέζι.

ΑΛΛΑΓΗ ΠΙΝΑΚΑΣ book_borrow_info ΠΡΟΣΘΗΚΗ ΑΝΤΙΠΡΟΣΩΠΕΙΑ fk_borrower
ΞΕΝΟ ΚΛΕΙΔΙ(δανεισμός_id)ΑΝΑΦΟΡΕΣ δανειολήπτες(ταυτότητα)ΣΤΗ ΔΙΑΓΡΑΦΗ CASCADE ΣΕ ΕΝΗΜΕΡΩΣΗ ΠΕΡΙΟΡΙΣΜΟΥ.

Τώρα, εισαγάγετε μια εγγραφή στο book_borrow_info με έγκυρο δανεισμός_id αξία που υπάρχει στο ταυτότητα πεδίο του δανειολήπτες τραπέζι. 157643 υπάρχει αξία στον πίνακα δανειοληπτών και η ακόλουθη κατάσταση INSERT θα εκτελεστεί με επιτυχία.

ΕΙΣΑΓΕΤΕ ΣΕ book_borrow_info ΑΞΙΕΣ
('157643', 1, '2020-03-10', «2020-03-20», 'Επέστρεψαν')?

Η ακόλουθη δήλωση INSERT θα δημιουργήσει ένα μήνυμα σφάλματος επειδή η τιμή id 195680 δεν υπάρχει στον πίνακα δανειοληπτών.

ΕΙΣΑΓΕΤΕ ΣΕ book_borrow_info ΑΞΙΕΣ
('195680', 1, «2020-04-15», '2020-04-30', 'Επέστρεψαν')?

Συμπέρασμα:

Ο σωστός καθορισμός περιορισμών ξένων κλειδιών είναι ένα πολύ σημαντικό έργο για τη δημιουργία μιας σχεσιακής βάσης δεδομένων και τη σωστή διαχείριση δεδομένων μεταξύ των πινάκων. Η γνώση των χρήσεων ξένων βασικών περιορισμών είναι πολύ σημαντική για τους σχεδιαστές βάσεων δεδομένων. Ελπίζω ότι αυτό το άρθρο θα βοηθήσει τους νέους σχεδιαστές βάσεων δεδομένων να κατανοήσουν την έννοια των ξένων βασικών περιορισμών και να τους εφαρμόσουν σωστά στις εργασίες τους.