Κάθε προγραμματιστής που έπρεπε να εργαστεί με βάσεις δεδομένων συναντήθηκε με χειριστές DML (ανά. από τα Αγγλικά - "γλώσσα χειρισμού δεδομένων") όπως Επιλέγω, Εισάγετε, Διαγράφω και Εκσυγχρονίζω. Το περιβάλλον MySQL χρησιμοποιεί επίσης όλες τις παραπάνω εντολές στο οπλοστάσιό του.
Αυτοί οι χειριστές μιλούν λογικά για τουςανάθεση - επιλογή εγγραφών, εισαγωγή νέων τιμών, ενημέρωση υπαρχόντων δεδομένων, πλήρης ή σύμφωνα με καθορισμένες συνθήκες, διαγραφή πληροφοριών στη βάση δεδομένων. Στο εκπαιδευτικό θεωρητικό υλικό, περιγράφεται λεπτομερώς η αρχή της λειτουργίας κάθε εντολής και η σύνταξή τους. Αυτό το υλικό θα αφιερωθεί στην εξέταση ορισμένων από αυτά.
Χειριστές DML με μια ματιά (Εισαγωγή)
Πριν προχωρήσουμε περαιτέρω, είναι απαραίτητο να υπενθυμίσουμε για άλλη μια φορά λεπτομερέστερα τον σκοπό κάθε μιας από τις λειτουργίες. Θα ενδιαφερόμαστε για δύο χειριστές με περισσότερες λεπτομέρειες: Εισάγετε και Εκσυγχρονίζω, δεδομένου ότι από αυτές προέρχονται οι κύριες δυσκολίες κατά την επεξεργασία μεγάλων ποσοτήτων δεδομένων.
Πρέπει να ξεκινήσετε με την εντολή Εισάγετε, και μετά πηγαίνετε ομαλά Εκσυγχρονίζω. MySQL το σύστημα, όπως οποιοδήποτε άλλο σύγχρονο DBMS, χρησιμοποιεί τη λειτουργία Εισάγετε για να προσθέσετε νέες καταχωρήσεις σε υπάρχουσεςπίνακες βάσης δεδομένων. Η σύνταξη για αυτήν τη λειτουργία είναι πολύ απλή και απλή. Περιέχει μια απαρίθμηση των πεδίων όπου θα εισαχθούν οι τιμές, τον προορισμό - το όνομα του πίνακα - και τη λίστα των ίδιων των εισαγόμενων δεδομένων. Κάθε φορά που εκτελείτε την εντολή Εισάγετε η βάση δεδομένων θα ενημερωθεί με νέες τιμές.
Ενημέρωση δήλωσης
Ωστόσο, στην πράξη, πολύ συχνά υπάρχουνκαταστάσεις που για ένα συγκεκριμένο σύνολο δεδομένων είναι απαραίτητο να ενημερώσετε μία ή περισσότερες τιμές χαρακτηριστικών. Για παράδειγμα, μπορούμε να αναφέρουμε την κατάσταση κατά την οποία η επιχείρηση υπέστη μεταρρύθμιση με την περαιτέρω μετονομασία των κύριων τμημάτων. Σε αυτήν την περίπτωση, είναι απαραίτητο να κάνετε αλλαγές για κάθε τμήμα. Εάν αλλάξουν μόνο τα ονόματα, τότε το πρόβλημα επιλύεται πολύ γρήγορα. Αλλά αν αλλάξει η κωδικοποίηση κάθε συστατικού ολόκληρης της παραγωγής, η οποία, κατά κανόνα, χρησιμεύει ως πρωτεύον κλειδί, τότε αυτό με τη σειρά του συνεπάγεται αλλαγές στις πληροφορίες και για κάθε εργαζόμενο.
Για την επίλυση του υπό εξέταση προβλήματος, μπορεί να εφαρμοστεί Χειριστής DML - Εκσυγχρονίζω. MySQL-ο διακομιστής, που λειτουργεί με μεγάλο αριθμό εγγραφών,με τη βοήθεια μιας δήλωσης ενημέρωσης, θα εκτελέσει το ζητούμενο αίτημα και θα λύσει το πρόβλημα. Αλλά μερικές φορές κατά τη διάρκεια της ενημέρωσης, προκύπτουν δυσκολίες που δεν είναι απολύτως σαφείς και δύσκολο να εξηγηθούν. Πρόκειται για τις δυσκολίες που προκαλεί η ενημέρωση των αρχείων, οι οποίες θα συζητηθούν παρακάτω.
Τι λίγα λέγονται στη θεωρία ...
Η εντολή Ενημέρωση, όπως σημειώθηκε παραπάνω,χρησιμοποιείται για την ενημέρωση υπαρχουσών εγγραφών σε έναν πίνακα. Στην πράξη, οι πελάτες που έχουν πρόσβαση σε διακομιστές βάσης δεδομένων δεν γνωρίζουν πάντα εάν υπάρχει ένα συγκεκριμένο σύνολο δεδομένων σε πίνακες ή όχι. Ένας προκαταρκτικός έλεγχος της διαθεσιμότητας δεδομένων στη βάση δεδομένων για επακόλουθες ενημερώσεις οδηγεί σε κόστος χρόνου και σπατάλη δυνατοτήτων διακομιστή.
Για να αποφευχθεί αυτό, παρέχεται μια ειδική σχεδίαση στο DBMS MySQL - Εισαγωγή * Ενημέρωσηστο οποίο μπορεί να γίνει εισαγωγή ή ενημέρωσητρέχουν ανεξάρτητα το ένα από το άλλο. Δηλαδή, όταν υπάρχει μια εγγραφή στον πίνακα για μια συγκεκριμένη κατάσταση, θα πραγματοποιηθεί μια ενημέρωση. Εάν δεν βρεθούν δεδομένα για την εν λόγω συνθήκη, ο διακομιστής MySQL θα μπορεί να εκτελέσει το αίτημα προσθήκης δεδομένων.
Ενημέρωση δεδομένων όταν υπάρχουν διπλότυπα
Ένα σημαντικό συστατικό αυτού Εισάγετε-ερώτημα στο σύστημα διαχείρισης βάσεων δεδομένων MySQL - "On Duplicate Key Update" κονσόλα. Η πλήρης σύνταξη του αιτήματος έχει ως εξής: "εισαγάγετε τις τιμές test_table (εργοδότη_όνομα, όνομα) (1, "Abramov") σε διπλή ενημέρωση κλειδιού last_modified = NOW ();".
Ένα τέτοιο αίτημα μπορεί να χρησιμοποιηθείεγγραφή ενεργειών υπαλλήλων, για παράδειγμα, προσδιορισμός του χρόνου διέλευσης του σημείου ελέγχου της επιχείρησης, ακολουθούμενη από μέτρηση του χρόνου της διακοπής και εντοπισμός καθυστερήσεων Για να μην κάνετε πολλές καταχωρήσεις στον πίνακα, αρκεί να διατηρείτε αρχεία για κάθε υπάλληλο με συνεχή ενημέρωση. Είναι ο διπλός σχεδιασμός ελέγχου που σας επιτρέπει να το κάνετε αυτό.
Στην πραγματικότητα για τα προβλήματα ...
Λαμβάνοντας υπόψη το παραπάνω παράδειγμα καταχώρησης των ενεργειών των υπαλλήλων στο σημείο ελέγχου, η χρήση αυτο-αυξανόμενης (αυτο_αύξηση) πεδία που χρησιμοποιούνται συνήθως για τη συμπλήρωση βασικών τιμών κλειδιώνπρωταρχικός_κλειδί). Όταν χρησιμοποιείτε την εντολή Ενημέρωση MySQL σε κατασκευή με Εισάγετε αυτο_αύξηση, τα χωράφια αυξάνονται συνεχώς.
Ομοίως, όλα συμβαίνουν ότανχρησιμοποιείται αντικατάσταση κατασκευάσματος εάν βρεθούν διπλότυπα. Η τιμή "αυτόματης αύξησης" αυξάνεται ακόμη και όταν δεν είναι απαραίτητη. Εξαιτίας αυτού, υπάρχουν προβλήματα με τις ελλείπουσες τιμές ή την υπερχείλιση ενός εύρους, που στη συνέχεια οδηγούν σε δυσλειτουργίες των συστημάτων διαχείρισης βάσεων δεδομένων.
Πιθανότατα να προκαλέσει πρόβλημα
Το περιγραφέν πρόβλημα πρέπει να ληφθεί υπόψη Ιστός- προγραμματιστές, καθώς είναι πιο συνηθισμένο σε συστήματα πολλαπλών χρηστών (ιστότοποι Διαδικτύου, πύλες κ.λπ.), όταν εκτελείται μεγάλος αριθμός διαδικασιών στο σύστημα Εισάγετε και Ενημέρωση MySQL.
PHP-Η βάση δεδομένων έχει πρόσβαση πολύ συχνά. Επομένως, η επίτευξη της μέγιστης τιμής από τα πεδία που ορίζονται ως αυτόματη αύξηση, συμβαίνει γρήγορα, και κατά την ανάλυση των δυσκολιών που έχουν προκύψει, δεν θα είναι δυνατό να προσδιοριστούν αμέσως οι λόγοι.
Επομένως, συνιστάται στους προγραμματιστές να προσεγγίσουν προσεκτικά τη χρήση της κατασκευής σε διπλό κλειδί σε μία ομάδα ενημέρωση mysql. επιλέξτε - ερωτήματα κατά την πρόσβαση στο διακομιστή βάσης δεδομένωνθα λειτουργήσει χωρίς σφάλματα, αλλά η προσθήκη νέων εγγραφών στη βάση δεδομένων είναι γεμάτη με δυσάρεστες καταστάσεις, οι οποίες στη συνέχεια οδηγούν σε σοβαρά προβλήματα. Εναλλακτικά, συνιστάται στα πεδία αυτόματης αύξησης να ελέγχουν αρχικά την ύπαρξη εγγραφών για αυτά και, στη συνέχεια, να τα ενημερώνουν.