Γλώσσα προγραμματισμού SQL. SQL "για ανδρείκελα": τι πρέπει να γνωρίζουν οι αρχάριοι; Εκμάθηση απλών ερωτημάτων σε sql

Τα θεωρητικά θεμέλια του DBMS του SQL Server 2012 εξετάζονται με απλό και προσιτό τρόπο. Εμφανίζονται η εγκατάσταση, η διαμόρφωση και η υποστήριξη του MS SQL Server 2012. Περιγράφεται η γλώσσα χειρισμού δεδομένων Transact-SQL. Εξετάστηκε το ενδεχόμενο δημιουργίας βάσης δεδομένων, τροποποίησης πινάκων και των περιεχομένων τους, ερωτημάτων, ευρετηρίων, προβολών, ενεργοποιήσεων, αποθηκευμένων διαδικασιών και συναρτήσεων που καθορίζονται από τον χρήστη.
Εμφανίζεται η εφαρμογή της ασφάλειας με χρήση ελέγχου ταυτότητας, κρυπτογράφησης και εξουσιοδότησης. Δίνεται προσοχή στην αυτοματοποίηση των εργασιών διαχείρισης DBMS. Εξετάζεται η δημιουργία αντιγράφων ασφαλείας δεδομένων και η εφαρμογή ανάκτησης συστήματος. Περιγράφει τις Υπηρεσίες ανάλυσης της Microsoft, τις Υπηρεσίες αναφοράς της Microsoft και άλλα εργαλεία επιχειρηματικής ευφυΐας. Εξετάζεται η τεχνολογία εργασίας με έγγραφα XML, η διαχείριση χωρικών δεδομένων, η αναζήτηση πλήρους κειμένου και πολλά άλλα. Για αρχάριους προγραμματιστές.

Στον σύγχρονο κόσμο, οι πληροφορίες είναι υψίστης αξίας, αλλά είναι εξίσου σημαντικό να μπορούμε να διαχειριζόμαστε αυτές τις πληροφορίες. Αυτό το βιβλίο αφορά τη γλώσσα ερωτημάτων SQL και τη διαχείριση της βάσης δεδομένων. Το υλικό παρουσιάζεται ξεκινώντας με την περιγραφή βασικών ερωτημάτων και τελειώνοντας με σύνθετους χειρισμούς χρησιμοποιώντας συνδέσεις, υποερωτήματα και συναλλαγές. Εάν προσπαθείτε να κατανοήσετε την οργάνωση και τη διαχείριση των βάσεων δεδομένων, αυτό το βιβλίο θα είναι ένας εξαιρετικός πρακτικός οδηγός και θα σας παρέχει τα πάντα απαραίτητα εργαλεία. Ένα χαρακτηριστικό αυτής της έκδοσης είναι ο μοναδικός τρόπος παρουσίασης του υλικού, που ξεχωρίζει τη σειρά O\'Reilly's Head First από μια σειρά βαρετών βιβλίων προγραμματισμού.

Αυτό το βιβλίο θα σας διδάξει πώς να εργάζεστε με εντολές και δηλώσεις SQL, να δημιουργείτε και να διαμορφώνετε σχεσιακές βάσεις δεδομένων, να φορτώνετε και να τροποποιείτε αντικείμενα βάσης δεδομένων, να εκτελείτε ισχυρά ερωτήματα, να βελτιώνετε την απόδοση και να δημιουργείτε ασφάλεια. Θα μάθετε πώς να χρησιμοποιείτε δηλώσεις DDL και να εφαρμόζετε API, να ενσωματώνετε σενάρια XML και Java, να χρησιμοποιείτε αντικείμενα SQL, να δημιουργείτε διακομιστές ιστού, να εργάζεστε με απομακρυσμένη πρόσβαση και να εκτελείτε κατανεμημένες συναλλαγές.
Σε αυτό το βιβλίο, θα βρείτε πληροφορίες όπως περιγραφές εργασίας με βάσεις δεδομένων στη μνήμη, ροή και ενσωματωμένες βάσεις δεδομένων, βάσεις δεδομένων για κινητές συσκευές και συσκευές χειρός και πολλά άλλα.

Η SQL for Mortals είναι μια πλήρης εισαγωγή στη δομημένη γλώσσα ερωτημάτων που γράφτηκε ειδικά για αρχάριους.

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

- Κατανόηση της έννοιας των εννοιών διαχείρισης βάσεων δεδομένων με μια συνοπτική και απλή εισαγωγή στις σχεσιακές βάσεις δεδομένων.
— Ακολουθήστε αυτές τις οδηγίες για τη χρήση βασικών εντολών SQL για να βρείτε και να εργαστείτε με πληροφορίες που βρίσκονται σε πίνακες δεδομένων. Μάθετε πώς να επιλέγετε και να συνοψίζετε δεδομένα, καθώς και να τα διαχειρίζεστε επιδέξια.
- Εργαστείτε αποτελεσματικά με σύνθετους πίνακες δεδομένων, εφαρμόζοντας προηγμένες τεχνικές ερωτημάτων σε περισσότερους από έναν πίνακες ταυτόχρονα, δημιουργώντας σύνθετα ερωτήματα και υποερωτήματα.
- Δημιουργήστε νέους πίνακες δεδομένων για εφαρμογές επιχειρήσεων λιανικής. Μάθετε τις σημαντικές αρχές του αποτελεσματικού σχεδιασμού της βάσης δεδομένων και τις τεχνικές για τη διασφάλιση της ακεραιότητας και της προστασίας των δεδομένων.
- Μάθετε να χρησιμοποιείτε την SQL με γλώσσες προγραμματισμού χρησιμοποιώντας ένα ειδικό κεφάλαιο για προγραμματιστές.

Η SQL είναι παλαιότερη από τους περισσότερους από εμάς, επομένως δεν μπορώ να ισχυριστώ ότι μεταφέρω μερικά εξαιρετικά πράγματα μέσω αυτού του βιβλίου. Αυτό που κάνει αυτόν τον τίτλο μοναδικό είναι το λεπτό μέγεθός του. Αν ψάχνετε για έναν πραγματικό συμπαγή πρακτικό οδηγό για την SQL, τότε αυτό το βιβλίο είναι για εσάς. Για αρχάριους, προσπάθησα να περιορίσω έναν ωκεανό σε έναν κουβά για να τους εξοπλίσω με γνώσεις SQL στο συντομότερο δυνατό χρόνο. Η γλώσσα SQL είναι πολύ ογκώδης και η έκθεση κάθε πτυχής αυτής της τεράστιας γλώσσας είναι μια πολύ κουραστική εργασία. Κρατώντας κατά μέρος τα λιγότερο χρησιμοποιούμενα χαρακτηριστικά, αυτό το βιβλίο κυκλοφορεί για να επικεντρωθεί στους πιο λειτουργικούς τομείς της γλώσσας. Σκοπός του είναι να σας βοηθήσει να μάθετε γρήγορα την SQL μόνοι σας. Ακολουθεί μια εκπαιδευτική προσέγγιση ενώ παρέχονται εκατοντάδες πρακτικές ασκήσεις, επαυξημένες με εικόνες, για να σας διδάξουν την SQL σε σύντομο χρονικό διάστημα. Χωρίς καμία υπερβολή, το βιβλίο θα εκθέσει την SQL σε χρόνο ρεκόρ. Το βιβλίο καλύπτει ρητά μια δωρεάν πλατφόρμα του νούμερο 1 DBMS στον κόσμο για την έκθεση του SQL: Oracle Database Express Edition. Επέλεξα το Oracle XE επειδή είναι δωρεάν για ανάπτυξη, ανάπτυξη και διανομή. γρήγορη λήψη? και απλό στη διαχείριση.

Ξεκινώντας το Oracle PL/SQL σας κάνει να ξεκινήσετε να χρησιμοποιείτε την ενσωματωμένη γλώσσα που πρέπει να γνωρίζει κάθε προγραμματιστής Oracle και διαχειριστής βάσης δεδομένων. Η Oracle Database είναι γεμάτη από ενσωματωμένες λειτουργίες εφαρμογών που είναι δωρεάν για χρήση και η PL/SQL είναι το εισιτήριό σας για να μάθετε και να χρησιμοποιείτε αυτές τις δυνατότητες από τον δικό σας κώδικα. Με αυτό, μπορείςσυγκεντρώνετε την επιχειρησιακή λογική στη βάση δεδομένων, μπορείτε να αποφορτώσετε τη λογική της εφαρμογής και μπορείτε να αυτοματοποιήσετε εργασίες διαχείρισης βάσεων δεδομένων και εφαρμογών.

Ο συγγραφέας Don Bales παρέχει στο Beginning Oracle PL/SQL ένα γρήγορο και γεμάτο παραδείγματα. Μάθετε από την εκτεταμένη εμπειρία του Don για να ανακαλύψετε τις πιο συχνά χρησιμοποιούμενες πτυχές του PL/SQL, χωρίς να χάνετε χρόνο σε ασαφείς και απαρχαιωμένες λειτουργίες.

Το βιβλίο «SQL. Η Βίβλος του χρήστη είναι μοναδική στο ότι κάθε κεφάλαιο συγκρίνει τις υλοποιήσεις του προτύπου γλώσσας ερωτημάτων SQL στα τρία κορυφαία DBMS. Το αποτέλεσμα είναι μια περιεκτική και πρακτική αναφορά για χρήστες βάσης δεδομένων, από αρχάριους έως επαγγελματίες. Αυτό το βιβλίο για την SQL συνδυάζει βολικά τη θεωρία με την πρακτική, περιέχει μια περιγραφή νέων τεχνολογιών και θα σας επιτρέψει να κατανοήσετε τις πολυάριθμες αποχρώσεις του προτύπου γλώσσας ερωτημάτων SQL και τις υλοποιήσεις του. Μπορεί να χρησιμοποιηθεί ως αναφορά - ένα είδος εγχειριδίου επιτραπέζιου υπολογιστή.
— Μάθετε τα βασικά της γλώσσας ερωτημάτων SQL και των σχεσιακών βάσεων δεδομένων
- Μάθετε να εργάζεστε με πίνακες, προβολές, ακολουθίες και άλλα αντικείμενα βάσης δεδομένων
- Μάθετε πώς να εφαρμόζετε συναλλαγές και κλειδώματα σε περιβάλλον πολλών χρηστών
- Γνωρίστε τις δυνατότητες που προσφέρει το πρότυπο SQL και τρεις κορυφαίοι προμηθευτές βάσεων δεδομένων
- Μάθετε πώς να αποκτάτε πρόσβαση στα μεταδεδομένα και να εφαρμόζετε την ασφάλεια της βάσης δεδομένων
- Εξερευνήστε πρόσθετα θέματα: ενσωμάτωση SQL σε XML, επιχειρηματική ευφυΐα OLAP και πολλά άλλα

Εάν έχετε βασικές δεξιότητες HTML, τότε με τη βοήθεια του βιβλίου του Robin Nixon, ενός έμπειρου προγραμματιστή και συγγραφέα πολλών βιβλίων web mastering με τις μεγαλύτερες πωλήσεις, θα μάθετε εύκολα πώς να δημιουργείτε δυναμικούς ιστότοπους που χαρακτηρίζονται από υψηλό επίπεδο αλληλεπίδρασης με τους χρήστες.
Ανακαλύψτε τον συνδυασμό PHP και MySQL, μάθετε πώς διευκολύνουν τη δημιουργία σύγχρονων ιστοσελίδων και μάθετε πώς να προσθέτετε δυνατότητες javascript σε αυτές τις τεχνολογίες, επιτρέποντάς σας να δημιουργείτε εφαρμογές υψηλής τεχνολογίας.
Αυτός ο οδηγός εξετάζει κάθε τεχνολογία ξεχωριστά, δείχνει πώς να συνδυάσετε PHP, MySQL και javascript σε ένα ενιαίο σύνολο, δίνει μια ιδέα για τις πιο σύγχρονες έννοιες προγραμματισμού Ιστού. Με λεπτομερείς περιπτωσιολογικές μελέτες και κουίζ σε κάθε κεφάλαιο, θα μπορείτε να κάνετε πράξη όσα έχετε μάθει.

Αυτός ο οδηγός θα σας βοηθήσει:
— να κατέχουν τα βασικά της PHP και του αντικειμενοστρεφούς προγραμματισμού.
- μελετήστε διεξοδικά τη MySQL, ξεκινώντας από τη δομή των βάσεων δεδομένων και τελειώνοντας με τη συλλογή σύνθετων ερωτημάτων.
- δημιουργία ιστοσελίδων που χρησιμοποιούν PHP και MySQL για να συνδυάζουν φόρμες και άλλα στοιχεία HTML.
- εκμάθηση javascript, ξεκινώντας με λειτουργίες και χειρισμό συμβάντων και τελειώνοντας με την πρόσβαση στο μοντέλο αντικειμένου εγγράφου (DOM).
— χρησιμοποιήστε βιβλιοθήκες και πακέτα λογισμικού, συμπεριλαμβανομένου του συστήματος Smarty, του αποθετηρίου λογισμικού PEAR και του Yahoo! διεπαφή χρήστη?
- πραγματοποιήστε κλήσεις Ajax και μετατρέψτε τον ιστότοπό σας σε ένα εξαιρετικά δυναμικό περιβάλλον πληροφοριών.
- ανεβάστε αρχεία και εικόνες στον ιστότοπο και εργαστείτε μαζί τους, ελέγξτε τα δεδομένα που εισάγει ο χρήστης.
- Εξασφαλίστε την ασφάλεια των εφαρμογών σας.

Τα ερωτήματα δεν εκτελούνται αρκετά γρήγορα; Αναρωτιέστε για τις δυνατότητες της βάσης δεδομένων στη μνήμη το 2014; Κουραστήκατε από τηλεφωνήματα από απογοητευμένους χρήστες; Το βιβλίο του Grant Fritchey του SQL Server Query Performance Tuning είναι η απάντηση στα προβλήματα απόδοσης ερωτημάτων του SQL Server. Το βιβλίο έχει αναθεωρηθεί για να καλύψει τις πιο πρόσφατες δυνατότητες και τεχνικές βελτιστοποίησης απόδοσης, ιδίως συμπεριλαμβανομένων των νέων χαρακτηριστικών της βάσης δεδομένων στη μνήμη που ήταν γνωστές παλαιότερα με την κωδική ονομασία Project Hekaton. Αυτό το βιβλίο παρέχει τα εργαλεία που χρειάζεστε για να προσεγγίσετε τα ερωτήματά σας έχοντας κατά νου την απόδοση.

Ο συντονισμός απόδοσης ερωτημάτων του SQL Server σάς οδηγεί στην κατανόηση των αιτιών της κακής απόδοσης, του τρόπου εντοπισμού τους και του τρόπου διόρθωσής τους. Θα μάθετε να είστε προνοητικοί στον καθορισμό βασικών γραμμών απόδοσης χρησιμοποιώντας εργαλεία όπως το Performance Monitor και τα Extended Events. Θα μάθετε να αναγνωρίζετε τα σημεία συμφόρησης και να τα εκτονώνετε πριν χτυπήσει το τηλέφωνο. Θα μάθετε επίσης μερικές γρήγορες λύσεις, αλλά η έμφαση δίνεται στο σχεδιασμό για απόδοση και στη σωστή αντιμετώπιση, καθώς και στην αντιμετώπιση του προβλήματος προτού παρουσιαστεί. Απολαύστε τους χρήστες σας. Σιγά το τηλέφωνο που χτυπάει. Εφαρμόστε σήμερα στην πράξη τις αρχές και τα διδάγματα από τον συντονισμό απόδοσης ερωτημάτων του SQL Server.

Καλύπτει τις δυνατότητες στη μνήμη από το Project Hekaton
Βοηθά στη δημιουργία βασικών γραμμών απόδοσης και στην παρακολούθηση σε σχέση με αυτές
Οδηγοί για την αντιμετώπιση προβλημάτων και την εξάλειψη των σημείων συμφόρησης που απογοήτευσαν τους χρήστες
Τι θα μάθετε
— Καθορισμός βασικών γραμμών απόδοσης και παρακολούθηση βάσει αυτών
— Αναγνωρίστε και εξαλείψτε τα σημεία συμφόρησης που οδηγούν σε αργή απόδοση
- Εφαρμόστε γρήγορες επιδιορθώσεις όταν χρειάζεται, ακολουθώντας μακροπρόθεσμες λύσεις
— Εφαρμογή βέλτιστων πρακτικών στην T-SQL, ώστε να ελαχιστοποιηθεί ο κίνδυνος απόδοσης
— Σχεδιάστε την απόδοση που χρειάζεστε μέσω προσεκτικής σχεδίασης ερωτημάτων και ευρετηρίου
— Επωφεληθείτε από τις πιο πρόσφατες δυνατότητες βελτιστοποίησης απόδοσης στον SQL Server 2014
— Κατανοήστε τις νέες δυνατότητες της βάσης δεδομένων στη μνήμη που παλαιότερα ονομάζονταν Project Hekaton

Το βιβλίο SQL σε 10 λεπτά προσφέρει απλές και πρακτικές λύσεις για όσους θέλουν να έχουν γρήγορα αποτελέσματα. Αφού επεξεργαστείτε και τα 22 μαθήματα, καθένα από τα οποία δεν θα διαρκέσει περισσότερο από 10 λεπτά, θα μάθετε όλα όσα είναι απαραίτητα για την πρακτική χρήση της SQL. Τα παραδείγματα του βιβλίου είναι κατάλληλα για IBM DB2, Microsoft Access, Microsoft SQL Server, MySQL, Oracle, PostgreSQL, SQLite, MariaDB και Apache OpenOffice Base. Ενδεικτικά παραδείγματα θα σας βοηθήσουν να κατανοήσετε πώς είναι δομημένες οι δηλώσεις SQL. Οι συμβουλές θα προκαλέσουν συντομεύσεις για λύσεις. Οι προειδοποιήσεις σας βοηθούν να αποφύγετε κοινά λάθη. Οι σημειώσεις παρέχουν περαιτέρω διευκρινίσεις.

Αυτό το σεμινάριο είναι κάτι σαν μια «σφραγίδα της μνήμης μου» στη γλώσσα SQL (DDL, DML), π.χ. Αυτές είναι πληροφορίες που έχουν συσσωρευτεί στην πορεία. επαγγελματική δραστηριότητακαι αποθηκεύεται συνεχώς στο κεφάλι μου. Αυτό είναι ένα επαρκές ελάχιστο για μένα, το οποίο χρησιμοποιείται συχνότερα όταν εργάζομαι με βάσεις δεδομένων. Εάν προκύψει η ανάγκη χρήσης πιο ολοκληρωμένων δομών SQL, τότε συνήθως απευθύνομαι στη βιβλιοθήκη MSDN που βρίσκεται στο Διαδίκτυο για βοήθεια. Κατά τη γνώμη μου, το να κρατάς τα πάντα στο μυαλό σου είναι πολύ δύσκολο και δεν υπάρχει ιδιαίτερη ανάγκη για αυτό. Όμως η γνώση των βασικών κατασκευών είναι πολύ χρήσιμη, γιατί. ισχύουν σχεδόν με την ίδια μορφή σε πολλές σχεσιακές βάσεις δεδομένων όπως Oracle, MySQL, Firebird. Οι διαφορές είναι κυρίως στους τύπους δεδομένων, οι οποίοι μπορεί να διαφέρουν σε λεπτομέρειες. Δεν υπάρχουν τόσες πολλές βασικές δομές γλώσσας SQL και με συνεχή εξάσκηση απομνημονεύονται γρήγορα. Για παράδειγμα, για να δημιουργήσετε αντικείμενα (πίνακες, περιορισμούς, ευρετήρια, κ.λπ.) αρκεί να έχετε διαθέσιμο ένα πρόγραμμα επεξεργασίας κειμένου του περιβάλλοντος (IDE) για εργασία με μια βάση δεδομένων και δεν χρειάζεται να μάθετε μια οπτική εργαλειοθήκη που εργασία με συγκεκριμένο τύπο βάσης δεδομένων (MS SQL, Oracle, MySQL, Firebird,…). Αυτό είναι επίσης βολικό επειδή ολόκληρο το κείμενο βρίσκεται μπροστά στα μάτια σας και δεν χρειάζεται να περάσετε από πολλές καρτέλες για να δημιουργήσετε, για παράδειγμα, ένα ευρετήριο ή ένα όριο. Όταν εργάζεστε συνεχώς με τη βάση δεδομένων, η δημιουργία, η τροποποίηση και ιδιαίτερα η εκ νέου δημιουργία ενός αντικειμένου χρησιμοποιώντας σενάρια είναι πολλές φορές πιο γρήγορη από ό,τι αν γίνεται σε οπτική λειτουργία. Επίσης σε λειτουργία σεναρίου (αντίστοιχα, με τη δέουσα προσοχή), είναι πιο εύκολο να ορίσετε και να ελέγξετε τους κανόνες για την ονομασία αντικειμένων (υποκειμενική μου γνώμη). Επιπλέον, τα σενάρια είναι βολικά στη χρήση όταν οι αλλαγές που γίνονται σε μια βάση δεδομένων (για παράδειγμα, μια δοκιμαστική) πρέπει να μεταφερθούν με την ίδια μορφή σε άλλη βάση δεδομένων (παραγωγική).

Η γλώσσα SQL χωρίζεται σε πολλά μέρη, εδώ θα εξετάσω τα 2 πιο σημαντικά μέρη της:
  • DML - Γλώσσα χειρισμού δεδομένων (γλώσσα χειρισμού δεδομένων), η οποία περιέχει τις ακόλουθες δομές:
    • ΕΠΙΛΟΓΗ - επιλογή δεδομένων
    • INSERT - εισαγωγή νέων δεδομένων
    • ΕΝΗΜΕΡΩΣΗ - ενημέρωση δεδομένων
    • ΔΙΑΓΡΑΦΗ - διαγραφή δεδομένων
    • MERGE - συγχώνευση δεδομένων
Επειδή Είμαι επαγγελματίας, ως εκ τούτου θα υπάρχει λίγη θεωρία σε αυτό το εγχειρίδιο και όλες οι κατασκευές θα εξηγηθούν με πρακτικά παραδείγματα. Επιπλέον, πιστεύω ότι μια γλώσσα προγραμματισμού, και ειδικά η SQL, μπορεί να κατακτηθεί μόνο στην πράξη, αγγίζοντας την μόνος σας και κατανοώντας τι συμβαίνει όταν εκτελείτε αυτήν ή την άλλη κατασκευή.

Αυτό το σεμινάριο δημιουργήθηκε με βάση την αρχή Βήμα προς Βήμα, δηλ. είναι απαραίτητο να το διαβάσετε διαδοχικά και κατά προτίμηση αμέσως μετά τα παραδείγματα. Αλλά αν στην πορεία πρέπει να μάθετε για μια εντολή με περισσότερες λεπτομέρειες, χρησιμοποιήστε μια συγκεκριμένη αναζήτηση στο Διαδίκτυο, για παράδειγμα, στη βιβλιοθήκη MSDN.

Κατά τη σύνταξη αυτού του σεμιναρίου, χρησιμοποίησα μια βάση δεδομένων MS SQL Server έκδοση 2014 και χρησιμοποίησα το MS SQL Server Management Studio (SSMS) για την εκτέλεση των σεναρίων.

Εν συντομία σχετικά με το MS SQL Server Management Studio (SSMS)

Το SQL Server Management Studio (SSMS) είναι ένα βοηθητικό πρόγραμμα για τον Microsoft SQL Server για τη ρύθμιση παραμέτρων, τη διαχείριση και τη διαχείριση στοιχείων βάσης δεδομένων. Αυτό το βοηθητικό πρόγραμμα περιέχει ένα πρόγραμμα επεξεργασίας σεναρίων (το οποίο θα χρησιμοποιήσουμε κυρίως) και ένα γραφικό πρόγραμμα που λειτουργεί με αντικείμενα και ρυθμίσεις διακομιστή. Το κύριο εργαλείο του SQL Server Management Studio είναι η Εξερεύνηση αντικειμένων, η οποία επιτρέπει στον χρήστη να προβάλλει, να ανακτά και να διαχειρίζεται αντικείμενα διακομιστή. Αυτό το κείμενο είναι εν μέρει δανεισμένο από τη Wikipedia.

Για να δημιουργήσετε ένα νέο πρόγραμμα επεξεργασίας σεναρίου, χρησιμοποιήστε το κουμπί Νέο ερώτημα:

Για να αλλάξετε την τρέχουσα βάση δεδομένων, μπορείτε να χρησιμοποιήσετε την αναπτυσσόμενη λίστα:

Για να εκτελέσετε μια συγκεκριμένη εντολή (ή ομάδα εντολών), επιλέξτε την και πατήστε το κουμπί "Εκτέλεση" ή πατήστε το πλήκτρο "F5". Εάν υπάρχει μόνο μία εντολή στο πρόγραμμα επεξεργασίας αυτή τη στιγμή ή εάν πρέπει να εκτελέσετε όλες τις εντολές, τότε δεν χρειάζεται να επιλέξετε τίποτα.

Μετά την εκτέλεση σεναρίων, ειδικά εκείνων που δημιουργούν αντικείμενα (πίνακες, στήλες, ευρετήρια), για να δείτε τις αλλαγές, χρησιμοποιήστε το Refresh από το μενού περιβάλλοντος, επισημαίνοντας την κατάλληλη ομάδα (για παράδειγμα, Πίνακες), τον ίδιο τον πίνακα ή την ομάδα Στήλες σε αυτήν .

Στην πραγματικότητα, αυτό είναι το μόνο που χρειάζεται να γνωρίζουμε για να συμπληρώσουμε τα παραδείγματα που δίνονται εδώ. Το υπόλοιπο βοηθητικό πρόγραμμα SSMS είναι εύκολο να το μάθετε μόνοι σας.

Λίγη θεωρία

Μια σχεσιακή βάση δεδομένων (RDB, ή περαιτέρω στο πλαίσιο απλώς μιας βάσης δεδομένων) είναι μια συλλογή από πίνακες που συνδέονται μεταξύ τους. Σε γενικές γραμμές, μια βάση δεδομένων είναι ένα αρχείο στο οποίο τα δεδομένα αποθηκεύονται σε δομημένη μορφή.

DBMS - το Σύστημα για τη Διαχείριση αυτών των Βάσεων Δεδομένων, π.χ. αυτό είναι ένα σύνολο εργαλείων για εργασία με συγκεκριμένο τύπο βάσης δεδομένων (MS SQL, Oracle, MySQL, Firebird, ...).

Σημείωση
Επειδή στη ζωή, στην καθομιλουμένη, λέμε ως επί το πλείστον: «Oracle DB», ή ακόμα και απλώς «Oracle», που σημαίνει στην πραγματικότητα «Oracle DBMS», τότε στο πλαίσιο αυτού του σεμιναρίου θα χρησιμοποιείται μερικές φορές ο όρος DB. Από το πλαίσιο, νομίζω ότι θα είναι σαφές τι ακριβώς διακυβεύεται.

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

Ο πίνακας είναι το κύριο αντικείμενο του RDB, όλα τα δεδομένα RDB αποθηκεύονται γραμμή προς γραμμή στις στήλες του πίνακα. Οι γραμμές, οι δίσκοι είναι επίσης συνώνυμα.

Για κάθε πίνακα, καθώς και για τις στήλες του, δίνονται ονόματα, με τα οποία αναφέρονται στη συνέχεια.
Το όνομα αντικειμένου (όνομα πίνακα, όνομα στήλης, όνομα ευρετηρίου, κ.λπ.) στο MS SQL μπορεί να έχει μέγιστο μήκος 128 χαρακτήρες.

Για αναφορά– στη βάση δεδομένων ORACLE, τα ονόματα αντικειμένων μπορούν να έχουν μέγιστο μήκος 30 χαρακτήρες. Επομένως, για μια συγκεκριμένη βάση δεδομένων, πρέπει να αναπτύξετε τους δικούς σας κανόνες για την ονομασία αντικειμένων, προκειμένου να τηρήσετε το όριο στον αριθμό των χαρακτήρων.

Η SQL είναι μια γλώσσα που σας επιτρέπει να υποβάλετε ερωτήματα στη βάση δεδομένων μέσω του DBMS. Σε ένα συγκεκριμένο DBMS, η γλώσσα SQL μπορεί να έχει μια συγκεκριμένη υλοποίηση (τη δική της διάλεκτο).

Το DDL και το DML είναι ένα υποσύνολο της γλώσσας SQL:

  • Η γλώσσα DDL χρησιμοποιείται για τη δημιουργία και την τροποποίηση της δομής της βάσης δεδομένων, π.χ. για δημιουργία/τροποποίηση/διαγραφή πινάκων και σχέσεων.
  • Η γλώσσα DML σάς επιτρέπει να χειρίζεστε δεδομένα πίνακα, π.χ. με τις γραμμές της. Σας επιτρέπει να επιλέγετε δεδομένα από πίνακες, να προσθέτετε νέα δεδομένα σε πίνακες και να ενημερώνετε και να διαγράφετε υπάρχοντα δεδομένα.

Στη γλώσσα SQL, μπορείτε να χρησιμοποιήσετε 2 τύπους σχολίων (μονής γραμμής και πολλαπλών γραμμών):

Σχόλιο μονής γραμμής
και

/* σχόλιο πολλών γραμμών */

Στην πραγματικότητα, όλα για τη θεωρία αυτού θα είναι αρκετά.

DDL - Γλώσσα ορισμού δεδομένων (γλώσσα περιγραφής δεδομένων)

Για παράδειγμα, εξετάστε έναν πίνακα με δεδομένα σχετικά με τους υπαλλήλους, με τη μορφή που είναι γνωστή σε ένα άτομο που δεν είναι προγραμματιστής:

Σε αυτήν την περίπτωση, οι στήλες του πίνακα έχουν τα ακόλουθα ονόματα: Αριθμός προσωπικού, Πλήρες όνομα, Ημερομηνία γέννησης, E-mail, Θέση, Τμήμα.

Κάθε μία από αυτές τις στήλες μπορεί να χαρακτηριστεί από τον τύπο των δεδομένων που περιέχει:

  • Αριθμός προσωπικού - ακέραιος
  • πλήρες όνομα - συμβολοσειρά
  • Ημερομηνία γέννησης - ημερομηνία
  • Email - συμβολοσειρά
  • Θέση - χορδή
  • τμήμα - χορδή
Ο τύπος στήλης είναι ένα χαρακτηριστικό που υποδεικνύει τι είδους δεδομένα μπορεί να αποθηκεύσει αυτή η στήλη.

Αρχικά, θα αρκεί να θυμάστε μόνο τους ακόλουθους βασικούς τύπους δεδομένων που χρησιμοποιούνται στο MS SQL:

Εννοια Σημειογραφία σε MS SQL Περιγραφή
Χορδή μεταβλητού μήκους varchar(N)
και
nvarchar(N)
Με τον αριθμό N, μπορούμε να καθορίσουμε το μέγιστο δυνατό μήκος συμβολοσειράς για την αντίστοιχη στήλη. Για παράδειγμα, εάν θέλουμε να πούμε ότι η τιμή της στήλης "Όνομα" μπορεί να περιέχει το πολύ 30 χαρακτήρες, τότε πρέπει να ορίσουμε τον τύπο της σε nvarchar (30).
Η διαφορά μεταξύ varchar και nvarchar είναι ότι το varchar σάς επιτρέπει να αποθηκεύετε συμβολοσειρές σε μορφή ASCII, όπου ένας χαρακτήρας καταλαμβάνει 1 byte, ενώ το nvarchar αποθηκεύει συμβολοσειρές σε μορφή Unicode, όπου κάθε χαρακτήρας καταλαμβάνει 2 byte.
Ο τύπος varchar θα πρέπει να χρησιμοποιείται μόνο εάν είστε 100% σίγουροι ότι το πεδίο δεν θα χρειαστεί να αποθηκεύσει χαρακτήρες Unicode. Για παράδειγμα, το varchar μπορεί να χρησιμοποιηθεί για την αποθήκευση διευθύνσεων email επειδή συνήθως περιέχουν μόνο χαρακτήρες ASCII.
Χορδή σταθερού μήκους char(N)
και
nchar(N)
Αυτός ο τύπος διαφέρει από μια συμβολοσειρά μεταβλητού μήκους στο ότι εάν το μήκος της συμβολοσειράς είναι μικρότερο από N χαρακτήρες, τότε συμπληρώνεται πάντα στα δεξιά μέχρι το μήκος των N διαστημάτων και αποθηκεύεται στη βάση δεδομένων με αυτήν τη μορφή, δηλ. στη βάση δεδομένων καταλαμβάνει ακριβώς N χαρακτήρες (όπου ένας χαρακτήρας καταλαμβάνει 1 byte για το char και 2 byte για το nchar). Στην πρακτική μου, αυτός ο τύπος χρησιμοποιείται πολύ σπάνια, και εάν χρησιμοποιείται, τότε χρησιμοποιείται κυρίως στη μορφή char (1), δηλ. όταν το πεδίο ορίζεται από έναν μόνο χαρακτήρα.
Ακέραιος αριθμός ενθ Αυτός ο τύπος μας επιτρέπει να χρησιμοποιούμε μόνο ακέραιους, θετικούς και αρνητικούς, στη στήλη. Για αναφορά (αυτό δεν είναι τόσο σχετικό για εμάς τώρα) - το εύρος των αριθμών που επιτρέπει ο τύπος int από -2 147 483 648 έως 2 147 483 647. Αυτός είναι συνήθως ο κύριος τύπος που χρησιμοποιείται για τον ορισμό αναγνωριστικών.
Πραγματικός ή πραγματικός αριθμός φλοτέρ Με απλά λόγια, πρόκειται για αριθμούς στους οποίους μπορεί να υπάρχει ένα δεκαδικό σημείο (κόμμα).
ημερομηνία ημερομηνία Εάν είναι απαραίτητο να αποθηκεύσετε μόνο την Ημερομηνία στη στήλη, η οποία αποτελείται από τρία στοιχεία: Αριθμός, Μήνας και Έτος. Για παράδειγμα, 15/02/2014 (15 Φεβρουαρίου 2014). Αυτός ο τύπος μπορεί να χρησιμοποιηθεί για τη στήλη «Ημερομηνία εισαγωγής», «Ημερομηνία γέννησης» κ.λπ., δηλ. σε περιπτώσεις όπου είναι σημαντικό για εμάς να καθορίσουμε μόνο την ημερομηνία ή όταν το στοιχείο ώρας δεν είναι σημαντικό για εμάς και μπορεί να απορριφθεί ή αν δεν είναι γνωστό.
χρόνος χρόνος Αυτός ο τύπος μπορεί να χρησιμοποιηθεί εάν η στήλη χρειάζεται να αποθηκεύσει μόνο δεδομένα χρόνου, π.χ. Ώρες, λεπτά, δευτερόλεπτα και χιλιοστά του δευτερολέπτου. Για παράδειγμα, 17:38:31.3231603
Για παράδειγμα, η καθημερινή «Ώρα αναχώρησης πτήσης».
ημερομηνία και ώρα ημερομηνία ώρα Αυτός ο τύπος σάς επιτρέπει να αποθηκεύετε ταυτόχρονα την ημερομηνία και την ώρα. Για παράδειγμα, 15/02/2014 5:38:31.323 μ.μ.
Για παράδειγμα, αυτή θα μπορούσε να είναι η ημερομηνία και η ώρα ενός συμβάντος.
Σημαία κομμάτι Αυτός ο τύπος είναι χρήσιμος για την αποθήκευση των τιμών Ναι/Όχι, όπου το Ναι θα αποθηκευτεί ως 1 και το Όχι θα αποθηκευτεί ως 0.

Επίσης, η τιμή του πεδίου, σε περίπτωση που δεν απαγορεύεται, ενδέχεται να μην προσδιορίζεται, για το σκοπό αυτό χρησιμοποιείται η λέξη-κλειδί NULL.

Για να εκτελέσουμε τα παραδείγματα, ας δημιουργήσουμε μια δοκιμαστική βάση δεδομένων που ονομάζεται Test.

Μια απλή βάση δεδομένων (χωρίς να καθορίσετε πρόσθετες παραμέτρους) μπορεί να δημιουργηθεί εκτελώντας την ακόλουθη εντολή:

Τεστ ΔΗΜΙΟΥΡΓΙΑΣ ΒΑΣΗΣ ΔΕΔΟΜΕΝΩΝ
Μπορείτε να διαγράψετε τη βάση δεδομένων με την εντολή (θα πρέπει να είστε πολύ προσεκτικοί με αυτήν την εντολή):

Δοκιμή DROP DATABASE
Για να μεταβείτε στη βάση δεδομένων μας, μπορείτε να εκτελέσετε την εντολή:

Δοκιμή ΗΠΑ
Εναλλακτικά, επιλέξτε τη βάση δεδομένων δοκιμής από την αναπτυσσόμενη λίστα στην περιοχή μενού SSMS. Στη δουλειά, χρησιμοποιώ συχνά αυτήν τη μέθοδο εναλλαγής μεταξύ βάσεων δεδομένων.

Τώρα στη βάση δεδομένων μας μπορούμε να δημιουργήσουμε έναν πίνακα χρησιμοποιώντας τις περιγραφές ως έχουν, χρησιμοποιώντας κενά και κυριλλικούς χαρακτήρες:

ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ [Εργαζόμενοι]([Personnel Number] int, [Name] nvarchar(30), [Date of Birth] date, nvarchar(30), [Position] nvarchar(30), [Department] nvarchar(30))
Σε αυτήν την περίπτωση, θα πρέπει να βάλουμε τα ονόματα σε αγκύλες […].

Αλλά στη βάση δεδομένων, για μεγαλύτερη ευκολία, είναι καλύτερο να προσδιορίζετε όλα τα ονόματα των αντικειμένων στα λατινικά και να μην χρησιμοποιείτε κενά στα ονόματα. Στο MS SQL, συνήθως σε αυτήν την περίπτωση, κάθε λέξη ξεκινά με ένα κεφαλαίο γράμμα, για παράδειγμα, για το πεδίο "Personnel number" θα μπορούσαμε να ορίσουμε το όνομα PersonnelNumber. Μπορείτε επίσης να χρησιμοποιήσετε αριθμούς στο όνομα, για παράδειγμα, PhoneNumber1.

Σε μια σημείωση
Σε ορισμένα DBMS, η ακόλουθη μορφή ονομάτων "PHONE_NUMBER" μπορεί να είναι προτιμότερη, για παράδειγμα, αυτή η μορφή χρησιμοποιείται συχνά στη βάση δεδομένων ORACLE. Φυσικά, κατά τον ορισμό του ονόματος πεδίου, είναι επιθυμητό να μην ταιριάζει με τις λέξεις-κλειδιά που χρησιμοποιούνται στο DBMS.

Για αυτόν τον λόγο, μπορείτε να ξεχάσετε τη σύνταξη της αγκύλας και να διαγράψετε τον πίνακα [Εργαζόμενοι]:

DOP TABLE [Εργαζόμενοι]
Για παράδειγμα, ένας πίνακας με υπαλλήλους μπορεί να ονομάζεται "Εργαζόμενοι" και στα πεδία του μπορούν να δοθούν τα ακόλουθα ονόματα:

  • ID - Αριθμός Προσωπικού (Αναγνωριστικό Υπαλλήλου)
  • Όνομα - πλήρες όνομα
  • Γενέθλια - Ημερομηνία γέννησης
  • ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ
  • Θέση
  • Τμήμα - Τμήμα
Πολύ συχνά, η λέξη ID χρησιμοποιείται για την ονομασία του πεδίου αναγνωριστικού.

Τώρα ας δημιουργήσουμε τον πίνακα μας:

ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ Υπαλλήλων(ID int, Όνομα nvarchar(30), Ημερομηνία γενεθλίων, Email nvarchar(30), Θέση nvarchar(30), Τμήμα nvarchar(30))
Μπορείτε να χρησιμοποιήσετε την επιλογή NOT NULL για να καθορίσετε τις απαιτούμενες στήλες.

Για έναν ήδη υπάρχοντα πίνακα, τα πεδία μπορούν να επαναπροσδιοριστούν χρησιμοποιώντας τις ακόλουθες εντολές:

Ενημέρωση πεδίου ID ALTER TABLE Employees ALTER COLUMN ID int NOT NULL -- ενημέρωση πεδίου ονόματος ALTER TABLE Employees ALTER COLUMN Name nvarchar(30) NOT NULL

Σε μια σημείωση
Η γενική ιδέα της γλώσσας SQL για τα περισσότερα DBMS παραμένει η ίδια (τουλάχιστον, μπορώ να το κρίνω από το DBMS με το οποίο είχα την ευκαιρία να εργαστώ). Η διαφορά μεταξύ του DDL σε διαφορετικά DBMS έγκειται κυρίως στους τύπους δεδομένων (όχι μόνο τα ονόματά τους, αλλά και οι λεπτομέρειες της υλοποίησής τους μπορεί να διαφέρουν εδώ), οι ίδιες οι ιδιαιτερότητες της υλοποίησης της γλώσσας SQL μπορεί επίσης να διαφέρουν ελαφρώς (δηλ. η ουσία της οι εντολές είναι οι ίδιες, αλλά μπορεί να υπάρχουν μικρές διαφορές στη διάλεκτο, δυστυχώς, αλλά δεν υπάρχει ένα πρότυπο). Γνωρίζοντας τα βασικά της SQL, μπορείτε εύκολα να μεταβείτε από το ένα DBMS στο άλλο. σε αυτήν την περίπτωση, θα χρειαστεί μόνο να κατανοήσετε τις λεπτομέρειες της υλοποίησης των εντολών στο νέο DBMS, π.χ. στις περισσότερες περιπτώσεις, θα αρκεί απλώς να κάνουμε μια αναλογία.

Δημιουργία πίνακα CREATE TABLE Employees(ID int, -- στον τύπο ORACLE το int είναι το ισοδύναμο (περιτύλιγμα) για τον αριθμό(38) Όνομα nvarchar2(30), -- nvarchar2 στο ORACLE ισοδυναμεί με nvarchar στο MS SQL Ημερομηνία γενεθλίων, Email nvarchar2 (30) , Θέση nvarchar2(30), Τμήμα nvarchar2(30)); -- ενημέρωση των πεδίων ID και Name (εδώ χρησιμοποιείται MODIFY(…) αντί για ALTER COLUMN ALTER TABLE Employees MODIFY(ID int NOT NULL,Name nvarchar2(30) NOT NULL); -- προσθήκη ενός PK (σε αυτήν την περίπτωση, η κατασκευή μοιάζει με το MS SQL, θα φαίνεται παρακάτω) ALTER TABLE Employees ADD CONSTRAINT PK_Employees PRIMARY KEY(ID);
Για την ORACLE, υπάρχουν διαφορές ως προς την υλοποίηση του τύπου varchar2, η κωδικοποίησή του εξαρτάται από τις ρυθμίσεις της βάσης δεδομένων και το κείμενο μπορεί να αποθηκευτεί, για παράδειγμα, σε κωδικοποίηση UTF-8. Επιπλέον, το μήκος του πεδίου στο ORACLE μπορεί να οριστεί τόσο σε byte όσο και σε χαρακτήρες, γι' αυτό χρησιμοποιούνται πρόσθετες επιλογές BYTE και CHAR, οι οποίες καθορίζονται μετά το μήκος πεδίου, για παράδειγμα:

NAME varchar2(30 BYTE) -- η χωρητικότητα του πεδίου θα είναι 30 byte NAME varchar2(30 CHAR) -- η χωρητικότητα του πεδίου θα είναι 30 χαρακτήρες
Ποια επιλογή θα χρησιμοποιηθεί από προεπιλογή BYTE ή CHAR, στην περίπτωση μιας απλής προδιαγραφής του τύπου varchar2(30) στην ORACLE, εξαρτάται από τις ρυθμίσεις της βάσης δεδομένων, μπορεί επίσης μερικές φορές να οριστεί στις ρυθμίσεις IDE. Γενικά, μερικές φορές μπορεί εύκολα να μπερδευτείτε, οπότε στην περίπτωση της ORACLE, εάν χρησιμοποιείται ο τύπος varchar2 (και αυτό δικαιολογείται μερικές φορές εδώ, για παράδειγμα, όταν χρησιμοποιείτε κωδικοποίηση UTF-8), προτιμώ να γράφω ρητά CHAR (γιατί είναι συνήθως πιο βολικό να διαβάζουμε το μήκος μιας συμβολοσειράς σε χαρακτήρες ).

Αλλά σε αυτή την περίπτωση, εάν υπάρχουν ήδη κάποια δεδομένα στον πίνακα, τότε για την επιτυχή εκτέλεση των εντολών, είναι απαραίτητο να συμπληρωθούν τα πεδία ID και Name σε όλες τις σειρές του πίνακα. Ας το δείξουμε αυτό με ένα παράδειγμα, εισάγουμε δεδομένα στον πίνακα στα πεδία ID, Position και Department, αυτό μπορεί να γίνει με το ακόλουθο σενάριο:

INSERT Employees(ID,Position,Department) VALUES (1000,N"Director",N"Administration"), (1001,N"Προγραμματιστής",N"IT"), (1002,N"Λογιστής",N"Λογιστική" ), (1003,N"Ανώτερος προγραμματιστής",N"IT")
Σε αυτήν την περίπτωση, η εντολή INSERT θα προκαλέσει επίσης σφάλμα, επειδή κατά την εισαγωγή, δεν καθορίσαμε την τιμή του απαιτούμενου πεδίου Όνομα.
Εάν είχαμε ήδη αυτά τα δεδομένα στον αρχικό πίνακα, τότε η εντολή "ALTER TABLE Employees ALTER COLUMN ID int NOT NULL" θα είχε εκτελεστεί με επιτυχία και η εντολή "ALTER TABLE Employees ALTER COLUMN Name int NOT NULL" θα είχε εκτελεστεί σφάλμα μήνυμα, ότι υπάρχουν NULL (δεν προσδιορίζονται) τιμές στο πεδίο Όνομα.

Ας προσθέσουμε τιμές για το πεδίο Όνομα και ας συμπληρώσουμε ξανά τα δεδομένα:


Επίσης, η επιλογή NOT NULL μπορεί να χρησιμοποιηθεί απευθείας κατά τη δημιουργία νέου πίνακα, π.χ. στα πλαίσια της εντολής CREATE TABLE.

Αρχικά, διαγράψτε τον πίνακα με την εντολή:

DROP TABLE Υπάλληλοι
Τώρα ας δημιουργήσουμε έναν πίνακα με υποχρεωτικές στήλες ID και Όνομα:

ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ Υπαλλήλων(ID int NOT NULL, Όνομα nvarchar(30) NOT NULL, Ημερομηνία γενεθλίων, Email nvarchar(30), Θέση nvarchar(30), Τμήμα nvarchar(30))
Μπορείτε επίσης να γράψετε NULL μετά το όνομα της στήλης, πράγμα που θα σημαίνει ότι θα επιτρέπονται τιμές NULL (δεν καθορίζονται), αλλά αυτό δεν είναι απαραίτητο, καθώς αυτό το χαρακτηριστικό υπονοείται από προεπιλογή.

Εάν, αντίθετα, θέλετε να κάνετε μια υπάρχουσα στήλη προαιρετική, χρησιμοποιήστε την ακόλουθη σύνταξη εντολών:

ALTER TABLE Υπάλληλοι ALTER COLUMN Όνομα nvarchar(30) NULL
Ή απλά:

ALTER TABLE Υπάλληλοι ALTER COLUMN Όνομα nvarchar(30)
Με αυτήν την εντολή, μπορούμε επίσης να αλλάξουμε τον τύπο πεδίου σε άλλο συμβατό τύπο ή να αλλάξουμε το μήκος του. Για παράδειγμα, ας επεκτείνουμε το πεδίο Όνομα σε 50 χαρακτήρες:

ALTER TABLE Υπάλληλοι ALTER COLUMN Όνομα nvarchar(50)

πρωτεύων κλειδί

Κατά τη δημιουργία ενός πίνακα, είναι επιθυμητό να έχει μια μοναδική στήλη ή ένα σύνολο στηλών που είναι μοναδικό για κάθε γραμμή του - μια εγγραφή μπορεί να προσδιορίζεται μοναδικά από αυτήν τη μοναδική τιμή. Αυτή η τιμή ονομάζεται πρωτεύον κλειδί του πίνακα. Για τον πίνακα Υπαλλήλων μας, αυτή η μοναδική τιμή θα μπορούσε να είναι η στήλη ID (η οποία περιέχει "Αριθμός Προσωπικού Υπαλλήλου" - ακόμα κι αν στην περίπτωσή μας αυτή η τιμή είναι μοναδική για κάθε εργαζόμενο και δεν μπορεί να επαναληφθεί).

Μπορείτε να δημιουργήσετε ένα πρωτεύον κλειδί σε έναν υπάρχοντα πίνακα χρησιμοποιώντας την εντολή:

ALTER TABLE Υπάλληλοι ΠΡΟΣΘΗΚΗ ΠΕΡΙΟΡΙΣΜΟΥ PK_Employees PRIMARY KEY(ID)
Όπου "PK_Employees" είναι το όνομα του περιορισμού που είναι υπεύθυνος για το πρωτεύον κλειδί. Συνήθως, το πρωτεύον κλειδί ονομάζεται με το πρόθεμα "PK_" ακολουθούμενο από το όνομα του πίνακα.

Εάν το πρωτεύον κλειδί αποτελείται από πολλά πεδία, τότε αυτά τα πεδία πρέπει να παρατίθενται σε αγκύλες διαχωρισμένες με κόμματα:

ΑΛΛΑΓΗ ΠΙΝΑΚΑ_όνομα πίνακα ΠΡΟΣΘΗΚΗ ΠΕΡΙΟΡΙΣΜΟΥ περιορισμού_όνομα ΚΥΡΙΑ ΚΛΕΙΔΙ(πεδίο1,πεδίο2,…)
Αξίζει να σημειωθεί ότι στο MS SQL όλα τα πεδία που περιλαμβάνονται στο πρωτεύον κλειδί πρέπει να έχουν το χαρακτηριστικό NOT NULL.

Επίσης, το πρωτεύον κλειδί μπορεί να οριστεί απευθείας κατά τη δημιουργία ενός πίνακα, π.χ. στα πλαίσια της εντολής CREATE TABLE. Ας διαγράψουμε τον πίνακα:

DROP TABLE Υπάλληλοι
Και στη συνέχεια δημιουργήστε το χρησιμοποιώντας την ακόλουθη σύνταξη:

CREATE TABLE Employees(ID int NOT NULL, Όνομα nvarchar(30) NOT NULL, Ημερομηνία γενεθλίων, Email nvarchar(30), Position nvarchar(30), Department nvarchar(30), CONSTRAINT PK_Employees PRIMARY KEY(PK after) -- περιγραφή όλα τα πεδία ως περιορισμός)
Μετά τη δημιουργία, συμπληρώστε τα δεδομένα του πίνακα:

INSERT Employees(ID,Position,Department,Name) VALUES (1000,N"Director",N"Administration",N"Ivanov II.), (1001,N"Programmer",N"IT",N"Petrov PP" ), (1002,N"Λογιστής",N"Λογιστική",N"Sidorov SS"), (1003,N"Ανώτερος Προγραμματιστής",N"IT",N"Andreev A. A.")
Εάν το πρωτεύον κλειδί στον πίνακα αποτελείται μόνο από τις τιμές μιας στήλης, τότε μπορεί να χρησιμοποιηθεί η ακόλουθη σύνταξη:

CREATE TABLE Employees(ID int NOT NULL CONSTRAINT PK_Employees PRIMARY KEY, -- καθορίστε ως χαρακτηριστικό του πεδίου Όνομα nvarchar(30) NOT NULL, Ημερομηνία γενεθλίων, Email nvarchar(30), Θέση nvarchar(30), Τμήμα nvarchar(30)
Στην πραγματικότητα, το όνομα περιορισμού μπορεί να παραλειφθεί, οπότε θα του δοθεί ένα όνομα συστήματος (όπως "PK__Employee__3214EC278DA42077"):

CREATE TABLE Employees(ID int NOT NULL, Όνομα nvarchar(30) NOT NULL, Ημερομηνία γενεθλίων, Email nvarchar(30), Position nvarchar(30), Department nvarchar(30), PRIMARY KEY(ID))
Ή:

ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ Υπαλλήλων(ID int NOT NULL PRIMARY KEY, Όνομα nvarchar(30) NOT NULL, Ημερομηνία γενεθλίων, Email nvarchar(30), Θέση nvarchar(30), Τμήμα nvarchar(30))
Αλλά θα συνιστούσα να ορίζετε πάντα ρητά το όνομα του περιορισμού για μόνιμους πίνακες, γιατί με ένα ρητά και κατανοητό όνομα, στη συνέχεια θα είναι ευκολότερο να το χειριστείτε, για παράδειγμα, μπορείτε να το διαγράψετε:

ΑΛΛΑΓΗ ΠΙΝΑΚΑΣ Εργαζόμενοι ΑΠΟΡΡΙΨΗ ΠΕΡΙΟΡΙΣΜΟΥ PK_Employees
Αλλά μια τέτοια σύντομη σύνταξη, χωρίς να καθορίζονται τα ονόματα των περιορισμών, είναι βολική στη χρήση κατά τη δημιουργία προσωρινών πινάκων βάσης δεδομένων (το όνομα ενός προσωρινού πίνακα αρχίζει με # ή ##), οι οποίοι θα διαγραφούν μετά τη χρήση.

Ας συνοψίσουμε

Μέχρι στιγμής έχουμε καλύψει τις παρακάτω εντολές:
  • ΔΗΜΙΟΥΡΓΙΑ ΤΡΑΠΕΖΙΟΥ table_name (αριθμός πεδίων και οι τύποι τους, περιορισμοί) - χρησιμοποιείται για τη δημιουργία νέου πίνακα στην τρέχουσα βάση δεδομένων.
  • ΠΤΡΑΠΕΖΙ ΠΤΩΣΗΣ table_name - χρησιμοποιείται για τη διαγραφή ενός πίνακα από την τρέχουσα βάση δεδομένων.
  • ALTER TABLEόνομα_πίνακα ΑΛΤΕΡ ΣΤΗΛΗστήλη_όνομα … – χρησιμοποιείται για την ενημέρωση του τύπου στήλης ή για την αλλαγή των ρυθμίσεών του (για παράδειγμα, για να ορίσετε το χαρακτηριστικό NULL ή NOT NULL).
  • ALTER TABLEόνομα_πίνακα ΠΡΟΣΘΗΚΗ ΠΕΡΙΟΡΙΣΜΟΥπεριορισμός_όνομα ΠΡΩΤΕΥΩΝ ΚΛΕΙΔΙ(πεδίο1, πεδίο2,…) – προσθήκη πρωτεύοντος κλειδιού σε έναν υπάρχοντα πίνακα.
  • ALTER TABLEόνομα_πίνακα ΠΤΩΣΗ ΠΕΡΙΟΡΙΣΜΟΥ constraint_name - αφαιρέστε τον περιορισμό από τον πίνακα.

Λίγα λόγια για τα προσωρινά τραπέζια

Απόκομμα από το MSDN.Υπάρχουν δύο τύποι προσωρινών πινάκων στον MS SQL Server: τοπικός (#) και καθολικός (##). Οι τοπικοί προσωρινοί πίνακες είναι ορατοί μόνο στους δημιουργούς τους μέχρι να τερματιστεί η περίοδος σύνδεσης με την παρουσία του SQL Server μόλις δημιουργηθούν για πρώτη φορά. Οι τοπικοί προσωρινοί πίνακες διαγράφονται αυτόματα μετά την αποσύνδεση ενός χρήστη από μια παρουσία του SQL Server. Οι καθολικοί προσωρινοί πίνακες είναι ορατοί σε όλους τους χρήστες κατά τη διάρκεια οποιασδήποτε περιόδου σύνδεσης μετά τη δημιουργία αυτών των πινάκων και διαγράφονται όταν όλοι οι χρήστες που αναφέρονται σε αυτούς τους πίνακες αποσυνδέονται από την παρουσία του SQL Server.

Οι προσωρινοί πίνακες δημιουργούνται στη βάση δεδομένων του συστήματος tempdb, π.χ. δημιουργώντας τους, δεν φράζουμε την κύρια βάση δεδομένων, διαφορετικά οι προσωρινοί πίνακες είναι πανομοιότυποι με τους κανονικούς πίνακες, μπορούν επίσης να διαγραφούν χρησιμοποιώντας την εντολή DROP TABLE. Οι τοπικοί (#) προσωρινοί πίνακες χρησιμοποιούνται συχνότερα.

Για να δημιουργήσετε έναν προσωρινό πίνακα, μπορείτε να χρησιμοποιήσετε την εντολή CREATE TABLE:

CREATE TABLE #Temp(ID int, Όνομα nvarchar(30))
Δεδομένου ότι ένας προσωρινός πίνακας στο MS SQL είναι παρόμοιος με έναν κανονικό πίνακα, μπορείτε επίσης να τον διαγράψετε ανάλογα με την εντολή DROP TABLE:

DOP TABLE #Θερμ

Μπορείτε επίσης να δημιουργήσετε έναν προσωρινό πίνακα (καθώς και έναν κανονικό πίνακα) και να τον συμπληρώσετε αμέσως με τα δεδομένα που επιστρέφονται από το ερώτημα χρησιμοποιώντας τη σύνταξη SELECT ... INTO:

SELECT ID, Name INTO #Temp FROM Employees

Σε μια σημείωση
Σε διαφορετικά ΣΔΒΔ, η υλοποίηση των προσωρινών πινάκων μπορεί να διαφέρει. Για παράδειγμα, στο ORACLE και στο Firebird DBMS, η δομή των προσωρινών πινάκων πρέπει να καθοριστεί εκ των προτέρων από την εντολή CREATE GLOBAL TEMPORARY TABLE, υποδεικνύοντας τις ιδιαιτερότητες της αποθήκευσης δεδομένων σε αυτό και, στη συνέχεια, ο χρήστης τα βλέπει στους κύριους πίνακες και εργάζεται μαζί τους όπως με ένα κανονικό τραπέζι.

Κανονικοποίηση της βάσης δεδομένων - διαχωρισμός σε υποπίνακες (καταλόγους) και προσδιορισμός σχέσεων

Ο τρέχων πίνακας Υπαλλήλων μας έχει το μειονέκτημα ότι ο χρήστης μπορεί να εισάγει οποιοδήποτε κείμενο στα πεδία Θέση και Τμήμα, το οποίο είναι κατά κύριο λόγο γεμάτο με σφάλματα, καθώς για έναν υπάλληλο μπορεί απλώς να υποδείξει "IT" ως τμήμα και για τον δεύτερο υπάλληλο, για για παράδειγμα, πληκτρολογήστε "τμήμα πληροφορικής", έχετε το τρίτο "IT". Ως αποτέλεσμα, δεν θα είναι σαφές τι εννοούσε ο χρήστης, δηλ. Είναι αυτοί οι υπάλληλοι υπάλληλοι του ίδιου τμήματος ή ο χρήστης περιέγραψε τον εαυτό του και πρόκειται για 3 διαφορετικά τμήματα; Και ακόμη περισσότερο, σε αυτήν την περίπτωση, δεν θα μπορούμε να ομαδοποιήσουμε σωστά τα δεδομένα για κάποια αναφορά, όπου μπορεί να απαιτείται η εμφάνιση του αριθμού των εργαζομένων στο πλαίσιο κάθε τμήματος.

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

Το τρίτο μειονέκτημα είναι η δυσκολία ενημέρωσης αυτών των πεδίων εάν αλλάξει το όνομα μιας θέσης, για παράδειγμα, εάν πρέπει να μετονομάσετε τη θέση "Προγραμματιστής" σε "Νέος προγραμματιστής". Σε αυτήν την περίπτωση, θα πρέπει να κάνουμε αλλαγές σε κάθε γραμμή του πίνακα, στον οποίο η Θέση είναι ίση με "Προγραμματιστής".

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

Ας δημιουργήσουμε 2 πίνακες αναφοράς "Θέσεις" και "Τμήματα", ο πρώτος θα ονομάζεται Θέσεις και ο δεύτερος, αντίστοιχα, Τμήματα:

ΔΗΜΙΟΥΡΓΙΑ ΘΕΣΕΩΝ ΠΙΝΑΚΑ(ID int IDENTITY(1,1) NOT NULL CONSTRAINT PK_Positions PRIMARY KEY, Name nvarchar(30) NOT NULL) CREATE TABLE Departments(ID int IDENTITY(1,1) NOT NULL CONSTRAINT PPKRIMAR0YDepartment ) ΟΧΙ ΚΕΝΟ)
Σημειώστε ότι εδώ έχουμε χρησιμοποιήσει τη νέα επιλογή ΤΑΥΤΟΤΗΤΑ, που σημαίνει ότι τα δεδομένα στη στήλη ID θα αριθμηθούν αυτόματα, ξεκινώντας από το 1, με βήμα 1, δηλ. όταν προστεθούν νέες εγγραφές, θα τους εκχωρηθούν διαδοχικά οι τιμές 1, 2, 3 και ούτω καθεξής. Τέτοια πεδία συνήθως ονομάζονται αυτόματη αύξηση. Μόνο ένα πεδίο με την ιδιότητα IDENTITY μπορεί να οριστεί σε έναν πίνακα και συνήθως, αλλά όχι απαραίτητα, ένα τέτοιο πεδίο είναι το πρωτεύον κλειδί για αυτόν τον πίνακα.

Σε μια σημείωση
Σε διαφορετικά DBMS, η υλοποίηση πεδίων με μετρητή μπορεί να γίνει διαφορετικά. Στη MySQL, για παράδειγμα, ένα τέτοιο πεδίο ορίζεται χρησιμοποιώντας την επιλογή AUTO_INCREMENT. Στο ORACLE και στο Firebird, αυτή η λειτουργία μπορούσε προηγουμένως να εξομοιωθεί χρησιμοποιώντας SEQUENCEs. Αλλά από όσο γνωρίζω, η ORACLE έχει προσθέσει τώρα την επιλογή GENERATED AS IDENTITY.

Ας συμπληρώσουμε αυτούς τους πίνακες αυτόματα, με βάση τα τρέχοντα δεδομένα που καταγράφονται στα πεδία Θέση και Τμήμα του πίνακα Υπαλλήλων:

Συμπληρώστε το πεδίο Όνομα του πίνακα Θέσεων με μοναδικές τιμές από το πεδίο Θέση του πίνακα Εργαζόμενοι ΕΙΣΑΓΩΓΗ θέσεων(Όνομα) ΕΠΙΛΟΓΗ DISTINCT Position FROM Employees WHERE Position IS NULL -- απόρριψη εγγραφών χωρίς καθορισμένη θέση
Το ίδιο θα κάνουμε και για τον πίνακα των Τμημάτων:

INSERT Τμήματα(Όνομα) ΕΠΙΛΟΓΗ ΔΙΑΚΡΙΤΟΥ Τμήματος ΑΠΟ Υπαλλήλους ΟΠΟΥ Το τμήμα ΔΕΝ ΕΙΝΑΙ ΜΗΧΑΝΟ
Αν ανοίξουμε τώρα τους πίνακες Θέσεις και Τμήματα, θα δούμε ένα αριθμημένο σύνολο τιμών στο πεδίο ID:

ΕΠΙΛΟΓΗ * ΑΠΟ θέσεις

ΕΠΙΛΟΓΗ * ΑΠΟ Τμήματα

Αυτοί οι πίνακες θα παίζουν πλέον το ρόλο των καταλόγων για τον καθορισμό θέσεων και τμημάτων. Τώρα θα αναφερθούμε στις ταυτότητες εργασίας και τμημάτων. Πρώτα απ 'όλα, ας δημιουργήσουμε νέα πεδία στον πίνακα Υπάλληλοι για την αποθήκευση των δεδομένων ID:

Προσθήκη πεδίου για ID θέσης ALTER TABLE Employees ADD PositionID int -- προσθήκη πεδίου για το τμήμα ID ALTER TABLE Employees ADD DepartmentID int
Ο τύπος των πεδίων αναφοράς πρέπει να είναι ο ίδιος όπως στους καταλόγους, σε αυτήν την περίπτωση είναι int.

Μπορείτε επίσης να προσθέσετε πολλά πεδία στον πίνακα ταυτόχρονα με μία εντολή, παραθέτοντας τα πεδία διαχωρισμένα με κόμματα:

ALTER TABLE Employees ADD PositionID int, DepartmentID int
Τώρα ας γράψουμε συνδέσμους (περιορισμοί αναφοράς - ΞΕΝΟ ΚΛΕΙΔΙ) για αυτά τα πεδία, έτσι ώστε ο χρήστης να μην έχει την ευκαιρία να γράψει σε αυτά τα πεδία, τιμές που δεν περιλαμβάνονται στις τιμές ID στους καταλόγους.

ΑΛΛΑΓΗ ΠΙΝΑΚΑ Υπάλληλοι ΠΡΟΣΘΗΚΗ ΠΕΡΙΟΡΙΣΜΟΥ FK_Employees_PositionID ΞΕΝΟ ΚΛΕΙΔΙ(PositionID) ΑΝΑΦΟΡΕΣ Θέσεις(Αναγνωριστικό)
Και θα κάνουμε το ίδιο για το δεύτερο πεδίο:

ALTER TABLE Employees ADD CONSTRAINT FK_Employees_DepartmentID ΞΕΝΟ ΚΛΕΙΔΙ(Αναγνωριστικό τμήματος) ΑΝΑΦΟΡΕΣ Τμήματα(ID)
Τώρα ο χρήστης θα μπορεί να εισάγει μόνο τις τιμές ID από το αντίστοιχο βιβλίο αναφοράς σε αυτά τα πεδία. Αντίστοιχα, για να χρησιμοποιήσει ένα νέο τμήμα ή θέση, θα πρέπει πρώτα να προσθέσει μια νέα καταχώρηση στον αντίστοιχο κατάλογο. Επειδή Οι θέσεις και τα τμήματα αποθηκεύονται πλέον σε καταλόγους σε ένα μόνο αντίγραφο, τότε για να αλλάξετε το όνομα, αρκεί να το αλλάξετε μόνο στον κατάλογο.

Το όνομα του περιορισμού αναφοράς είναι συνήθως σύνθετο, αποτελείται από το πρόθεμα "FK_", ακολουθούμενο από το όνομα του πίνακα και μετά την υπογράμμιση, έρχεται το όνομα του πεδίου που αναφέρεται στο αναγνωριστικό του πίνακα αναζήτησης.

Ένα αναγνωριστικό (ID) είναι συνήθως μια εσωτερική τιμή που χρησιμοποιείται μόνο για σχέσεις και ποια τιμή αποθηκεύεται εκεί είναι απολύτως αδιάφορη στις περισσότερες περιπτώσεις, επομένως δεν χρειάζεται να προσπαθήσετε να απαλλαγείτε από τρύπες στην ακολουθία αριθμών που προκύπτουν στο πορεία εργασίας με έναν πίνακα, για παράδειγμα, μετά τη διαγραφή εγγραφών από το εγχειρίδιο.

ΑΛΛΑΓΗ πίνακα ΠΙΝΑΚΑ ΠΡΟΣΘΗΚΗ ΠΕΡΙΟΡΙΣΜΟΥ constraint_name ΞΕΝΟ ΚΛΕΙΔΙ(πεδίο1,πεδίο2,…) Πίνακας αναζήτησης ΑΝΑΦΟΡΕΣ(πεδίο1,πεδίο2,…)
Σε αυτήν την περίπτωση, στον πίνακα "table_reference", το πρωτεύον κλειδί αντιπροσωπεύεται από έναν συνδυασμό πολλών πεδίων (πεδίο1, πεδίο2, ...).

Στην πραγματικότητα, τώρα ας ενημερώσουμε τα πεδία PositionID και DepartmentID με τις τιμές ID από τους καταλόγους. Ας χρησιμοποιήσουμε την εντολή UPDATE DML για αυτόν τον σκοπό:

UPDATE e SET PositionID=(SELECT ID FROM Positions WHERE Name=e.Position), DepartmentID=(SELECT ID FROM Departments WHERE Name=e.Department) FROM Employees e
Ας δούμε τι συμβαίνει εκτελώντας το ερώτημα:

ΕΠΙΛΟΓΗ * ΑΠΟ Υπαλλήλους

Αυτό είναι όλο, τα πεδία PositionID και DepartmentID συμπληρώνονται με τις αντίστοιχες θέσεις και τμήματα με αναγνωριστικά ανάγκης στα πεδία Position and Department στον πίνακα Employees τώρα, μπορείτε να διαγράψετε αυτά τα πεδία:

ALTER TABLE Υπάλληλοι DOP COLUMN Θέση, Τμήμα
Ο πίνακας τώρα μοιάζει με αυτό:

ΕΠΙΛΟΓΗ * ΑΠΟ Υπαλλήλους

ταυτότητα Ονομα Γενέθλια ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ Αναγνωριστικό θέσης ID Τμήματος
1000 Ιβάνοφ Ι.Ι. ΜΗΔΕΝΙΚΟ ΜΗΔΕΝΙΚΟ 2 1
1001 Petrov P.P. ΜΗΔΕΝΙΚΟ ΜΗΔΕΝΙΚΟ 3 3
1002 Sidorov S.S. ΜΗΔΕΝΙΚΟ ΜΗΔΕΝΙΚΟ 1 2
1003 Andreev A.A. ΜΗΔΕΝΙΚΟ ΜΗΔΕΝΙΚΟ 4 3

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

ΕΠΙΛΟΓΗ e.ID,e.Name,p.Name PositionName,d.Name DepartmentName FROM Employees e LEFT JOIN Τμήματα d ON d.ID=e.DepartmentID LEFT JOIN Positions p ON p.ID=e.PositionID

Στο Object Inspector, μπορούμε να δούμε όλα τα αντικείμενα που δημιουργήθηκαν για έναν δεδομένο πίνακα. Από εδώ μπορείτε επίσης να εκτελέσετε διάφορους χειρισμούς με αυτά τα αντικείμενα - για παράδειγμα, μετονομάστε ή διαγράψτε αντικείμενα.

Αξίζει επίσης να σημειωθεί ότι ένας πίνακας μπορεί να αναφέρεται στον εαυτό του, δηλ. μπορείτε να δημιουργήσετε έναν αναδρομικό σύνδεσμο. Για παράδειγμα, ας προσθέσουμε ένα άλλο πεδίο ManagerID στον πίνακα μας με τους υπαλλήλους, το οποίο θα υποδεικνύει τον υπάλληλο στον οποίο αναφέρεται αυτός ο υπάλληλος. Ας δημιουργήσουμε ένα πεδίο:

ΑΛΛΑΓΗ ΠΙΝΑΚΑ Υπάλληλοι ΠΡΟΣΘΗΚΗ Αναγνωριστικό διαχειριστή εσω
Η τιμή NULL επιτρέπεται σε αυτό το πεδίο, το πεδίο θα είναι κενό εάν, για παράδειγμα, δεν υπάρχουν ανώτεροι από τον υπάλληλο.

Τώρα ας δημιουργήσουμε ένα Ξένο ΚΛΕΙΔΙ στον πίνακα Υπάλληλοι:

ΑΛΛΑΓΗ ΠΙΝΑΚΑ Υπάλληλοι ΠΡΟΣΘΗΚΗ ΠΕΡΙΟΡΙΣΜΟΥ FK_Employees_ManagerID ΞΕΝΟ ΚΛΕΙΔΙ (Αναγνωριστικό Διευθυντή) ΑΝΑΦΟΡΕΣ Υπάλληλοι(Αναγνωριστικό)
Ας δημιουργήσουμε τώρα ένα διάγραμμα και ας δούμε πώς φαίνονται οι σχέσεις μεταξύ των πινάκων μας σε αυτό:

Ως αποτέλεσμα, θα πρέπει να δούμε την ακόλουθη εικόνα (ο πίνακας Υπαλλήλων σχετίζεται με τους πίνακες Θέσεων και Τμημάτων και αναφέρεται επίσης στον εαυτό του):

Τέλος, αξίζει να αναφέρουμε ότι τα κλειδιά αναφοράς μπορούν να περιλαμβάνουν πρόσθετες επιλογές ON DELETE CASCADE και ON UPDATE CASCADE, οι οποίες λένε πώς να συμπεριφέρεστε κατά τη διαγραφή ή την ενημέρωση μιας εγγραφής που αναφέρεται στον πίνακα αναζήτησης. Εάν αυτές οι επιλογές δεν καθορίζονται, τότε δεν μπορούμε να αλλάξουμε το αναγνωριστικό στον πίνακα καταλόγου της καταχώρισης που έχει συνδέσμους από άλλον πίνακα, ούτε μπορούμε να διαγράψουμε μια τέτοια καταχώρηση από τον κατάλογο έως ότου διαγράψουμε όλες τις σειρές που αναφέρονται σε αυτήν την καταχώρηση ή, Ας ενημερώστε αυτές τις γραμμές αναφοράς σε άλλη τιμή.

Για παράδειγμα, ας δημιουργήσουμε ξανά τον πίνακα με την επιλογή ON DELETE CASCADE για το FK_Employees_DepartmentID:

DROP TABLE Employees CREATE TABLE Employees(ID int NOT NULL, Name nvarchar(30), Birthday date, Email nvarchar(30), PositionID int, DepartmentID int, ManagerID int, CONSTRAINT PK_Employees KRIMARY KEY (IDK_Deploymentepartepart) ) REFERENCES Τμήματα(ID) ON DELETE CASCADE, CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENCES Positions(ID), CONSTRAINT FK_Employees_ManagerID FOREIGN KEY (ManagerID) ΕΞΩΤΕΡΙΚΟΥ ΚΛΕΙΔΙ (ManagerID) EmployeNID,PositioneID,EmployeNID,EmployeeIDRT )ΤΙΜΕΣ (1000,N"Ivanov II","19550219",2,1,NULL), (1001,N"Petrov PP","19831203",3,3,1003), (1002 ,N"Sidorov SS" "19760607",1,2,1000), (1003,N"Andreev AA","19820417",4,3,1000)
Ας αφαιρέσουμε το τμήμα με ID 3 από τον πίνακα Τμήματα:

ΔΙΑΓΡΑΦΗ Τμημάτων ΟΠΟΥ ID=3
Ας δούμε τα δεδομένα στον πίνακα Εργαζόμενοι:

ΕΠΙΛΟΓΗ * ΑΠΟ Υπαλλήλους

ταυτότητα Ονομα Γενέθλια ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ Αναγνωριστικό θέσης ID Τμήματος Αναγνωριστικό διαχειριστή
1000 Ιβάνοφ Ι.Ι. 1955-02-19 ΜΗΔΕΝΙΚΟ 2 1 ΜΗΔΕΝΙΚΟ
1002 Sidorov S.S. 1976-06-07 ΜΗΔΕΝΙΚΟ 1 2 1000

Όπως μπορείτε να δείτε, τα δεδομένα για το τμήμα 3 έχουν επίσης διαγραφεί από τον πίνακα Υπαλλήλων.

Η επιλογή ON UPDATE CASCADE συμπεριφέρεται παρόμοια, αλλά ισχύει κατά την ενημέρωση της τιμής ID στον κατάλογο. Για παράδειγμα, εάν αλλάξουμε το αναγνωριστικό θέσης στον κατάλογο θέσεων, τότε σε αυτήν την περίπτωση το Αναγνωριστικό Τμήματος στον πίνακα Υπάλληλοι θα ενημερωθεί στη νέα τιμή αναγνωριστικού που ορίσαμε στον κατάλογο. Αλλά σε αυτή την περίπτωση, απλά δεν θα είναι δυνατό να αποδειχθεί αυτό, γιατί. η στήλη ID στον πίνακα Τμήματα έχει την επιλογή IDENTITY, η οποία θα μας εμποδίσει να εκτελέσουμε το ακόλουθο ερώτημα (αλλαγή ID τμήματος 3 σε 30):

ΕΝΗΜΕΡΩΣΗ Τμημάτων ΣΕΤ ID=30 ΟΠΟΥ ID=3
Το κυριότερο είναι να κατανοήσουμε την ουσία αυτών των 2 επιλογών ΣΤΟ ΔΙΑΓΡΑΦΗ ΚΑΖΑΔΑ και ΣΤΗΝ ΕΝΗΜΕΡΩΣΗ ΚΑΣΚΑΔΑ. Χρησιμοποιώ αυτές τις επιλογές σε πολύ σπάνιες περιπτώσεις και σας συνιστώ να σκεφτείτε προσεκτικά πριν τις προσδιορίσετε σε έναν περιορισμό αναφοράς. Εάν διαγράψετε κατά λάθος μια εγγραφή από τον πίνακα αναφοράς, αυτό μπορεί να οδηγήσει σε μεγάλα προβλήματα και να δημιουργήσει μια αλυσιδωτή αντίδραση.

Ας επαναφέρουμε το τμήμα 3:

Δώστε άδεια για προσθήκη/αλλαγή τιμών IDENTITY SET IDENTITY_INSERT Τμήματα ON INSERT Τμήματα(ID,Name) VALUES(3,N"IT") -- αρνηθείτε την προσθήκη/αλλαγή τιμών IDENTITY SET IDENTITY_INSERT Τμήματα OFF
Διαγράψτε πλήρως τον πίνακα Υπαλλήλων χρησιμοποιώντας την εντολή TRUNCATE TABLE:

TRUNCATE TABLE Εργαζόμενοι
Και πάλι, φορτώστε ξανά τα δεδομένα χρησιμοποιώντας την προηγούμενη εντολή INSERT:

INSERT Employees (ID, Name, Birthday, PositionID, DepartmentID, ManagerID) VALUES (1000,N"Ivanov II","19550219",2,1,NULL), (1001,N"Petrov P.P." "19831203",3 ,3,1003), (1002,N"Sidorov SS","19760607",1,2,1000), (1003,N"Andreev AA","19820417" ,4,3,1000)

Ας συνοψίσουμε

Αυτή τη στιγμή, μερικές ακόμη εντολές DDL έχουν προστεθεί στη γνώση μας:
  • Προσθήκη της ιδιότητας IDENTITY στο πεδίο - σας επιτρέπει να συμπληρώσετε αυτό το πεδίο αυτόματα (πεδίο μετρητή) για τον πίνακα.
  • ALTER TABLEόνομα_πίνακα ΠΡΟΣΘΗΚΗ list_of_fields_with_characteristics – σας επιτρέπει να προσθέσετε νέα πεδία στον πίνακα.
  • ALTER TABLEόνομα_πίνακα ΣΤΗΛΗ ΠΤΩΣΗΣ list_of_fields - σας επιτρέπει να αφαιρέσετε πεδία από τον πίνακα.
  • ALTER TABLEόνομα_πίνακα ΠΡΟΣΘΗΚΗ ΠΕΡΙΟΡΙΣΜΟΥπεριορισμός_όνομα ΞΕΝΟ ΚΛΕΙΔΙ(πεδία) ΒΙΒΛΙΟΓΡΑΦΙΚΕΣ ΑΝΑΦΟΡΕΣ lookup_table(πεδία) – σας επιτρέπει να ορίσετε μια σχέση μεταξύ ενός πίνακα και ενός πίνακα αναζήτησης.

Άλλοι περιορισμοί - ΜΟΝΑΔΙΚΟΣ, ΠΡΟΕΠΙΛΟΓΗ, ΕΛΕΓΧΟΣ

Με τον περιορισμό UNIQUE, μπορείτε να πείτε ότι η τιμή για κάθε σειρά σε ένα δεδομένο πεδίο ή σύνολο πεδίων πρέπει να είναι μοναδική. Στην περίπτωση του πίνακα Υπάλληλοι, μπορούμε να επιβάλουμε έναν τέτοιο περιορισμό στο πεδίο Email. Απλώς συμπληρώστε εκ των προτέρων το Email με τιμές εάν δεν έχουν ήδη καθοριστεί:

UPDATE Employees SET Email=" [email προστατευμένο]"WHERE ID=1000 UPDATE Employees SET Email=" [email προστατευμένο]" WHERE ID=1001 UPDATE Employees SET Email=" [email προστατευμένο]"WHERE ID=1002 UPDATE Employees SET Email=" [email προστατευμένο]" WHERE ID=1003
Και τώρα μπορείτε να επιβάλετε έναν μοναδικό περιορισμό σε αυτό το πεδίο:

ΑΛΛΑΓΗ ΠΙΝΑΚΑ Υπάλληλοι ΠΡΟΣΘΗΚΗ ΠΕΡΙΟΡΙΣΜΟΥ UQ_Employees_Email ΜΟΝΑΔΙΚΟ(Email)
Τώρα ο χρήστης δεν θα μπορεί να εισάγει το ίδιο E-Mail για πολλούς υπαλλήλους.

Ο περιορισμός μοναδικότητας συνήθως ονομάζεται ως εξής - πρώτα έρχεται το πρόθεμα "UQ_", μετά το όνομα του πίνακα και μετά την υπογράμμιση είναι το όνομα του πεδίου στο οποίο εφαρμόζεται αυτός ο περιορισμός.

Αντίστοιχα, εάν ένας συνδυασμός πεδίων πρέπει να είναι μοναδικός στο πλαίσιο των σειρών του πίνακα, τότε τα παραθέτουμε διαχωρισμένα με κόμματα:

ΑΛΛΑΓΗ ΠΙΝΑΚΑ_όνομα_πίνακα ΠΡΟΣΘΗΚΗ_όνομα_περιορισμού ΠΕΡΙΟΡΙΣΜΟΥ ΜΟΝΑΔΙΚΟ(πεδίο1,πεδίο2,…)
Προσθέτοντας έναν περιορισμό DEFAULT σε ένα πεδίο, μπορούμε να ορίσουμε μια προεπιλεγμένη τιμή που θα αντικατασταθεί εάν το πεδίο δεν αναφέρεται στη λίστα πεδίων εντολών INSERT όταν εισάγεται μια νέα εγγραφή. Αυτός ο περιορισμός μπορεί να οριστεί απευθείας κατά τη δημιουργία ενός πίνακα.

Ας προσθέσουμε ένα νέο πεδίο "Ημερομηνία πρόσληψης" στον πίνακα Υπαλλήλων και ας το ονομάσουμε HireDate και ας πούμε ότι η προεπιλεγμένη τιμή για αυτό το πεδίο θα είναι η τρέχουσα ημερομηνία:

ALTER TABLE Υπάλληλοι ΠΡΟΣΘΗΚΗ Ημερομηνία πρόσληψης NOT NULL DEFAULT SYSDATETIME()
Ή εάν η στήλη HireDate υπάρχει ήδη, τότε μπορεί να χρησιμοποιηθεί η ακόλουθη σύνταξη:

ALTER TABLE Employees ADD DEFAULT SYSDATETIME() FOR HireDate
Εδώ δεν προσδιόρισα το όνομα του περιορισμού, γιατί στην περίπτωση του DEFAULT, ήμουν της γνώμης ότι αυτό δεν είναι τόσο κρίσιμο. Αλλά αν το κάνεις με καλό τρόπο, τότε, νομίζω, δεν χρειάζεται να είσαι τεμπέλης και θα πρέπει να ορίσεις ένα κανονικό όνομα. Αυτό γίνεται ως εξής:

ALTER TABLE Employees ADD CONSTRAINT DF_Employees_HireDate DEFAULT SYSDATETIME() FOR HireDate
Επειδή αυτή η στήλη δεν υπήρχε πριν, όταν προστεθεί σε κάθε εγγραφή, η τρέχουσα τιμή ημερομηνίας θα εισαχθεί στο πεδίο HireDate.

Κατά την προσθήκη μιας νέας καταχώρισης, η τρέχουσα ημερομηνία θα εισαχθεί επίσης αυτόματα, φυσικά, εάν δεν την ορίσουμε ρητά, π.χ. δεν προσδιορίζεται στη λίστα στηλών. Ας το δείξουμε αυτό με ένα παράδειγμα χωρίς να καθορίσετε το πεδίο HireDate στη λίστα των προστιθέμενων τιμών:

INSERT Employees(ID,Όνομα,Email)VALUES(1004,N"Sergeev S.S."," [email προστατευμένο]")
Ας δούμε τι έγινε:

ΕΠΙΛΟΓΗ * ΑΠΟ Υπαλλήλους

ταυτότητα Ονομα Γενέθλια ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ Αναγνωριστικό θέσης ID Τμήματος Αναγνωριστικό διαχειριστή Ημερομηνία πρόσληψης
1000 Ιβάνοφ Ι.Ι. 1955-02-19 [email προστατευμένο] 2 1 ΜΗΔΕΝΙΚΟ 2015-04-08
1001 Petrov P.P. 1983-12-03 [email προστατευμένο] 3 4 1003 2015-04-08
1002 Sidorov S.S. 1976-06-07 [email προστατευμένο] 1 2 1000 2015-04-08
1003 Andreev A.A. 1982-04-17 [email προστατευμένο] 4 3 1000 2015-04-08
1004 Sergeev S.S. ΜΗΔΕΝΙΚΟ [email προστατευμένο] ΜΗΔΕΝΙΚΟ ΜΗΔΕΝΙΚΟ ΜΗΔΕΝΙΚΟ 2015-04-08

Ο περιορισμός ελέγχου CHECK χρησιμοποιείται όταν είναι απαραίτητο να ελεγχθούν οι τιμές που έχουν εισαχθεί στο πεδίο. Για παράδειγμα, ας επιβάλουμε αυτόν τον περιορισμό στο πεδίο αριθμού προσωπικού, που είναι το αναγνωριστικό υπαλλήλου (ID). Χρησιμοποιώντας αυτόν τον περιορισμό, ας υποθέσουμε ότι οι αριθμοί προσωπικού πρέπει να έχουν τιμή από 1000 έως 1999:

ALTER TABLE Υπάλληλοι ΠΡΟΣΘΗΚΗ ΠΕΡΙΟΡΙΣΜΟΥ CK_Employees_ID ΕΛΕΓΧΟΣ (αναγνωριστικό Μεταξύ 1000 ΚΑΙ 1999)
Ο περιορισμός συνήθως ονομάζεται το ίδιο, πρώτα με το πρόθεμα "CK_", μετά το όνομα του πίνακα και το όνομα του πεδίου στο οποίο εφαρμόζεται ο περιορισμός.

Ας προσπαθήσουμε να εισαγάγουμε μια μη έγκυρη καταχώρηση για να ελέγξουμε ότι ο περιορισμός λειτουργεί (θα πρέπει να λάβουμε το αντίστοιχο σφάλμα):

INSERT Employees(ID,Email) VALUES(2000" [email προστατευμένο]")
Τώρα ας αλλάξουμε την τιμή που θα εισαχθεί σε 1500 και ας βεβαιωθούμε ότι έχει εισαχθεί η εγγραφή:

INSERT Employees(ID,Email) VALUES(1500" [email προστατευμένο]")
Μπορείτε επίσης να δημιουργήσετε περιορισμούς UNIQUE και CHECK χωρίς να καθορίσετε όνομα:

ALTER TABLE Employees ADD UNIQUE(Email) ALTER TABLE Employees ADD CHECK (αναγνωριστικό μεταξύ 1000 ΚΑΙ 1999)
Αλλά αυτό δεν είναι καλή πρακτική και είναι καλύτερο να προσδιορίσετε ρητά το όνομα του περιορισμού, επειδή για να καταλάβετε αργότερα τι θα είναι πιο δύσκολο, θα χρειαστεί να ανοίξετε το αντικείμενο και να δείτε για τι ευθύνεται.

Με ένα καλό όνομα, πολλές πληροφορίες σχετικά με έναν περιορισμό μπορούν να μάθουν απευθείας από το όνομά του.

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

DROP TABLE Υπάλληλοι
Και δημιουργήστε το ξανά με όλους τους περιορισμούς που δημιουργήθηκαν με μία εντολή CREATE TABLE:

CREATE TABLE Employees(ID int NOT NULL, Name nvarchar(30), Birthday date, Email nvarchar(30), PositionID int, DepartmentID int, HireDate NOT NULL DEFAULT SYSDATETIME(), -- για ΠΡΟΕΠΙΛΟΓΗ θα ρίξω ένα PPK_EmployeRI KEY εξαίρεση (ID), CONSTRAINT FK_Employees_DepartmentID ΞΕΝΟ ΚΛΕΙΔΙ(DepartmentID) REFERENCES Τμήματα(ID), CONSTRAINT FK_Employees_PositionID ΞΕΝΟ ΚΛΕΙΔΙ(Αναγνωριστικό θέσης) ΑΝΑΦΟΡΕΣ θέσεις (ID), CONSTRAINT UQEEmailHE_EmployeEN

INSERT Employees (ID,Όνομα,Γενέθλια,Email,PositionID,DepartmentID)VALUES (1000,N"Ivanov I.I.","19550219"," [email προστατευμένο]",2,1), (1001,N"Petrov P.P.","19831203"," [email προστατευμένο]",3,3), (1002,N"Sidorov S.S.","19760607"," [email προστατευμένο]",1,2), (1003,N"Andreev A.A.","19820417"," [email προστατευμένο]",4,3)

Λίγα λόγια για τα ευρετήρια που δημιουργούνται κατά τη δημιουργία περιορισμών ΠΡΩΤΕΥΟΥ ΚΛΕΙΔΙΟΥ και ΜΟΝΑΔΙΚΟΥ

Όπως μπορείτε να δείτε στο παραπάνω στιγμιότυπο οθόνης, κατά τη δημιουργία των περιορισμών PRIMARY KEY και UNIQUE, δημιουργήθηκαν αυτόματα ευρετήρια με τα ίδια ονόματα (PK_Employees και UQ_Employees_Email). Από προεπιλογή, το ευρετήριο για το πρωτεύον κλειδί δημιουργείται ως ΣΥΓΚΕΝΤΡΩΜΕΝΟ και για όλα τα άλλα ευρετήρια ως ΜΗ ΣΥΓΚΕΚΡΙΜΕΝΟ. Αξίζει να πούμε ότι η έννοια του συμπλέγματος ευρετηρίου δεν είναι διαθέσιμη σε όλα τα DBMS. Ένας πίνακας μπορεί να έχει μόνο ένα ΣΥΜΠΛΗΡΩΜΕΝΟ ευρετήριο. ΟΜΑΔΕΣ - σημαίνει ότι οι εγγραφές του πίνακα θα ταξινομηθούν με βάση αυτό το ευρετήριο, μπορεί επίσης να ειπωθεί ότι αυτό το ευρετήριο έχει άμεση πρόσβαση σε όλα τα δεδομένα του πίνακα. Είναι έτσι για να πούμε ο κύριος δείκτης του πίνακα. Για να το θέσω ακόμα πιο τραχύ, είναι ένας δείκτης βιδωμένος στο τραπέζι. Το ευρετήριο συμπλέγματος είναι ένα πολύ ισχυρό εργαλείο που μπορεί να βοηθήσει στη βελτιστοποίηση των ερωτημάτων, απλά να το έχετε υπόψη σας. Αν θέλουμε να πούμε ότι το συμπλεγμένο ευρετήριο δεν χρησιμοποιείται στο πρωτεύον κλειδί, αλλά για άλλο ευρετήριο, τότε κατά τη δημιουργία του πρωτεύοντος κλειδιού, πρέπει να καθορίσουμε την επιλογή NONCLUSTERED:

ΑΛΛΑΓΗ ΠΙΝΑΚΑ_όνομα πίνακα ΠΡΟΣΘΗΚΗ ΠΕΡΙΟΡΙΣΜΟΥ περιορισμού_όνομα ΚΥΡΙΑΚΟ ΚΛΕΙΔΙ ΜΗ ΣΥΜΠΛΗΡΩΜΕΝΟ(πεδίο1,πεδίο2,…)
Για παράδειγμα, ας κάνουμε το ευρετήριο περιορισμών PK_Employees μη ομαδοποιημένο και το ευρετήριο περιορισμών UQ_Employees_Email. Πρώτα απ 'όλα, ας καταργήσουμε αυτούς τους περιορισμούς:

ALTER TABLE Employees DROP CONSTRAINT PK_Employees ALTER TABLE Employees DROP CONSTRAINT UQ_Employees_Email
Και τώρα ας τα δημιουργήσουμε με τις επιλογές ΣΥΝΔΕΣΗ και ΜΗ ΣΥΝΔΕΤΗ:

ALTER TABLE Employees ADD CONSTRAINT PK_Employees PRIMARY KEY NONCLUSTERED (ID) ALTER TABLE Employees ΠΡΟΣΘΗΚΗ ΠΕΡΙΟΡΙΣΜΟΥ UQ_Employees_Email UNIQUE CLUSTERED (Email)
Τώρα, όταν επιλέγουμε από τον πίνακα Εργαζόμενοι, μπορούμε να δούμε ότι οι εγγραφές ταξινομούνται με βάση το συμπλεγμένο ευρετήριο UQ_Employees_Email:

ΕΠΙΛΟΓΗ * ΑΠΟ Υπαλλήλους

ταυτότητα Ονομα Γενέθλια ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ Αναγνωριστικό θέσης ID Τμήματος Ημερομηνία πρόσληψης
1003 Andreev A.A. 1982-04-17 [email προστατευμένο] 4 3 2015-04-08
1000 Ιβάνοφ Ι.Ι. 1955-02-19 [email προστατευμένο] 2 1 2015-04-08
1001 Petrov P.P. 1983-12-03 [email προστατευμένο] 3 3 2015-04-08
1002 Sidorov S.S. 1976-06-07 [email προστατευμένο] 1 2 2015-04-08

Πριν από αυτό, όταν το ευρετήριο συμπλέγματος ήταν το ευρετήριο PK_Employees, οι εγγραφές ταξινομούνταν από προεπιλογή με βάση το πεδίο ID.

Αλλά σε αυτήν την περίπτωση, αυτό είναι απλώς ένα παράδειγμα που δείχνει την ουσία του ομαδοποιημένου δείκτη, επειδή. Πιθανότατα, θα γίνουν ερωτήματα στον πίνακα Εργαζόμενοι από το πεδίο ID και σε ορισμένες περιπτώσεις μπορεί να λειτουργήσει το ίδιο ως αναφορά.

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

Ο ομαδοποιημένος δείκτης είναι χρήσιμος να εφαρμόζεται στα πεδία που επιλέγονται πιο συχνά.

Μερικές φορές οι πίνακες δημιουργούν ένα κλειδί με ένα υποκατάστατο πεδίο, οπότε είναι χρήσιμο να διατηρήσετε την επιλογή CLUSTERED index για πιο κατάλληλο ευρετήριο και να καθορίσετε την επιλογή NONCLUSTERED όταν δημιουργείτε ένα υποκατάστατο πρωτεύον κλειδί.

Ας συνοψίσουμε

Σε αυτό το στάδιο, εξοικειωθήκαμε με όλους τους τύπους περιορισμών, στην απλούστερη μορφή τους, οι οποίοι δημιουργούνται με μια εντολή όπως "ALTER TABLE table_name ADD CONSTRAINT constraint_name...":
  • ΠΡΩΤΕΥΩΝ ΚΛΕΙΔΙ- πρωτεύων κλειδί;
  • ΞΕΝΟ ΚΛΕΙΔΙ- δημιουργία συνδέσμων και παρακολούθηση της αναφορικής ακεραιότητας των δεδομένων.
  • ΜΟΝΑΔΙΚΟΣ- σας επιτρέπει να δημιουργήσετε μοναδικότητα.
  • ΕΛΕΓΧΟΣ- σας επιτρέπει να πραγματοποιήσετε την ορθότητα των καταχωρισμένων δεδομένων.
  • ΠΡΟΚΑΘΟΡΙΣΜΕΝΟ– σας επιτρέπει να ορίσετε την προεπιλεγμένη τιμή.
  • Αξίζει επίσης να σημειωθεί ότι όλοι οι περιορισμοί μπορούν να αφαιρεθούν χρησιμοποιώντας την εντολή " ALTER TABLEόνομα_πίνακα ΠΤΩΣΗ ΠΕΡΙΟΡΙΣΜΟΥπεριορισμός_όνομα".
Επίσης θίξαμε εν μέρει το θέμα των δεικτών και αναλύσαμε την έννοια του cluster ( ΟΜΑΔΕΣ) και μη ομαδοποιημένα ( ΜΗ ΣΥΓΚΕΚΡΙΜΕΝΟΣ) ευρετήριο.

Δημιουργία αυτόνομων ευρετηρίων

Η αυτάρκεια εδώ αναφέρεται σε ευρετήρια που δεν έχουν δημιουργηθεί για περιορισμό ΠΡΩΤΟΓΕΝΙΚΟ ΚΛΕΙΔΙ ή ΜΟΝΑΔΙΚΟ.

Τα ευρετήρια σε ένα πεδίο ή πεδία μπορούν να δημιουργηθούν με την ακόλουθη εντολή:

CREATE INDEX IDX_Employees_Name ON Employees(Name)
Μπορείτε επίσης να καθορίσετε τις επιλογές CLUSTERED, NONCLUSTERED, UNIQUE εδώ και μπορείτε επίσης να καθορίσετε την κατεύθυνση ταξινόμησης για κάθε μεμονωμένο πεδίο ASC (προεπιλογή) ή DESC:

ΔΗΜΙΟΥΡΓΙΑ ΜΟΝΑΔΙΚΟΥ ΜΗ ΣΥΓΚΕΝΤΡΩΜΕΝΟΥ ΕΥΡΕΤΗΡΙΟΥ UQ_Employees_EmailDesc ON Employees(Email DESC)
Κατά τη δημιουργία ενός ευρετηρίου χωρίς συμπλέγματα, η επιλογή NONCLUSTERED μπορεί να παραλειφθεί, όπως υπονοείται από προεπιλογή, εμφανίζεται εδώ απλώς για να υποδείξει τη θέση της επιλογής CLUSTERED ή NONCLUSTERED στην εντολή.

Μπορείτε να αφαιρέσετε το ευρετήριο με την ακόλουθη εντολή:

ΑΠΟΣΤΟΛΗ INDEX IDX_Employees_Name ON Employees
Απλά ευρετήρια, όπως και οι περιορισμοί, μπορούν να δημιουργηθούν στο πλαίσιο της εντολής CREATE TABLE.

Για παράδειγμα, ας διαγράψουμε ξανά τον πίνακα:

DROP TABLE Υπάλληλοι
Και δημιουργήστε το ξανά με όλους τους δημιουργημένους περιορισμούς και ευρετήρια με μία εντολή CREATE TABLE:

CREATE TABLE Employees(ID int NOT NULL, Όνομα nvarchar(30), Ημερομηνία γέννησης, Email nvarchar(30), PositionID int, DepartmentID int, HireDate NOT NULL CONSTRAINT DF_Employees_HireDate DEFAULT SYSDATETEmployeID (Διευθυντής) ), Constraint fk_employese_depaplandsid ξένο κλειδί (Department) Τμήματα αναφοράς (ID), Constimation FK_employes_positionid Ξένων Κλειδί (identid) Θέσεις αναφοράς (ID), Constimation FK_Employes_ManagerIn Ξένων Κλειδί (DIANDORID) Αναφορές Υπάλληλοι (ID), Constimation UQ_Employese_Email Uniq Έλεγχος (ID μεταξύ 1000 και 1999), INDEX IDX_Employees_Name(Name))
Τέλος, εισάγετε στον πίνακα των εργαζομένων μας:

INSERT Employees (ID,Όνομα,Γενέθλια,Email,PositionID,DepartmentID,ManagerID)VALUES (1000,N"Ivanov II","19550219"," [email προστατευμένο]",2,1,NULL), (1001,N"Petrov P.P.","19831203"," [email προστατευμένο]",3,3,1003), (1002,N"Sidorov S.S.","19760607"," [email προστατευμένο]",1,2,1000), (1003,N"Andreev A.A.","19820417"," [email προστατευμένο]",4,3,1000)
Επιπλέον, αξίζει να σημειωθεί ότι οι τιμές μπορούν να συμπεριληφθούν σε ένα μη ομαδοποιημένο ευρετήριο, προσδιορίζοντάς τες στο INCLUDE. Εκείνοι. Σε αυτήν την περίπτωση, το ευρετήριο ΕΝΙΣΧΥΕΙ θα μοιάζει κάπως με ένα ομαδοποιημένο ευρετήριο, μόνο που τώρα το ευρετήριο δεν είναι προσαρτημένο στον πίνακα, αλλά οι απαραίτητες τιμές επισυνάπτονται στο ευρετήριο. Αντίστοιχα, τέτοια ευρετήρια μπορούν να βελτιώσουν σημαντικά την απόδοση των επιλεγμένων ερωτημάτων (SELECT), εάν όλα τα πεδία που αναφέρονται είναι στο ευρετήριο, τότε είναι πιθανό να μην χρειαστεί καθόλου πρόσβαση στον πίνακα. Αυτό όμως αυξάνει φυσικά το μέγεθος του δείκτη, γιατί οι τιμές των πεδίων που αναφέρονται αντιγράφονται στο ευρετήριο.

Απόκομμα από το MSDN.Γενική σύνταξη εντολών για τη δημιουργία ευρετηρίων

ΔΗΜΙΟΥΡΓΙΑ [ΜΟΝΑΔΙΚΟ] [ΣΥΝΔΕΤΗ | ΜΗ ΣΥΜΠΛΗΡΩΜΕΝΟ ] INDEX index_name ΕΝΕΡΓΟ (στήλη [ ASC | DESC ] [ ,...n ]) [ ΠΕΡΙΛΑΜΒΑΝΕΙ (όνομα_στήλης [ ,...n ]) ]

Ας συνοψίσουμε

Τα ευρετήρια μπορούν να αυξήσουν την ταχύτητα ανάκτησης δεδομένων (SELECT), αλλά τα ευρετήρια μειώνουν την ταχύτητα ενημέρωσης δεδομένων πίνακα, επειδή Μετά από κάθε τροποποίηση, το σύστημα θα πρέπει να δημιουργήσει ξανά όλα τα ευρετήρια για έναν συγκεκριμένο πίνακα.

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

Συμπέρασμα για το DDL

Όπως μπορείτε να δείτε, η γλώσσα DDL δεν είναι τόσο περίπλοκη όσο μπορεί να φαίνεται με την πρώτη ματιά. Εδώ μπόρεσα να δείξω σχεδόν όλα τα κύρια σχέδια του, χρησιμοποιώντας μόνο τρεις πίνακες.

Το κύριο πράγμα είναι να κατανοήσουμε την ουσία, και τα υπόλοιπα είναι θέμα εξάσκησης.

Καλή τύχη στην εκμάθηση αυτής της υπέροχης γλώσσας που ονομάζεται SQL.

Structured Query Language (δομημένη γλώσσα ερωτημάτων) ή SQL- είναι μια δηλωτική γλώσσα προγραμματισμού για χρήση σε οιονεί σχεσιακές βάσεις δεδομένων. Πολλά από τα αρχικά χαρακτηριστικά της SQL καταλήφθηκαν από πολλαπλούς λογισμούς, αλλά οι πρόσφατες επεκτάσεις στην SQL περιλαμβάνουν όλο και περισσότερη σχεσιακή άλγεβρα.
Η SQL δημιουργήθηκε αρχικά από την IBM, αλλά πολλοί προμηθευτές έχουν αναπτύξει τις δικές τους διαλέκτους. Εγκρίθηκε ως πρότυπο από το Αμερικανικό Εθνικό Ινστιτούτο Προτύπων (ANSI) το 1986 και από το ISO το 1987. Στο Πρότυπο γλώσσας προγραμματισμού SQL, το ANSI δήλωσε ότι η επίσημη προφορά της SQL είναι "es cue el". Ωστόσο, πολλοί ειδικοί στη βάση δεδομένων χρησιμοποίησαν την προφορά "Slang" "Sequel", που αντικατοπτρίζει το αρχικό όνομα της γλώσσας, Sequel, το οποίο αργότερα άλλαξε λόγω διενέξεων εμπορικών σημάτων και ονομάτων στην IBM. Προγραμματισμός για αρχάριους.
Γλώσσα προγραμματισμού SQLαναθεωρήθηκε το 1992 και αυτή η έκδοση είναι γνωστή ως SQL-92's. Στη συνέχεια, το 1999 αναθεωρήθηκε ξανά για να γίνει SQL: 1999 (γνωστός και ως SQL3). Προγραμματισμός για ανδρείκελα. Το SQL 1999 υποστηρίζει αντικείμενα που δεν υποστηρίζονταν προηγουμένως σε άλλες εκδόσεις, αλλά μόνο στο τέλος του 2001, μόνο μερικά συστήματα διαχείρισης βάσεων δεδομένων υποστήριζαν εφαρμογές SQL: 1999.
Η SQL, αν και ορίζεται ως ANSI και ISO, έχει πολλές παραλλαγές και επεκτάσεις, οι περισσότερες από τις οποίες έχουν τα δικά τους χαρακτηριστικά, όπως η υλοποίηση "PL/SQL" της εταιρείας Oracle ή η υλοποίηση της Sybase και της Microsoft που ονομάζεται "Transact-SQL", η οποία μπορεί να μπερδεύουν τον χρήστη.τα βασικά του προγραμματισμού. Επίσης, δεν είναι ασυνήθιστο οι εμπορικές υλοποιήσεις να παραλείπουν την υποστήριξη για βασικά χαρακτηριστικά του προτύπου, όπως τύπους δεδομένων όπως η ημερομηνία και η ώρα, προς όφελος ορισμένων δικών τους. Ως αποτέλεσμα, σε αντίθεση με το ANSI C ή το ANSI Fortran, τα οποία συνήθως μπορούν να μεταφερθούν από πλατφόρμα σε πλατφόρμα χωρίς σημαντικές δομικές αλλαγές, τα ερωτήματα της γλώσσας προγραμματισμού SQL σπάνια μπορούν να μεταφερθούν μεταξύ διαφορετικών συστημάτων βάσης δεδομένων χωρίς σημαντικές τροποποιήσεις. Οι περισσότεροι άνθρωποι στο πεδίο της βάσης δεδομένων πιστεύουν ότι αυτή η έλλειψη διαλειτουργικότητας είναι σκόπιμη προκειμένου να παράσχει σε κάθε προγραμματιστή το δικό του σύστημα διαχείρισης βάσης δεδομένων και να συνδέσει τον αγοραστή με μια συγκεκριμένη βάση δεδομένων.
Όπως υποδηλώνει το όνομα, η γλώσσα προγραμματισμού SQL έχει σχεδιαστεί για έναν συγκεκριμένο, περιορισμένο σκοπό - την αναζήτηση των δεδομένων που περιέχονται σε μια σχεσιακή βάση δεδομένων. Ως εκ τούτου, είναι ένα σύνολο οδηγιών γλώσσας προγραμματισμού για τη δημιουργία δειγμάτων δεδομένων, αντί για μια διαδικαστική γλώσσα όπως η C ή η BASIC, που έχουν σχεδιαστεί για να επιλύουν ένα πολύ ευρύτερο φάσμα προβλημάτων. Οι επεκτάσεις γλώσσας όπως το "PL/SQL" έχουν σχεδιαστεί για να αντιμετωπίσουν αυτόν τον περιορισμό προσθέτοντας διαδικαστικά στοιχεία στην SQL διατηρώντας τα πλεονεκτήματα της SQL. Μια άλλη προσέγγιση είναι να επιτρέπεται στα ερωτήματα SQL να ενσωματώνουν εντολές διαδικαστικής γλώσσας προγραμματισμού και να αλληλεπιδρούν με τη βάση δεδομένων. Για παράδειγμα, η Oracle και άλλοι υποστηρίζουν τη γλώσσα Java στη βάση δεδομένων, ενώ η PostgreSQL επιτρέπει την εγγραφή συναρτήσεων σε Perl, Tcl ή C.
Ένα αστείο SQL: "Η SQL δεν είναι ούτε δομημένη ούτε γλώσσα." Το θέμα του αστείου είναι ότι η SQL δεν είναι γλώσσα Turing. .

Επιλέξτε * από το Τ
Γ1 Γ2
1 ένα
2 σι
Γ1 Γ2
1 ένα
2 σι
Επιλέξτε C1 από T
Γ1
1
2
Γ1 Γ2
1 ένα
2 σι
Επιλέξτε * από το T όπου C1=1
Γ1 Γ2
1 ένα

Δεδομένου ενός πίνακα T, ένα ερώτημα Select * από T θα εμφανίσει όλα τα στοιχεία όλων των σειρών του πίνακα.
Από τον ίδιο πίνακα, ένα ερώτημα Select C1 από T θα εμφανίσει τα στοιχεία από τη στήλη C1 όλων των σειρών του πίνακα.
Από τον ίδιο πίνακα, το ερώτημα Select * από το T όπου C1=1 θα εμφανίσει όλα τα στοιχεία όλων των σειρών όπου η τιμή της στήλης C1 είναι "1".

λέξεις-κλειδιά SQL

Οι λέξεις SQL χωρίζονται σε διάφορες ομάδες.

Το πρώτο είναι Γλώσσα χειρισμού δεδομένων ή DML(γλώσσα διαχείρισης δεδομένων). Το DML είναι ένα υποσύνολο της γλώσσας που χρησιμοποιείται για την υποβολή ερωτημάτων σε βάσεις δεδομένων, την προσθήκη, την ενημέρωση και τη διαγραφή δεδομένων.

  • Το SELECT είναι μια από τις πιο συχνά χρησιμοποιούμενες εντολές DML και επιτρέπει στο χρήστη να καθορίσει ένα ερώτημα ως περιγραφή του επιθυμητού αποτελέσματος ως σύνολο. Το ερώτημα δεν προσδιορίζει πώς θα πρέπει να τακτοποιηθούν τα αποτελέσματα - η μετάφραση του ερωτήματος σε μια φόρμα που μπορεί να γίνει στη βάση δεδομένων είναι δουλειά του συστήματος της βάσης δεδομένων, πιο συγκεκριμένα του προγράμματος βελτιστοποίησης ερωτημάτων.
  • Το INSERT χρησιμοποιείται για την προσθήκη γραμμών (επίσημο σύνολο) σε έναν υπάρχοντα πίνακα.
  • Το UPDATE χρησιμοποιείται για την αλλαγή των τιμών δεδομένων σε μια υπάρχουσα σειρά πίνακα.
  • Το DELETE καθορίζει τις υπάρχουσες σειρές που θα αφαιρεθούν από τον πίνακα.

Τρεις άλλες λέξεις-κλειδιά μπορούμε να πούμε ότι εμπίπτουν στην ομάδα DML:

  • Το BEGIN WORK (ή START TRANSACTION, ανάλογα με τη διάλεκτο της SQL) μπορεί να χρησιμοποιηθεί για την επισήμανση της έναρξης μιας συναλλαγής βάσης δεδομένων που είτε θα εκτελεστεί πλήρως είτε δεν θα εκτελεστεί καθόλου.
  • Το COMMIT δηλώνει ότι όλες οι αλλαγές δεδομένων μετά την εκτέλεση της λειτουργίας αποθηκεύονται.
  • Το ROLLBACK καθορίζει ότι όλα τα δεδομένα αλλάζουν από την τελευταία δέσμευση ή επαναφορά θα πρέπει να καταστραφούν, μέχρι το σημείο που δεσμεύτηκε στη βάση δεδομένων ως "επαναστροφή".

Το COMMIT και το ROLLBACK χρησιμοποιούνται σε τομείς όπως ο έλεγχος συναλλαγών και τα λουκέτα. Και οι δύο εντολές ολοκληρώνουν όλες τις τρέχουσες συναλλαγές (σύνολα λειτουργιών βάσης δεδομένων) και απελευθερώνουν όλα τα λουκέτα για την αλλαγή δεδομένων σε πίνακες. Η παρουσία ή η απουσία μιας δήλωσης BEGIN WORK ή παρόμοιας δήλωσης εξαρτάται από τη συγκεκριμένη υλοποίηση της SQL.

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

  • Το CREATE καθορίζει τα αντικείμενα (όπως πίνακες) που θα δημιουργηθούν στη βάση δεδομένων.
  • Το DROP καθορίζει ποια υπάρχοντα αντικείμενα στη βάση δεδομένων θα απορριφθούν, συνήθως μόνιμα.
  • Ορισμένα συστήματα βάσεων δεδομένων υποστηρίζουν επίσης την εντολή ALTER, η οποία επιτρέπει στο χρήστη να τροποποιήσει ένα υπάρχον αντικείμενο με διαφορετικούς τρόπους, όπως η προσθήκη στηλών σε έναν υπάρχοντα πίνακα.

Η τρίτη ομάδα λέξεων-κλειδιών SQL είναι Γλώσσα ελέγχου δεδομένων ή DCL (Γλώσσα ελέγχου δεδομένων). DCLείναι υπεύθυνος για τα δικαιώματα πρόσβασης στα δεδομένα και επιτρέπει στον χρήστη να ελέγχει ποιος έχει πρόσβαση για προβολή ή χειρισμό των δεδομένων στη βάση δεδομένων. Υπάρχουν δύο κύριες λέξεις-κλειδιά εδώ.

Καλώς ήρθατε στη σφαίρα της ανάπτυξης βάσεων δεδομένων που γίνεται με την τυπική γλώσσα ερωτημάτων SQL. Τα συστήματα διαχείρισης βάσεων δεδομένων (DBMS) διαθέτουν πολλά εργαλεία που τρέχουν σε μια μεγάλη ποικιλία πλατφορμών υλικού.

  • Βασικές αρχές σχεσιακής βάσης δεδομένων

    Σε αυτό το κεφάλαιο... | Οργάνωση πληροφοριών | Τι είναι μια βάση δεδομένων | Τι είναι ένα DBMS | Σύγκριση μοντέλων βάσεων δεδομένων | Τι είναι μια σχεσιακή βάση δεδομένων

  • Βασικά στοιχεία SQL

    Σε αυτό το κεφάλαιο… | Τι είναι η SQL | Παρανοήσεις SQL | Μια ματιά σε διαφορετικά πρότυπα SQL | Εισαγωγή στις τυπικές εντολές SQL και τις δεσμευμένες λέξεις | Αναπαράσταση αριθμών, συμβόλων, ημερομηνιών, ωρών και άλλων τύπων δεδομένων | Μηδενικές τιμές και περιορισμοί

  • Στοιχεία SQL

    Σε αυτό το κεφάλαιο... | Δημιουργία βάσης δεδομένων | Επεξεργασία δεδομένων | Προστασία βάσης δεδομένων | Η SQL είναι μια γλώσσα ειδικά σχεδιασμένη για τη δημιουργία και τη διατήρηση δεδομένων σε σχεσιακές βάσεις δεδομένων. Αν και οι εταιρείες που παρέχουν συστήματα για τη διαχείριση τέτοιων βάσεων δεδομένων προσφέρουν τις δικές τους υλοποιήσεις SQL, η ανάπτυξη της ίδιας της γλώσσας καθορίζεται και ελέγχεται από το πρότυπο ISO/ANSI.

  • Δημιουργία και διατήρηση μιας απλής βάσης δεδομένων

    Σε αυτό το κεφάλαιο… | Δημιουργία, τροποποίηση και διαγραφή πίνακα από μια βάση δεδομένων χρησιμοποιώντας το εργαλείο RAD. | Δημιουργία, τροποποίηση και διαγραφή πίνακα από βάση δεδομένων χρησιμοποιώντας SQL. | Μεταφορά βάσης δεδομένων σε άλλο DBMS.

  • Δημιουργία σχεσιακής βάσης δεδομένων πολλών πινάκων

    Σε αυτό το κεφάλαιο… | Τι πρέπει να υπάρχει στη βάση δεδομένων | Καθορισμός σχέσεων μεταξύ στοιχείων βάσης δεδομένων | Σύνδεση πινάκων με χρήση πλήκτρων | Σχεδιασμός ακεραιότητας δεδομένων | Κανονικοποίηση βάσης δεδομένων | Αυτό το κεφάλαιο θα παρουσιάσει ένα παράδειγμα δημιουργίας βάσης δεδομένων πολλών πινάκων.

  • Χειρισμός δεδομένων από τη βάση δεδομένων

    Σε αυτό το κεφάλαιο... | Εργασία με δεδομένα | Λήψη των απαιτούμενων δεδομένων από τον πίνακα | Εμφάνιση πληροφοριών επιλεγμένων από έναν ή περισσότερους πίνακες | Ενημέρωση πληροφοριών σε πίνακες και προβολές | Προσθήκη νέας σειράς σε πίνακα

  • Ορισμός αξιών

    Σε αυτό το κεφάλαιο... | Χρήση μεταβλητών για μείωση της περιττής κωδικοποίησης | Λήψη πληροφοριών που ζητούνται συχνά σε ένα πεδίο πίνακα βάσης δεδομένων | Συνδυασμός απλών τιμών για τη δημιουργία σύνθετων εκφράσεων | Αυτό το βιβλίο υπογραμμίζει συνεχώς πόσο σημαντική είναι η δομή της βάσης δεδομένων για τη διατήρηση της ακεραιότητας μιας βάσης δεδομένων.

  • Σύνθετες εκφράσεις με νόημα

    Σε αυτό το κεφάλαιο... | Χρήση παραστάσεων υπό όρους περίπτωση | Μετατροπή στοιχείου δεδομένων από έναν τύπο δεδομένων σε έναν άλλο | Εξοικονομήστε χρόνο εισαγωγής δεδομένων με εκφράσεις με τιμή εγγραφής | Στο Κεφάλαιο 2, η SQL αναφέρθηκε ως υπογλώσσα δεδομένων.

  • «Σκοποβολή» στα σωστά δεδομένα

    Σε αυτό το κεφάλαιο... | Καθορισμός απαιτούμενων πινάκων | Διαχωρισμός των απαραίτητων γραμμών από όλες τις άλλες | Δημιουργία αποτελεσματικών ρητρών όπου | Πώς να εργαστείτε με μηδενικές τιμές | Δημιουργία σύνθετων εκφράσεων με λογικούς συνδέσμους | Ομαδοποίηση αποτελεσμάτων ερωτήματος ανά στήλη

  • Σχεσιακούς τελεστές

    Σε αυτό το κεφάλαιο... | Συγχώνευση πινάκων με παρόμοια δομή | Συγχώνευση πινάκων με διαφορετική δομή | Λήψη των σωστών δεδομένων από πολλούς πίνακες | Η SQL είναι μια γλώσσα ερωτημάτων που χρησιμοποιείται σε σχεσιακές βάσεις δεδομένων.

  • Χρήση ένθετων ερωτημάτων

    Σε αυτό το κεφάλαιο… | Ανάκτηση δεδομένων από πολλούς πίνακες με μία πρόταση SQL | Εύρεση στοιχείων δεδομένων συγκρίνοντας μια τιμή από έναν πίνακα με ένα σύνολο τιμών από έναν άλλο | Εύρεση στοιχείων δεδομένων συγκρίνοντας μια τιμή από έναν πίνακα με μια μεμονωμένη τιμή που έχει επιλεγεί χρησιμοποιώντας μια πρόταση επιλογής από μια άλλη

  • Αναδρομικά ερωτήματα

  • Ασφάλεια βάσης δεδομένων

    Σε αυτό το κεφάλαιο… | Έλεγχος πρόσβασης πίνακα βάσης δεδομένων | Λήψη απόφασης για χορήγηση πρόσβασης | Εκχώρηση Δικαιωμάτων Πρόσβασης | Ανάκληση Εξουσιοδοτήσεων Πρόσβασης | Αποτροπή προσπαθειών μη εξουσιοδοτημένης πρόσβασης

  • Προστασία δεδομένων

    Σε αυτό το κεφάλαιο... | Πώς να αποφύγετε την καταστροφή της βάσης δεδομένων | Προβλήματα που προκαλούνται από ταυτόχρονες λειτουργίες | Επίλυση αυτών των προβλημάτων με μηχανισμούς SQL | Ρύθμιση του απαιτούμενου επιπέδου ασφαλείας με την εντολή set συναλλαγής

  • Χρήση SQL σε εφαρμογές

    Σε αυτό το κεφάλαιο... | SQL σε εφαρμογή | Κοινή χρήση SQL με διαδικαστικές γλώσσες | Πώς να αποφύγετε την ασυμβατότητα | Κώδικας SQL ενσωματωμένος σε διαδικαστικό κώδικα | Κλήση μονάδων SQL από διαδικαστικό κώδικα | Κλήση SQL από το εργαλείο RAD | Στα προηγούμενα κεφάλαια, εξετάσαμε κυρίως τις εντολές SQL μεμονωμένα, δηλ. διαμορφώθηκε μια εργασία επεξεργασίας δεδομένων και δημιουργήθηκε ένα ερώτημα SQL για αυτήν.

  • ODBC και JDBC

    Σε αυτό το κεφάλαιο... | Ορισμός ODBC | Περιγραφή εξαρτημάτων ODBC | Χρήση ODBC σε περιβάλλον πελάτη/διακομιστή | Χρήση ODBC στο Διαδίκτυο | Χρήση ODBC σε τοπικά δίκτυα | Χρήση JDBC | Κάθε χρόνο, οι υπολογιστές ενός οργανισμού ή πολλών διαφορετικών οργανισμών συνδέονται όλο και περισσότερο μεταξύ τους. Επομένως, υπάρχει ανάγκη να δημιουργηθεί κοινόχρηστη πρόσβαση σε βάσεις δεδομένων μέσω του δικτύου.

  • SQL:2003 και XML

    Σε αυτό το κεφάλαιο... | Χρήση SQL με XML | XML, βάσεις δεδομένων και Διαδίκτυο | Ένα από τα πιο σημαντικά νέα χαρακτηριστικά της γλώσσας SQL:2003 είναι η υποστήριξη αρχείων επεκτάσιμης γλώσσας σήμανσης (XML), τα οποία γίνονται όλο και περισσότερο το καθολικό πρότυπο για την ανταλλαγή δεδομένων μεταξύ ετερογενών πλατφορμών.

  • Δρομείς

    Σε αυτό το κεφάλαιο... | Οριοθέτηση δρομέα σε δήλωση δήλωσης | Άνοιγμα δρομέα | Δειγματοληψία δεδομένων σειράς | Κλείσιμο δρομέα | Η SQL διαφέρει από τις περισσότερες από τις πιο δημοφιλείς γλώσσες προγραμματισμού στο ότι εκτελεί λειτουργίες ταυτόχρονα στα δεδομένα όλων των σειρών ενός πίνακα, ενώ οι διαδικαστικές γλώσσες επεξεργάζονται δεδομένα σειρά προς σειρά.

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

    Τι χρειάζεσαι?

    SQL (Structured Query Language) μια γλώσσα ειδικά σχεδιασμένη για να αλληλεπιδρά με συστήματα διαχείρισης βάσεων δεδομένων όπως π.χ MySQL, Oracle, Sqlite και άλλοι ... Να αποδώσει SQL αιτήματα σε αυτό το άρθρο, σας συμβουλεύω να εγκαταστήσετε MySQL στον τοπικό υπολογιστή. Επίσης προτείνω τη χρήση phpMyAdmin ως οπτική διεπαφή.

    Όλα αυτά είναι διαθέσιμα στο αγαπημένο σε όλους Ντένβερ. Νομίζω ότι όλοι πρέπει να ξέρουν τι είναι και πού να το βρουν :). Μπορώδιαφορετικά χρησιμοποιήστε WAMP ή MAMP.

    Το Ντένβερ έχει ενσωματωμένο MySQL κονσόλα. Θα το χρησιμοποιήσουμε.

    ΔΗΜΙΟΥΡΓΙΑ ΒΑΣΗΣ ΔΕΔΟΜΕΝΩΝ:δημιουργία βάσης δεδομένων

    Εδώ είναι το πρώτο μας αίτημα. Θα δημιουργήσουμε την πρώτη μας βάση δεδομένων για περαιτέρω εργασία.

    Για να ξεκινήσετε, ανοίξτε MySQL κονσόλα και σύνδεση. Για WAMP ο προεπιλεγμένος κωδικός πρόσβασης είναι κενός. Αυτό δεν είναι τίποτα :). Για MAMP - "ρίζα". Το Ντένβερ πρέπει να διευκρινιστεί.

    Αφού συνδεθείτε, εισάγετε την ακόλουθη γραμμή και κάντε κλικΕισαγω:

    ΔΗΜΙΟΥΡΓΙΑ ΒΑΣΗΣ ΔΕΔΟΜΕΝΩΝ my_first_db;

    Σημειώστε ότι ένα ερωτηματικό (;) προστίθεται στο τέλος του ερωτήματος, όπως και σε άλλες γλώσσες.

    Επίσης εντολές σε SQL διάκριση πεζών-κεφαλαίων. Τα γράφουμε με κεφαλαία γράμματα.

    Επιλογές μόνο: σετ χαρακτήρακαι Αντιπαραβολή

    Εάν θέλετε να εγκαταστήσετεσύνολο χαρακτήρων (σύνολο χαρακτήρων) και συγκρότηση (σύγκριση) μπορεί γράψε την παρακάτω εντολή:

    ΔΗΜΙΟΥΡΓΙΑ ΒΑΣΗΣ ΔΕΔΟΜΕΝΩΝ my_first_db ΠΡΟΕΠΙΛΟΓΗΜΕΝΟ ΣΥΝΟΛΟ ΧΑΡΑΚΤΗΡΩΝ utf8 ΣΥΓΚΡΟΤΗΜΑ utf8_general_ci;

    Βρείτε μια λίστα με σύνολα χαρακτήρων που υποστηρίζονται MySQL.

    ΕΜΦΑΝΙΣΗ ΒΑΣΕΩΝ ΔΕΔΟΜΕΝΩΝ:παραθέτει όλες τις βάσεις δεδομένων

    Αυτή η εντολή χρησιμοποιείται για την εμφάνιση όλων των διαθέσιμων βάσεων δεδομένων.

    ΑΠΟΣΤΟΛΗ ΒΑΣΗΣ ΔΕΔΟΜΕΝΩΝ:διαγραφή της βάσης δεδομένων

    Μπορείτε να αποθέσετε ένα υπάρχον db με αυτό το ερώτημα.

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

    ΧΡΗΣΗ:Επιλογή βάσης δεδομένων

    Τεχνικά, αυτό δεν είναι ερώτημα, αλλά τελεστής και δεν απαιτεί ερωτηματικό στο τέλος.

    Λέει στη MySQL επιλέξτε μια βάση δεδομένων που θα λειτουργεί από προεπιλογή για την τρέχουσα περίοδο λειτουργίας. Τώρα είμαστε έτοιμοι να δημιουργήσουμε πίνακες και να κάνουμε άλλα πράγματα με τη βάση δεδομένων.

    Τι είναι ένας πίνακας σε μια βάση δεδομένων;

    Μπορείτε να αναπαραστήσετε έναν πίνακα στη βάση δεδομένων ωςαρχείο excel.

    Όπως στην εικόνα, οι πίνακες έχουν ονόματα στηλών, σειρές και πληροφορίες. Μέσω SQL ερωτήματα μπορούμε να δημιουργήσουμε τέτοιους πίνακες. Μπορούμε επίσης να προσθέσουμε, να διαβάσουμε, να ενημερώσουμε και να διαγράψουμε πληροφορίες.

    ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ: Δημιουργήστε έναν πίνακα

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

    Το παρακάτω ερώτημα θα δημιουργήσει έναν πίνακα με 2 στήλες.

    χρήστες CREATE TABLE (όνομα χρήστη VARCHAR(20), create_date DATE);

    Σημειώστε ότι μπορούμε να γράψουμε τα ερωτήματά μας σε πολλές γραμμές και με καρτέλες για εσοχή.

    Η πρώτη γραμμή είναι απλή. Απλώς δημιουργούμε έναν πίνακα που ονομάζεται "χρήστες". Στη συνέχεια, μέσα σε παρένθεση, χωρισμένη με κόμμα, υπάρχει μια λίστα με όλες τις στήλες. Μετά το όνομα κάθε στήλης, έχουμε τύπους πληροφοριών όπως VARCHAR ή DATE.

    VARCHAR(20) σημαίνει ότι η στήλη είναι τύπου string και μπορεί να έχει μήκος έως 20 χαρακτήρες. Το DATE είναι επίσης ένας τύπος πληροφοριών που χρησιμοποιείται για την αποθήκευση ημερομηνιών σε αυτήν τη μορφή: "ΕΕΕΕ - ΜΜ-ΗΗ".

    ΠΡΩΤΕΥΩΝ ΚΛΕΙΔΙ ( πρωτεύων κλειδίη)

    Πριν εκτελέσουμε το επόμενο ερώτημα, πρέπει επίσης να συμπεριλάβουμε μια στήλη για το "user_id ", η οποία θα είναι το κύριο κλειδί μας. Μπορείτε να σκεφτείτε το PRIMARY KEY ως πληροφορίες που χρησιμοποιούνται για τον προσδιορισμό κάθε σειράς σε έναν πίνακα.

    χρήστες CREATE TABLE (user_id INT AUTO_INCREMENT PRIMARY KEY, όνομα χρήστη VARCHAR(20), create_date DATE);

    INT κάνει έναν ακέραιο τύπο 32 bit (όπως αριθμοί).ΑΥΤΟΜΑΤΗ ΑΥΞΗΣΗ δημιουργεί αυτόματα μια νέα τιμήταυτότητα κάθε φορά που προσθέτουμε νέες σειρές πληροφοριών. Αυτό δεν απαιτείται, αλλά διευκολύνει την όλη διαδικασία.

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

    Ας εκτελέσουμε ένα ερώτημα:

    ΔΕΙΤΕ ΠΙΝΑΚΕΣ:εμφάνιση όλων των πινάκων

    Αυτό το ερώτημα σάς επιτρέπει να λάβετε μια λίστα πινάκων που βρίσκονται στη βάση δεδομένων.

    ΕΞΗΓΩ:Εμφάνιση δομής πίνακα

    Μπορείτε να χρησιμοποιήσετε αυτό το ερώτημα για να εμφανίσετε τη δομή ενός υπάρχοντος πίνακα.

    Εμφανίζονται στήλες με όλες τις ιδιότητες.

    ΠΡΩΤΟΠΟΙΗΣΗ ΤΡΑΠΕΖΙΟΥ:διαγραφή πίνακα

    Ακριβώς όπως ΑΠΟΣΤΟΛΗ ΒΑΣΕΩΝ ΔΕΔΟΜΕΝΩΝ, αυτό το ερώτημα απορρίπτει τον πίνακα και τα περιεχόμενά του χωρίς προειδοποίηση.

    ΑΛΛΑΓΗ ΠΙΝΑΚΑΣ: αλλαγή πίνακα

    Αυτό το ερώτημα μπορεί επίσης να περιέχει μια σύνθετη δομή λόγω των περισσότερων αλλαγών που μπορεί να κάνει στον πίνακα. Ας δούμε παραδείγματα.

    (αν διαγράψατε τον πίνακα στο τελευταίο βήμα, δημιουργήστε τον ξανά για δοκιμές)

    ΠΡΟΣΘΗΚΗ ΣΤΗΛΗΣ

    ALTER TABLE χρήστες ΠΡΟΣΘΗΚΗ email VARCHAR(100) ΜΕΤΑ το όνομα χρήστη.

    Λόγω της καλής αναγνωσιμότητας της SQL, νομίζω ότι δεν έχει νόημα να το εξηγήσω λεπτομερώς. Προσθέτουμε μια νέα στήλη "email" μετά το "username".

    ΑΦΑΙΡΕΣΗ ΣΤΗΛΗΣ

    Ήταν επίσης πολύ εύκολο. Χρησιμοποιήστε αυτό το ερώτημα με προσοχή, καθώς τα δεδομένα ενδέχεται να διαγραφούν χωρίς προειδοποίηση.

    Επαναφέρετε τη στήλη που μόλις διαγράψατε για περαιτέρω πειραματισμό.

    ΚΑΝΤΕ ΑΛΛΑΓΗ ΣΕ ΜΙΑ ΣΤΗΛΗ

    Μερικές φορές μπορεί να θέλετε να κάνετε αλλαγές στις ιδιότητες μιας στήλης και δεν χρειάζεται να την αφαιρέσετε εντελώς για να το κάνετε.

    Αυτό το ερώτημα μετονόμασε τη στήλη χρήστη σε "user_name " και άλλαξε τον τύπο της από VARCHAR(20) σε VARCHAR(30). Μια τέτοια αλλαγή δεν θα πρέπει να αλλάξει τα δεδομένα στον πίνακα.

    ΕΙΣΑΓΕΤΕ: Προσθήκη πληροφοριών σε πίνακα

    Ας προσθέσουμε μερικές πληροφορίες στον πίνακα χρησιμοποιώντας το ακόλουθο ερώτημα.

    Όπως μπορείτε να δείτε, η VALUES() περιέχει μια λίστα τιμών διαχωρισμένων με κόμματα. Όλες οι τιμές περικλείονται σε μεμονωμένες στήλες. Και οι τιμές πρέπει να είναι με τη σειρά των στηλών που καθορίστηκαν κατά τη δημιουργία του πίνακα.

    Λάβετε υπόψη ότι η πρώτη τιμή είναι NULL για το πεδίο ΠΡΩΤΙΚΟ ΚΛΕΙΔΙ που ονομάζεται "user_id". Αυτό το κάνουμε για να δημιουργηθεί αυτόματα το αναγνωριστικό, αφού η στήλη έχει την ιδιότητα AUTO_INCREMENT. Όταν προστεθούν πληροφορίες για πρώτη φορά, το αναγνωριστικό θα είναι 1. Η επόμενη σειρά θα είναι 2 και ούτω καθεξής...

    ΕΝΑΛΛΑΚΤΙΚΗ ΕΠΙΛΟΓΗ

    Υπάρχει μια άλλη επιλογή ερωτήματος για την προσθήκη σειρών.

    Αυτή τη φορά χρησιμοποιούμε τη λέξη-κλειδί SET αντί για VALUES και δεν έχει παρενθέσεις. Υπάρχουν πολλές αποχρώσεις:

    Η στήλη μπορεί να παραλειφθεί. Για παράδειγμα, δεν εκχωρήσαμε μια τιμή στο "user_id ", το οποίο θα λάβει την τιμή AUTO_INCREMENT από προεπιλογή. Εάν παραλείψετε μια στήλη VARCHAR, τότε θα προστεθεί μια κενή συμβολοσειρά.

    Κάθε στήλη πρέπει να αναφέρεται ονομαστικά. Εξαιτίας αυτού, μπορούν να αναφέρονται με οποιαδήποτε σειρά, σε αντίθεση με την προηγούμενη έκδοση.

    ΕΝΑΛΛΑΚΤΙΚΗ 2

    Εδώ είναι μια άλλη επιλογή.

    Και πάλι, καθώς υπάρχουν αναφορές στο όνομα της στήλης, μπορείτε να καθορίσετε τις τιμές με οποιαδήποτε σειρά.

    LAST_INSERT_ID()

    Μπορείτε να χρησιμοποιήσετε αυτό το ερώτημα για να λάβετε το αναγνωριστικό που ήταν AUTO_INCREMENT για την τελευταία σειρά της τρέχουσας περιόδου σύνδεσης.

    ΤΩΡΑ()

    Τώρα ήρθε η ώρα να σας δείξουμε πώς μπορείτε να χρησιμοποιήσετε μια συνάρτηση MySQL σε ερωτήματα.

    Η συνάρτηση NOW() επιστρέφει την τρέχουσα ημερομηνία. Έτσι, μπορείτε να το χρησιμοποιήσετε για να ορίσετε αυτόματα την ημερομηνία μιας στήλης στην τρέχουσα όταν εισάγετε μια νέα σειρά.

    Σημειώστε ότι λάβαμε 1 προειδοποίηση, αλλά αγνοήστε την. Ο λόγος για αυτό είναι ότι το NOW() χρησιμεύει επίσης για την εμφάνιση προσωρινών πληροφοριών.

    ΕΠΙΛΕΓΩ: Ανάγνωση δεδομένων από πίνακα

    Αν προσθέσουμε πληροφορίες σε έναν πίνακα, τότε θα ήταν λογικό να μάθουμε πώς να τις διαβάζουμε από εκεί. Εδώ θα μας βοηθήσει το ερώτημα SELECT.

    Παρακάτω είναι το απλούστερο δυνατό ερώτημα SELECT για να διαβάσετε έναν πίνακα.

    Σε αυτήν την περίπτωση, ο αστερίσκος (*) σημαίνει ότι έχουμε ζητήσει όλα τα πεδία από τον πίνακα. Εάν θέλετε μόνο συγκεκριμένες στήλες, το ερώτημα θα μοιάζει με αυτό.

    ΚατάστασηΠΟΥ

    Τις περισσότερες φορές, δεν μας ενδιαφέρουν όλες οι στήλες, αλλά μόνο μερικές. Για παράδειγμα, ας υποθέσουμε ότι χρειαζόμαστε μόνο τη διεύθυνση email του χρήστη "nettuts".

    Το WHERE σάς επιτρέπει να ορίσετε συνθήκες σε ένα ερώτημα και να κάνετε λεπτομερείς επιλογές.

    Σημειώστε ότι η ισότητα χρησιμοποιεί ένα σύμβολο ίσου (=) αντί για δύο όπως στον προγραμματισμό.

    Μπορείτε επίσης να χρησιμοποιήσετε συγκρίσεις.

    Το AND ή OR μπορεί να χρησιμοποιηθεί για τον συνδυασμό συνθηκών:

    Σημειώστε ότι οι αριθμητικές τιμές δεν πρέπει να βρίσκονται σε εισαγωγικά.

    ΣΕ()

    Αυτό είναι χρήσιμο για δειγματοληψία σε πολλαπλές τιμές.

    ΑΡΕΣΕΙ

    Σας επιτρέπει να κάνετε αιτήματα "μπαλαντέρ".

    Το σύμβολο % χρησιμοποιείται ως "μπαλαντέρ". Δηλαδή, στη θέση του μπορεί να είναι οτιδήποτε.

    ΚατάστασηΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ

    Εάν θέλετε να πάρετε το αποτέλεσμα σε μια διατεταγμένη μορφή με κάποιο κριτήριο

    Η προεπιλεγμένη σειρά είναι ASC (από το μικρότερο στο μεγαλύτερο). Για το αντίστροφο, χρησιμοποιείται DESC.

    ΟΡΙΟ ... ΜΕΤΑΦΟΡΑ ...

    Μπορείτε να περιορίσετε τον αριθμό των αποτελεσμάτων που λαμβάνετε.

    Το LIMIT 2 παίρνει μόνο τα 2 πρώτα αποτελέσματα. LIMIT 1 OFFSET 2 παίρνει 1 αποτέλεσμα μετά τα πρώτα 2. LIMIT 2, 1 σημαίνει το ίδιο (απλώς παρατηρήστε ότι η μετατόπιση έρχεται πρώτα και μετά το όριο).

    ΕΚΣΥΓΧΡΟΝΙΖΩ: Κάντε αλλαγές στις πληροφορίες του πίνακα

    Αυτό το ερώτημα χρησιμοποιείται για την αλλαγή πληροφοριών σε έναν πίνακα.

    Στις περισσότερες περιπτώσεις, χρησιμοποιείται σε συνδυασμό με την ρήτρα WHERE, καθώς πιθανότατα θα θέλετε να κάνετε αλλαγές σε ορισμένες στήλες. Εάν δεν υπάρχει όρος WHERE, οι αλλαγές θα επηρεάσουν όλες τις σειρές.

    Μπορείτε επίσης να χρησιμοποιήσετε το LIMIT για να περιορίσετε τον αριθμό των σειρών που πρέπει να τροποποιηθούν.

    ΔΙΑΓΡΑΦΩ: Αφαίρεση πληροφοριών από πίνακα

    Ακριβώς όπως το UPDATE, αυτό το ερώτημα χρησιμοποιείται με WHERE:

    Για να αφαιρέσετε τα περιεχόμενα ενός πίνακα, μπορείτε απλά να κάνετε αυτό:

    ΔΙΑΓΡΑΦΗ ΑΠΟ χρήστες.

    Αλλά είναι καλύτερο να το χρησιμοποιήσετεΚΟΛΟΒΟΣ

    Εκτός από τη διαγραφή, αυτό το ερώτημα επαναφέρει επίσης τις τιμέςΑΥΤΟΜΑΤΗ ΑΥΞΗΣΗ και όταν προσθέσετε ξανά σειρές, η αντίστροφη μέτρηση θα ξεκινήσει από το μηδέν.ΔΙΑΓΡΑΦΩ δεν το κάνει και η αντίστροφη μέτρηση συνεχίζεται.

    Απενεργοποίηση τιμών συμβολοσειράς και ειδικών λέξεων

    τιμές συμβολοσειρών

    Ορισμένοι χαρακτήρες πρέπει να απενεργοποιηθούν (διαφυγή ), ή μπορεί να υπάρχουν προβλήματα.

    Για αυτό, χρησιμοποιείται μια ανάστροφη κάθετο.(\).

    Ειδικές λέξεις

    Γιατί στη MySQL υπάρχουν πολλές ιδιαίτερες λέξειςΕΠΙΛΟΓΗ ή ΕΝΗΜΕΡΩΣΗ ), για την αποφυγή σφαλμάτων κατά τη χρήση τους, πρέπει να χρησιμοποιούνται εισαγωγικά. Όχι όμως συνηθισμένα εισαγωγικά, αλλά αυτά(`).

    Δηλαδή, θα χρειαστεί να προσθέσετε μια στήλη με το όνομα "διαγράφω ", πρέπει να το κάνετε ως εξής:

    συμπέρασμα

    Σας ευχαριστώ που διαβάσατε μέχρι το τέλος. Ελπίζω ότι αυτό το άρθρο ήταν χρήσιμο για εσάς. Δεν έχει τελειώσει ακόμα! Συνεχίζεται:).