Μετάβαση από το διάγραμμα ER στο μοντέλο πίνακα

Η εργασία με βάσεις δεδομένων σχετίζεται άμεσα με την αλλαγή των πινάκων και των δεδομένων που περιέχουν. Αλλά πριν ξεκινήσετε, πρέπει να δημιουργηθούν πίνακες. Για την αυτοματοποίηση αυτής της διαδικασίας, υπάρχει ένα ειδικό - "ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ".

Το πρώτο πράγμα!

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

Πρώτα απ 'όλα, πρέπει να βρείτε ένα όνομα για τον πίνακα - πρέπει να είναι μοναδικός σε σύγκριση με άλλους στη βάση δεδομένων και να ακολουθεί αρκετούς κανόνες. Το όνομα πρέπει να ξεκινά με ένα γράμμα (a-z), ακολουθούμενο από τυχόν γράμματα, αριθμούς ή υπογράμμιση και η φράση που προκύπτει δεν πρέπει να είναι δεσμευμένη λέξη. Το μήκος του ονόματος του πίνακα δεν πρέπει να υπερβαίνει τους 18 χαρακτήρες.

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

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

Σύνταξη

Έχοντας αναπτύξει τη δομή του πίνακα, μπορείτε να προχωρήσετε στη δημιουργία του. Αυτό μπορεί να γίνει πολύ απλά χρησιμοποιώντας τη συνάρτηση SQL "CREATE TABLE". Σε αυτό, ο χρήστης πρέπει να καθορίσει το όνομα του πίνακα που επινοήθηκε προηγουμένως και τη λίστα στηλών, υποδεικνύοντας τον τύπο και το όνομα για καθένα από αυτά. Η σύνταξη της συνάρτησης είναι η εξής:

ΔΗΜΙΟΥΡΓΙΑ TABLE table_name
((τύπος δεδομένων ονόματος_στήλης …| πίνακα_περιορισμός)
[,(τύπος δεδομένων_όνομα_στήλης …| περιορισμός_πίνακας)]…)

Τα ορίσματα που χρησιμοποιούνται στην κατασκευή της συνάρτησης σημαίνουν τα εξής:

  • table_name - όνομα πίνακα
  • στήλη_όνομα - όνομα στήλης
  • datatype - ο τύπος δεδομένων που χρησιμοποιείται σε αυτό το πεδίο
  • Το DEFAULT είναι η προεπιλεγμένη έκφραση που χρησιμοποιείται στη στήλη.

Είναι επίσης δυνατό να χρησιμοποιηθούν δύο ακόμη ορίσματα συνάρτησης:

  • στήλη_περιορισμός - παραμέτρους στήλης
  • table_constraint - παράμετροι πίνακα

Σε αυτά, ο χρήστης μπορεί να καθορίσει τους περιορισμούς που απαιτούνται για την εργασία ή τις προϋποθέσεις για τη συμπλήρωση του πίνακα.

Χαρακτηριστικά δημιουργίας πινάκων

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

Για να προσδιορίσετε εάν ένα κελί μπορεί να περιέχει μια κενή τιμή, αφού καθορίσετε το όνομα και τον τύπο της στήλης, θα πρέπει να εισαγάγετε μία από τις λέξεις-κλειδιά: NULL (μπορεί να υπάρχουν κενές τιμές) ή NOT NULL (το πεδίο πρέπει να συμπληρωθεί).

Όταν δημιουργείτε έναν πίνακα, στις περισσότερες περιπτώσεις πρέπει να ενοποιήσετε κάθε εγγραφή για να αποφύγετε δύο πανομοιότυπες. Για να γίνει αυτό, η αρίθμηση γραμμών χρησιμοποιείται συχνότερα. Και, για να μην απαιτείται από τον χρήστη να γνωρίζει τελευταίο τεύχοςπου υπάρχει στον πίνακα, στη συνάρτηση "ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ" αρκεί να καθορίσετε τη στήλη του πρωτεύοντος κλειδιού γράφοντας λέξη-κλειδί"Κύριο κλειδί" μετά το αντίστοιχο πεδίο. Τις περισσότερες φορές, οι πίνακες ενώνονται μεταξύ τους μέσω του πρωτεύοντος κλειδιού.

Για να εξασφαλιστεί η συνένωση με το Κύριο κλειδί, χρησιμοποιείται η ιδιότητα ξένου κλειδιού "ΞΕΝΟ ΚΛΕΙΔΙ". Καθορίζοντας αυτήν την ιδιότητα για μια στήλη, μπορείτε να διασφαλίσετε ότι αυτό το πεδίο θα περιέχει μια τιμή που ταιριάζει με μία από αυτές στη στήλη πρωτεύοντος κλειδιού του ίδιου ή άλλου πίνακα. Με αυτόν τον τρόπο, μπορεί να διασφαλιστεί η συνέπεια των δεδομένων.

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

Εκτός από αυτά που παρουσιάζονται, η συνάρτηση έχει πολλά πιο συγκεκριμένα χαρακτηριστικά, αλλά χρησιμοποιούνται πολύ λιγότερο συχνά στην πράξη.

Παραδείγματα

Για να κατανοήσουμε πλήρως την αρχή λειτουργίας της συνάρτησης, αξίζει να εξετάσουμε στην πράξη πώς λειτουργεί το CREATE TABLE (SQL). Το παρακάτω παράδειγμα δημιουργεί τον πίνακα που φαίνεται στο σχήμα:

ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ Προσαρμοσμένη
(ID CHAR(10) NOT NULL Πρωτεύον κλειδί,
Προσαρμοσμένο_όνομα CHAR(20),
Προσαρμοσμένη_διεύθυνση CHAR(30),
Custom_city CHAR(20),
Custom_Country CHAR(20),
ArcDate CHAR(20))

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

Μετά τη δημιουργία κενών πινάκων, το επόμενο λογικό βήμα είναι να τους συμπληρώσετε με δεδομένα και να ενημερώσετε αυτά τα δεδομένα. Υπάρχουν μερικές δηλώσεις στο Transact-SQL για αυτό: ΕΙΣΑΓΩΓΗ - ΕΝΗΜΕΡΩΣΗ.

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

Πλήρωση πινάκων

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

  • οπτικά πιο καθαρό?
  • Είναι πιο βολικό εάν οι πίνακες συμπληρώνονται σταδιακά.

Για να λάβετε την ακόλουθη προβολή πίνακα:

ΤΑΥΤΟΤΗΤΑ. Ενοικιαστής

Ημερομηνια γεννησης

Αριθμός διαμερίσματος

Διεύθυνση ηλεκτρονικού ταχυδρομείου

Αλεξίν. V.V.

Gorbunov D.D.

[email προστατευμένο]

Simonova K.R.

Dormitotova K.S.

[email προστατευμένο]

Θα χρειαστεί να το δημιουργήσετε χρησιμοποιώντας ΔΗΜΙΟΥΡΓΙΑ ΤΡΑΠΕΖΙΟΥκαι συμπληρώστε το χρησιμοποιώντας την πρόταση INSERT. Επόμενες οδηγίεςπροσθέτει μια σειρά στον πίνακα συγκατοίκων που έχουμε ήδη δημιουργήσει:

Διαγράφω προηγούμενη έκδοσητραπέζια DROP TABLE συγκατοίκοι? -- Δημιουργήστε έναν πίνακα. CREATE TABLE housemates(housemeateID int NOT NULL CONSTRAINT Primar_id PRIMARY KEY, housemateName nvarchar(30) NOT NULL, BithDate NOT NULL, αριθμός διαμερίσματος int NOT NULL, Email nvarchar(30)); -- Εισαγάγετε δεδομένα στον πίνακα ΧΡΗΣΗ GO INSERT INTO ( , , , ,) ΤΙΜΕΣ (100"Aleksin V.V.","19721122",11," [email προστατευμένο]"), (101,"Gorbunov D.D.","19220525",25," [email προστατευμένο]"), (102," Simonova K.R. "," 19560211 ", 13," [email προστατευμένο]"), (103"Dormitotova K.S.","19770815",9," [email προστατευμένο]")

Στο παραπάνω παράδειγμα, πρέπει να κάνουμε διάκριση μεταξύ δύο μπλοκ της κατασκευής INSERT:

ΣΕ- δείχνει τον πίνακα στον οποίο προστίθενται δεδομένα

ΑΞΙΕΣ- αρχικοποίηση εισόδου γραμμής.

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

INSERT INTO VALUES (100"Aleksin. V.V.","19721122",11," [email προστατευμένο]"), (101,"Gorbunov D.D.","19220525",25," [email προστατευμένο]"), (102," Simonova K.R. "," 19560211 ", 13," [email προστατευμένο]"), (103"Dormitotova K.S.","19770815",9," [email προστατευμένο]")

Εάν πρέπει να αλλάξετε τη σειρά πλήρωσης, τότε αυτό πρέπει να αναφέρεται ρητά:

INSERT INTO (,,, ,) ΤΙΜΕΣ ("Alexin. V.V.",101,"19721122"," [email προστατευμένο]",11), ("Gorbunov D.D.",102,"19220525"," [email προστατευμένο]",25), ("Simonova K.R",103,"19560211"," [email προστατευμένο]",13) ("Dormitotova K.S.",104,"19770815"," [email προστατευμένο]",9)

Στο μπλοκ VALUES, η προετοιμασία γραμμής προς σειρά εκτελείται με τη σειρά των στηλών του μπλοκ INTO. Η συμπλήρωση σειράς είναι μια λίστα τιμών κελιών σε παρένθεση. Οι τιμές παρατίθενται χωρισμένες με κόμμα και οι γραμμές χωρίζονται η μία από την άλλη.

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

Ενημέρωση πίνακα

Η ανάγκη ενημέρωσης πινάκων προκύπτει εάν είναι απαραίτητο να αλλάξουν δεδομένα που έχουν ήδη εισαχθεί στον πίνακα. Εκτελείται με χρήση οδηγιών ΕΚΣΥΓΧΡΟΝΙΖΩ. Εάν το INSERT λειτουργεί μόνο με άδειους πίνακες, τότε το UPDATE λειτουργεί μόνο με γεμάτους. Εάν το αίτημα απευθύνεται σε άδεια κελιά, θα προκύψει σφάλμα.

Ο παρακάτω κωδικός θα εκχωρήσει έναν νέο Γραμματοκιβώτιοσε κάτοικο οικίας με αριθμό ταυτότητας 103.

ΕΝΗΜΕΡΩΣΗ συγκατοίκων SET Email = " [email προστατευμένο]" WHERE housemeateID = 103

ΟΙΚΟΔΟΜΙΚΟ ΤΕΤΡΑΓΩΝΟ ΣΕΙΡΑ- αυτό είναι ένα μπλοκ αλλαγών. Εάν χρειάζεται να ενημερώσετε την τιμή πολλών κελιών, παρατίθενται διαχωρισμένα με κόμματα.

ΕΝΗΜΕΡΩΣΗ συγκατοίκων SET Email = " [email προστατευμένο]", housemateName = "Rurik S.S." WHERE housemeateID = 103

Αλλαγή τραπεζιού

Στα τελευταία στάδια του σχεδιασμού ή μετά την ανάπτυξη της βάσης, συχνά προκύπτει η ανάγκη:

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

Για όλες αυτές τις λειτουργίες υπάρχει μια εντολή παράκαμψης. ΤΡΑΠΕΖΙ ΑΤΕΡ.

Για να προσθέσετε μια στήλη, η πρόταση ALTER TABLE χρησιμοποιείται με τον όρο ADD. Ας προσθέσουμε μια νέα στήλη στον πίνακα συγκατοίκων από την προηγούμενη ενότητα:

ALTER TABLE συγκατοίκοι ΠΡΟΣΘΗΚΗ Αριθμός τηλεφώνου nvarchar(12) NULL;

Πρέπει να εφαρμόσετε μια πρόταση σε αυτό ΑΛΤΕΡ ΣΤΗΛΗμέσα στο ALTER TABLE:

ALTER TABLE συγκατοίκοι ALTER COLUMN PhoneNumber char(25) NOT NULL;

Καταργεί μια στήλη χρησιμοποιώντας ΣΤΗΛΗ ΠΤΩΣΗΣμέσα στο ALTER TABLE:

ALTER TABLE συγκατοίκοι DROP COLUMN PhoneNumber;

Το πρωτεύον ή ξένο κλειδί αφαιρείται και προστίθεται χρησιμοποιώντας τις κατασκευές ALTER TABLE ADD CONSTRAINT/DROP CONSTRAINT, αντίστοιχα:

Καταργήστε έναν περιορισμό πρωτεύοντος κλειδιού από τη στήλη housemeateID ΑΛΛΑΓΗ ΠΙΝΑΚΑ συγκατοίκους DROP CONSTRAINT main_id. --Ορίστε τη στήλη housemeateID ως πρωτεύον κλειδί ALTER TABLE housemates ADD CONSTRAINT PK_ID PRIMARY KEY (HousemeateID).

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

ALTER TABLE συγκατοίκοι DROP CONSTRAINT PK_ID; ΑΛΛΑΞΤΕ ΤΡΑΠΕΖΑ συγκατοίκους ΠΡΟΣΘΗΚΗ ΠΕΡΙΟΡΙΣΜΟΥ PK_ID,PK_AN ΚΥΡΙΟ ΚΛΕΙΔΙ (κρέας σπιτιού, αριθμός διαμερίσματος).

SQL - Μάθημα 3. Δημιουργία πινάκων και συμπλήρωσή τους με πληροφορίες

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

Το Id_user είναι ακέραιες τιμές, που σημαίνει ότι ο τύπος θα είναι int, ας τον περιορίσουμε σε 10 χαρακτήρες - int (10).
Το όνομα είναι μια τιμή συμβολοσειράς varchar, ας την περιορίσουμε στους 20 χαρακτήρες - varchar(20).
Το email είναι μια τιμή συμβολοσειράς varchar, ας την περιορίσουμε στους 50 χαρακτήρες - varchar(50).
Ο κωδικός πρόσβασης είναι μια τιμή συμβολοσειράς varchar, θα τον περιορίσουμε στους 15 χαρακτήρες - varchar(15).

Απαιτούνται όλες οι τιμές πεδίων, πράγμα που σημαίνει ότι πρέπει να προσθέσετε τον τύπο NOT NULL.

Id_user int (10) ΟΧΙ NULL
όνομα varchar(20) ΟΧΙ NULL
email varchar(50) ΟΧΙ NULL

Η πρώτη στήλη, όπως θυμάστε από το εννοιολογικό μοντέλο της βάσης δεδομένων μας, είναι το πρωτεύον κλειδί (δηλαδή, οι τιμές της είναι μοναδικές και προσδιορίζουν μοναδικά την εγγραφή). Είναι δυνατό να παρακολουθείτε τη μοναδικότητα μόνοι σας, αλλά δεν είναι λογικό. Υπάρχει ένα ειδικό χαρακτηριστικό στην SQL για αυτό - ΑΥΤΟΜΑΤΗ ΑΥΞΗΣΗ, το οποίο, κατά την πρόσβαση στον πίνακα για προσθήκη δεδομένων, υπολογίζει τη μέγιστη τιμή αυτής της στήλης, αυξάνει την τιμή που προκύπτει κατά 1 και την εισάγει στη στήλη. Έτσι, ένας μοναδικός αριθμός δημιουργείται αυτόματα σε αυτήν τη στήλη και επομένως ο τύπος NOT NULL είναι περιττός. Λοιπόν, ας αντιστοιχίσουμε ένα χαρακτηριστικό στη στήλη με το πρωτεύον κλειδί:


όνομα varchar(20) ΟΧΙ NULL
email varchar(50) ΟΧΙ NULL
κωδικός πρόσβασης varchar(15) ΟΧΙ NULL

Τώρα πρέπει να καθορίσουμε ότι το πεδίο id_user είναι το πρωτεύον κλειδί. Για να γίνει αυτό, η SQL χρησιμοποιεί τη λέξη-κλειδί ΠΡΩΤΕΥΩΝ ΚΛΕΙΔΙ(), το όνομα του πεδίου κλειδιού υποδεικνύεται σε αγκύλες. Ας κάνουμε αλλαγές:

Id_user int (10) AUTO_INCREMENT
όνομα varchar(20) ΟΧΙ NULL
email varchar(50) ΟΧΙ NULL
κωδικός πρόσβασης varchar(15) ΟΧΙ NULL
ΚΥΡΙΟ ΚΛΕΙΔΙ (id_user)

Έτσι, ο πίνακας είναι έτοιμος και η τελική του έκδοση μοιάζει με αυτό:

Δημιουργία χρηστών πίνακα (
id_user int (10) AUTO_INCREMENT,
όνομα varchar(20) ΟΧΙ NULL,
email varchar(50) ΟΧΙ NULL,
κωδικός πρόσβασης varchar(15) ΟΧΙ NULL,
ΚΥΡΙΟ ΚΛΕΙΔΙ (id_user)
);

Τώρα ας δούμε τον δεύτερο πίνακα - θέματα. Με το ίδιο επιχείρημα, έχουμε τα ακόλουθα πεδία:



id_author int (10) ΟΧΙ NULL
ΚΥΡΙΟ ΚΛΕΙΔΙ (id_topic)

Αλλά στο μοντέλο της βάσης δεδομένων μας, το πεδίο id_author είναι ένα ξένο κλειδί, δηλ. μπορεί να έχει μόνο τις τιμές που βρίσκονται στο πεδίο id_user του πίνακα χρηστών. Για να υποδειχθεί αυτό στην SQL υπάρχει μια λέξη-κλειδί ΞΕΝΟ ΚΛΕΙΔΙ(), το οποίο έχει την ακόλουθη σύνταξη:

ΞΕΝΟ ΚΛΕΙΔΙ (όνομα_στήλης_που_είναι_ξένο_κλειδί) ΑΝΑΦΟΡΕΣ γονικό_όνομα_πίνακα (όνομα_στήλης_γονέα);

Ας υποδείξουμε ότι το id_author είναι ξένο κλειδί:

Id_topic int (10) AUTO_INCREMENT
topic_name varchar(100) NOT NULL
id_author int (10) ΟΧΙ NULL
ΚΥΡΙΟ ΚΛΕΙΔΙ (id_topic)
ΞΕΝΟ ΚΛΕΙΔΙ (id_author) ΑΝΑΦΟΡΕΣ χρήστες (id_user)

Ο πίνακας είναι έτοιμος και η τελική του έκδοση μοιάζει με αυτό:

Δημιουργία θεμάτων πίνακα (
id_topic int (10) AUTO_INCREMENT,
topic_name varchar(100) NOT NULL,

ΚΥΡΙΟ ΚΛΕΙΔΙ (id_topic),
ΞΕΝΟ ΚΛΕΙΔΙ (id_author) ΑΝΑΦΟΡΕΣ χρήστες (id_user)
);

Ο τελευταίος πίνακας που απομένει είναι οι αναρτήσεις. Όλα είναι παρόμοια εδώ, μόνο δύο ξένα κλειδιά:

Δημιουργία αναρτήσεων πίνακα (
id_post int (10) AUTO_INCREMENT,
κείμενο μηνύματος NOT NULL,
id_author int (10) NOT NULL,
id_topic int (10) ΟΧΙ NULL,
ΚΥΡΙΟ ΚΛΕΙΔΙ (id_post),
ΞΕΝΟ ΚΛΕΙΔΙ (id_author) ΑΝΑΦΟΡΕΣ χρήστες (id_user),
ΞΕΝΟ ΚΛΕΙΔΙ (id_topic) ΑΝΑΦΟΡΕΣ θέματα (id_topic)
);

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

Ας ξεκινήσουμε Διακομιστής MySQL(Έναρξη - Προγράμματα - MySQL - MySQL Server 5.1 - MySQL Command Line Client), εισαγάγετε τον κωδικό πρόσβασης, δημιουργήστε ένα φόρουμ βάσης δεδομένων (δημιουργία φόρουμ βάσης δεδομένων;), επιλέξτε το για χρήση (χρήση φόρουμ;) και δημιουργήστε τους τρεις πίνακές μας:

Λάβετε υπόψη ότι μια εντολή μπορεί να γραφτεί σε πολλές γραμμές χρησιμοποιώντας το κλειδί Enter (Η MySQL αντικαθιστά αυτόματα το σύμβολο νέα γραμμή->), και μόνο μετά το διαχωριστικό (ερωτηματικό) πατώντας το πλήκτρο Enter εκτελείται το ερώτημα.

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

Έτσι, δημιουργούνται οι πίνακες, για να το βεβαιωθούμε, ας θυμηθούμε την ομάδα εμφάνιση πινάκων:

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

Τώρα οι έννοιες όλων των πεδίων της δομής γίνονται σαφείς, εκτός από το πεδίο ΠΡΟΕΠΙΛΟΓΗ. Αυτό είναι το πεδίο προεπιλεγμένης τιμής. Θα μπορούσαμε να καθορίσουμε μια προεπιλεγμένη τιμή για κάποια στήλη (ή για όλες). Για παράδειγμα, αν είχαμε ένα πεδίο με το όνομα "Married" και πληκτρολογούσαμε ENUM ("ναι", "όχι"), τότε θα ήταν λογικό να ορίσουμε μία από τις τιμές ως προεπιλεγμένη τιμή. Η σύνταξη θα ήταν:

Έγγαμος αριθμός ("ναι", "όχι") ΟΧΙ NULL προεπιλογή ("ναι")

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

Ας επιστρέψουμε όμως στα τραπέζια μας. Τώρα πρέπει να εισάγουμε δεδομένα στους πίνακες μας. Σε ιστότοπους, συνήθως εισάγετε πληροφορίες σε ορισμένες φόρμες html και, στη συνέχεια, ένα σενάριο σε κάποια γλώσσα (php, java...) εξάγει αυτά τα δεδομένα από τη φόρμα και τα εισάγει στη βάση δεδομένων. Αυτό το κάνει μέσω ενός ερωτήματος SQL για να εισάγει δεδομένα στη βάση δεδομένων. Δεν γνωρίζουμε ακόμη πώς να γράφουμε σενάρια στην PHP, αλλά τώρα θα μάθουμε πώς να στέλνουμε ερωτήματα SQL για την εισαγωγή δεδομένων.

Για το σκοπό αυτό χρησιμοποιείται ο χειριστής ΕΙΣΑΓΕΤΕ. Υπάρχουν δύο τύποι σύνταξης που μπορείτε να χρησιμοποιήσετε. Η πρώτη επιλογή χρησιμοποιείται για την εισαγωγή δεδομένων σε όλα τα πεδία του πίνακα:

INSERT INTO table_name VALUES ("first_column_value", "second_column_value", ..., "last_column_value");


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

INSERT INTO users VALUES ("1","sergey", " [email προστατευμένο]", "1111");

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

INSERT INTO table_name ("column_name", "column_name") VALUES ("first_column_value", "second_column_value");


Στον πίνακα χρηστών μας, απαιτούνται όλα τα πεδία, αλλά το πρώτο μας πεδίο έχει τη λέξη-κλειδί AUTO_INCREMENT (δηλαδή συμπληρώνεται αυτόματα), επομένως μπορούμε να παραλείψουμε αυτήν τη στήλη:

INSERT INTO χρήστες (όνομα, email, κωδικός πρόσβασης) VALUES ("valera", " [email προστατευμένο]", "2222");

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

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

Τώρα ας εισαγάγουμε τα δεδομένα στον δεύτερο πίνακα - θέματα. Όλα είναι ίδια, αλλά πρέπει να θυμόμαστε ότι οι τιμές στο πεδίο id_author πρέπει να υπάρχουν στον πίνακα χρηστών:

Τώρα ας προσπαθήσουμε να προσθέσουμε ένα άλλο θέμα, αλλά με το id_author, το οποίο δεν βρίσκεται στον πίνακα χρηστών (αφού προσθέσαμε μόνο 5 χρήστες στον πίνακα χρηστών, τότε το id=6 δεν υπάρχει):

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

Τώρα ας προσθέσουμε μερικές σειρές στον πίνακα αναρτήσεων, θυμόμαστε ότι έχουμε 2 ξένα κλειδιά σε αυτόν, δηλ. Το id_author και το id_topic, που θα εισαγάγουμε, πρέπει να υπάρχουν στους πίνακες που σχετίζονται με αυτά:

Έχουμε λοιπόν 3 πίνακες που έχουν δεδομένα μέσα τους. Τίθεται το ερώτημα - πώς να δείτε ποια δεδομένα αποθηκεύονται στους πίνακες. Αυτό θα κάνουμε στο επόμενο μάθημα.

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

Θα ξεκινήσουμε, φυσικά, με μια περιγραφή της ίδιας της δήλωσης SELECT INTO και μετά θα προχωρήσουμε σε παραδείγματα.

Δήλωση SELECT INTO στο Transact-SQL

ΕΠΙΛΟΓΗ ΣΕ– μια οδηγία στη γλώσσα T-SQL που δημιουργεί έναν νέο πίνακα και εισάγει τις προκύπτουσες σειρές από το ερώτημα SQL σε αυτόν. Δομή πίνακα, δηλ. ο αριθμός και τα ονόματα των στηλών, καθώς και οι τύποι δεδομένων και οι ιδιότητες μηδενισμού, θα βασίζονται στις στήλες ( εκφράσεις) καθορίζεται στη λίστα επιλογής πηγής στη δήλωση SELECT. Συνήθως, η πρόταση SELECT INTO χρησιμοποιείται για να συνδυάσει δεδομένα από πολλούς πίνακες και προβολές, συμπεριλαμβανομένων ορισμένων δεδομένων υπολογισμού, σε έναν πίνακα.

Για να χρησιμοποιήσετε την πρόταση SELECT INTO, πρέπει να έχετε δικαίωμα CREATE TABLE στη βάση δεδομένων στην οποία θα δημιουργηθεί ο νέος πίνακας.

Η πρόταση SELECT INTO έχει δύο ορίσματα:

  • new_table - όνομα νέο τραπέζι;
  • ομάδα αρχείων – ομάδα αρχείων. Εάν δεν έχει καθοριστεί όρισμα, χρησιμοποιείται η προεπιλεγμένη ομάδα αρχείων. Αυτή η ευκαιρίαδιαθέσιμο ξεκινώντας με τον Microsoft SQL Server 2017.

Σημαντικά σημεία σχετικά με τη δήλωση SELECT INTO

  • Η οδηγία μπορεί να χρησιμοποιηθεί για τη δημιουργία πίνακα στον τρέχοντα διακομιστή, η δημιουργία πίνακα σε έναν απομακρυσμένο διακομιστή δεν υποστηρίζεται.
  • Μπορείτε να συμπληρώσετε έναν νέο πίνακα με δεδομένα είτε από την τρέχουσα βάση δεδομένων και τον τρέχοντα διακομιστή, είτε από άλλη βάση δεδομένων ή από απομακρυσμένο διακομιστή. Για παράδειγμα, υποδείξτε πλήρες όνομαβάση δεδομένων στη μορφή database_schema.table_nameή στην περίπτωση απομακρυσμένου διακομιστή, linked_server.database.schema.table_name;
  • Μια στήλη ταυτότητας σε έναν νέο πίνακα δεν κληρονομεί την ιδιότητα IDENTITY εάν: η δήλωση περιέχει μια ένωση (JOIN, UNION), μια πρόταση GROUP BY, αθροιστική συνάρτηση, επίσης εάν η στήλη ταυτότητας είναι μέρος μιας έκφρασης, λαμβάνεται από μια απομακρυσμένη πηγή δεδομένων ή εμφανίζεται περισσότερες από μία φορές στη λίστα επιλογής. Σε όλα παρόμοιες περιπτώσειςη στήλη ταυτότητας δεν κληρονομεί την ιδιότητα IDENTITY και δημιουργείται ως NOT NULL.
  • Δεν μπορείτε να χρησιμοποιήσετε την πρόταση SELECT INTO για να δημιουργήσετε έναν πίνακα με διαμερίσματα, ακόμα κι αν ο πίνακας προέλευσης είναι χωρισμένος.
  • Μπορείτε να καθορίσετε έναν κανονικό πίνακα καθώς και έναν προσωρινό πίνακα ως νέο πίνακα, αλλά δεν μπορείτε να καθορίσετε μια μεταβλητή πίνακα ή μια παράμετρο με τιμή πίνακα.
  • Μια υπολογιζόμενη στήλη, αν υπάρχει στη λίστα επιλογής της πρότασης SELECT INTO, στον νέο πίνακα γίνεται κανονική, δηλ. δεν υπολογίζεται?
  • Το SELECT INTO δεν μπορεί να χρησιμοποιηθεί με ρήτρα COMPUTE.
  • Χρησιμοποιώντας το SELECT INTO, τα ευρετήρια, οι περιορισμοί και οι κανόνες ενεργοποίησης δεν μεταφέρονται στον νέο πίνακα· πρέπει να δημιουργηθούν επιπλέον, μετά την εκτέλεση της πρότασης, εάν χρειάζονται.
  • Η ρήτρα ORDER BY δεν εγγυάται ότι οι σειρές στον νέο πίνακα θα εισαχθούν με την καθορισμένη σειρά.
  • Το χαρακτηριστικό FILESTREAM δεν μεταφέρεται στον νέο πίνακα. Τα αντικείμενα BLOB FILESTREAM στον νέο πίνακα θα είναι αντικείμενα BLOB τύπου varbinary(max) και έχουν όριο 2 GB.
  • Ο όγκος των δεδομένων που εγγράφονται στο αρχείο καταγραφής συναλλαγών κατά τις λειτουργίες SELECT INTO εξαρτάται από το μοντέλο ανάκτησης. Σε βάσεις δεδομένων που χρησιμοποιούν το μοντέλο ανάκτησης μαζικής καταγραφής και απλό μοντέλο, οι μαζικές λειτουργίες, οι οποίες περιλαμβάνουν το SELECT INTO, καταγράφονται ελάχιστα. Εξαιτίας αυτού, η πρόταση SELECT INTO μπορεί να είναι πιο αποτελεσματική από ξεχωριστές εντολές για τη δημιουργία του πίνακα και προτάσεις INSERT για να τον γεμίσει με δεδομένα.

Παραδείγματα χρήσης SELECT INTO

Θα εκτελέσω όλα τα παραδείγματα στο Microsoft SQL Server 2016 Express DBMS.

Αρχικά στοιχεία

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

ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑΣ TestTable( IDENTITY(1,1) NOT NULL, NOT NULL, (100) NOT NULL, NULL) ON GO CREATE TABLE TestTable2( IDENTITY(1,1) NOT NULL, (100) NOT NULL) ON GO INSERT ΤΙΜΕΣ (1,"Πληκτρολόγιο", 100), (1, "Ποντίκι", 50), (2, "Τηλέφωνο", 300) ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΤΙΜΕΣ Τεστ Πίνακα2 (" Εξαρτήματα υπολογιστή"), ("Κινητές συσκευές") GO SELECT * FROM TestTable SELECT * FROM TestTable2

Παράδειγμα 1 - Δημιουργία πίνακα με χρήση του SELECT INTO με σύνδεση δεδομένων

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

Λειτουργία SELECT INTO SELECT T1.ProductId, T2.CategoryName, T1.ProductName, T1.Price INTO TestTable3 FROM TestTable T1 LEFT JOIN TestTable2 T2 ON T1.CategoryId = T2.CategoryId Δοκιμή νέα από FROM


Ως αποτέλεσμα, δημιουργήσαμε έναν πίνακα που ονομάζεται TestTable3 και τον συμπληρώσαμε με τα συνδυασμένα δεδομένα.

Παράδειγμα 2 - Δημιουργία προσωρινού πίνακα χρησιμοποιώντας SELECT INTO με ομαδοποίηση δεδομένων

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

Δημιουργήστε έναν προσωρινό πίνακα (#TestTable) χρησιμοποιώντας την πρόταση SELECT INTO SELECT T2.CategoryName, COUNT(T1.ProductId) AS CntProduct INTO #TestTable FROM TestTable T1 LEFT JOIN TestTable2 T2 ON T1.CategoryCUPAgoratey = G. - Ανάκτηση δεδομένων από έναν προσωρινό πίνακα SELECT * FROM #TestTable


Όπως μπορείτε να δείτε, μπορέσαμε να δημιουργήσουμε έναν προσωρινό πίνακα #TestTable και να τον γεμίσουμε με ομαδοποιημένα δεδομένα.

Έτσι, εξετάσαμε τη δήλωση SELECT INTO στη γλώσσα T-SQL· στο βιβλίο μου "The T-SQL Programmer's Way" μιλάω λεπτομερώς για όλες τις κατασκευές Γλώσσα T-SQL (Συνιστώ να το διαβάσετε), και αυτό είναι όλο προς το παρόν!

Για να μπορέσετε να δημιουργήσετε έναν πίνακα SQL, πρέπει να ορίσετε το μοντέλο της βάσης δεδομένων. Σχεδιάστε ένα διάγραμμα ER στο οποίο θα ορίσετε οντότητες, ιδιότητες και σχέσεις.

ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ

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

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

Μετάβαση από το διάγραμμα ER στο μοντέλο πίνακα

Κανόνες μετάβασης σε πινακοποιημένο μοντέλο:

  1. Μετατροπή όλων των οντοτήτων σε πίνακες.
  2. Μετατρέψτε όλα τα χαρακτηριστικά σε στήλες, δηλαδή, κάθε χαρακτηριστικό οντότητας πρέπει να εμφανίζεται στο όνομα της στήλης του πίνακα.
  3. Μετατρέψτε μοναδικά αναγνωριστικά σε πρωτεύοντα κλειδιά.
  4. Μετατρέψτε όλες τις σχέσεις σε ξένα κλειδιά.
  5. Δημιουργήστε τον πίνακα SQL.

Δημιουργία βάσης δεδομένων

Πρώτα πρέπει να ξεκινήσετε τον διακομιστή MySQL. Για να το εκκινήσετε, μεταβείτε στο μενού Έναρξη, μετά Προγράμματα, μετά MySQL και MySQL Server, επιλέξτε MySQL-Command-Line-Client.

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

ΔΗΜΙΟΥΡΓΙΑ ΒΑΣΗΣ ΔΕΔΟΜΕΝΩΝ όνομα βάσης δεδομένων.

Οι περιορισμοί στο όνομα της βάσης δεδομένων είναι οι εξής:

  • Το μήκος είναι έως 64 χαρακτήρες και μπορεί να περιλαμβάνει γράμματα, αριθμούς, σύμβολα "" και "".
  • το όνομα μπορεί να ξεκινά με έναν αριθμό, αλλά πρέπει να περιέχει γράμματα.

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

Ο διακομιστής πρέπει να υποδείξει με ποια βάση δεδομένων θα χρειαστεί να συνεργαστεί. Υπάρχει μια δήλωση ΧΡΗΣΗΣ για αυτό. Αυτός ο τελεστής έχει μια απλή σύνταξη: USE n όνομα βάσης δεδομένων.

Δημιουργία πίνακα SQL

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

Δημιουργία πίνακα SQL Server

Χρησιμοποιώντας μόνο μία εντολή DDL, μπορείτε να δημιουργήσετε διάφορα αντικείμενα βάσης δεδομένων μεταβάλλοντας τις παραμέτρους της. Χρησιμοποιείται η εντολή Δημιουργία πίνακα. Η μορφή tt μοιάζει με αυτό:

ΔΗΜΙΟΥΡΓΗΣΤΕ ΠΑΡΑΔΙ όνομα_πίνακα,(στήλη_όνομα1 Ονομα _στήλη 2τύπος δεδομένων [constraint_column], [table_constraints]).

Η σύνταξη αυτής της εντολής θα πρέπει να περιγραφεί με περισσότερες λεπτομέρειες:

  • Το όνομα του πίνακα πρέπει να έχει μήκος έως 30 χαρακτήρες και να ξεκινά με ένα γράμμα. Επιτρέπονται μόνο αλφαβητικοί χαρακτήρες, γράμματα και σύμβολα "_", "$" και "#". Επιτρέπεται η χρήση κυριλλικού αλφαβήτου. Είναι σημαντικό να σημειωθεί ότι τα ονόματα πινάκων δεν πρέπει να είναι ίδια με άλλα ονόματα αντικειμένων ή δεσμευμένες λέξεις διακομιστή βάσης δεδομένων, όπως Στήλη, Πίνακας, Ευρετήριο κ.λπ.
  • Πρέπει να καθορίσετε έναν τύπο δεδομένων για κάθε στήλη. Υπάρχει ένα πρότυπο σύνολο που χρησιμοποιείται από τους περισσότερους. Για παράδειγμα, Char, Varchar, Number, Date, Null type, κ.λπ.

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

Πώς να εργαστείτε με τη βάση δεδομένων

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

  • ΕΜΦΑΝΙΣΗ ΒΑΣΕΩΝ ΔΕΔΟΜΕΝΩΝ - εμφανίζει όλες τις δημιουργημένες βάσεις δεδομένων SQL στην οθόνη.
  • SHOW TABLES - εμφανίζει μια λίστα με όλους τους πίνακες για την τρέχουσα βάση δεδομένων που επιλέγονται από την εντολή USE.
  • ΠΕΡΙΓΡΑΦΩ όνομα_πίνακα- εμφανίζει μια περιγραφή όλων των στηλών του πίνακα.
  • ALTER TABLE - σας επιτρέπει να αλλάξετε τη δομή του πίνακα.

Η τελευταία εντολή επιτρέπει:

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

Η σύνταξη αυτής της εντολής είναι: ALTER TABLE όνομα_πίνακα( | | | | [(ΕΝΕΡΓΟΠΟΙΗΣΗ | ΑΠΕΝΕΡΓΟΠΟΙΗΣΗ) ΣΤΑΘ περιορισμός_όνομα ] | }.

Υπάρχουν και άλλες εντολές:

  • ΜΕΤΟΝΟΜΑΣΙΑ - μετονομάστε τον πίνακα.
  • TRUNCATE TABLE - αφαιρεί όλες τις σειρές από τον πίνακα. Αυτή η λειτουργία μπορεί να χρειαστεί όταν είναι απαραίτητο να γεμίσετε ξανά τον πίνακα, αλλά δεν χρειάζεται να αποθηκεύσετε προηγούμενα δεδομένα.

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

Η σύνταξη της εντολής είναι αρκετά απλή: DROP TABLE Ονομα_τραπεζάκια.

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

Χρησιμοποιώντας το CREATE TABLE μπορείτε να δημιουργήσετε έναν κενό πίνακα και στη συνέχεια να τον γεμίσετε με δεδομένα. Αλλά δεν είναι μόνο αυτό. Μπορείτε επίσης να δημιουργήσετε απευθείας έναν πίνακα από έναν άλλο πίνακα. Σαν αυτό? Δηλαδή, είναι δυνατό να ορίσουμε έναν πίνακα και να τον γεμίσουμε με δεδομένα από άλλον πίνακα. Υπάρχει μια ειδική λέξη-κλειδί AS για αυτό.

Η σύνταξη είναι πολύ απλή:

  • ΔΗΜΙΟΥΡΓΙΑ ΤΡΑΠΕΖΙΟΥ Ονομα_τραπεζάκια[(στήλη_ορισμός)] AS υποερώτημα?
  • στήλη_ορισμός -ονόματα στηλών, κανόνες ακεραιότητας για στήλες πινάκων που δημιουργήθηκαν πρόσφατα και προεπιλεγμένες τιμές.
  • υποερώτημα - επιστρέφει τις σειρές που πρέπει να προστεθούν στον νέο πίνακα.

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

Προσωρινά τραπέζια

Οι προσωρινοί πίνακες είναι πίνακες των οποίων τα δεδομένα διαγράφονται στο τέλος κάθε περιόδου σύνδεσης ή νωρίτερα. Χρησιμοποιούνται για την καταγραφή ενδιάμεσων τιμών ή αποτελεσμάτων. Μπορούν να χρησιμοποιηθούν ως φύλλα εργασίας. Μπορείτε να ορίσετε προσωρινές σε οποιαδήποτε περίοδο λειτουργίας, αλλά μπορείτε να χρησιμοποιήσετε τα δεδομένα τους μόνο στην τρέχουσα περίοδο λειτουργίας. Η δημιουργία προσωρινών πινάκων SQL είναι παρόμοια με τους κανονικούς πίνακες, χρησιμοποιώντας την εντολή CREATE TABLE. Για να δείξετε στο σύστημα ότι ο πίνακας είναι προσωρινός, πρέπει να χρησιμοποιήσετε την παράμετρο GLOBAL TEMPORARY.

Η ρήτρα ON COMMIT ορίζει τη διάρκεια ζωής των δεδομένων σε έναν τέτοιο πίνακα και μπορεί να κάνει τα εξής:

  • ΔΙΑΓΡΑΦΗ ΣΕΙΡΩΝ - διαγράψτε τον προσωρινό πίνακα (διαγραφή όλων των δεδομένων περιόδου σύνδεσης) μετά από κάθε ολοκλήρωση συναλλαγής. Αυτή είναι συνήθως η προεπιλεγμένη τιμή.
  • ΔΙΑΤΗΡΗΣΗ ΣΕΙΡΩΝ - αφήστε δεδομένα για χρήση στην επόμενη συναλλαγή. Επιπλέον, μπορείτε να διαγράψετε τον πίνακα μόνο μετά το τέλος της περιόδου λειτουργίας. Υπάρχουν όμως κάποιες ιδιαιτερότητες. Εάν μια συναλλαγή επαναφερθεί (ROLLBACK), ο πίνακας θα επιστρέψει στην κατάστασή του στο τέλος της προηγούμενης συναλλαγής.

Η σύνταξη για τη δημιουργία ενός προσωρινού πίνακα μπορεί να αναπαρασταθεί ως εξής: CREATE TABLE Ονομα_τραπεζάκια,(Ονομαστήλη_1τύπος δεδομένων [column_constraint], Ονομα _στήλη 2τύπος δεδομένων [constraint_column], [table_constraints]).