MYSQL – ALTER, DROP, RENAME, MODIFY
⚡ Έξυπνη Σύνοψη
Οι ALTER, DROP, RENAME και MODIFY είναι οι MySQL Εντολές που αναδιαμορφώνουν μια βάση δεδομένων αφού αυτή είναι ήδη σε χρήση. Προσθέτουν, αφαιρούν, μετονομάζουν και επαναπροσδιορίζουν αντικείμενα όπως πίνακες και στήλες, χωρίς να απορρίπτουν τις γραμμές που έχουν ήδη αποθηκευτεί.

Τι είναι η εντολή ALTER στο MySQL?
The ALTER Η εντολή τροποποιεί μια υπάρχουσα βάση δεδομένων, πίνακα, προβολή ή άλλο αντικείμενο βάσης δεδομένων που πρέπει να αλλάξει κατά τη διάρκεια του κύκλου ζωής μιας βάσης δεδομένων. Είναι η εντολή που επιτρέπει σε ένα σχήμα να εξελιχθεί αφού έχει ήδη δημιουργηθεί και συμπληρωθεί με δεδομένα.
Οι επιχειρηματικές απαιτήσεις σπάνια παραμένουν σταθερές και ο σχεδιασμός μιας βάσης δεδομένων πρέπει να εξελίσσεται μαζί τους. Ας υποθέσουμε ότι ο σχεδιασμός της βάσης δεδομένων Myflix έχει υλοποιηθεί και οι χρήστες εργάζονται με αυτήν, και μόνο τότε η ομάδα συνειδητοποιεί ότι έχουν παραλειφθεί ζωτικές πληροφορίες. Κανείς δεν θέλει να χάσει τις υπάρχουσες γραμμές. Απλώς θέλει να καταγράψει τις νέες πληροφορίες παράλληλα με αυτές.
Το ALTER καλύπτει ακριβώς αυτήν την περίπτωση. Μπορεί να αλλάξει τον τύπο δεδομένων ενός πεδίου από συμβολοσειρά σε αριθμό, να μετονομάσει ένα πεδίο ή να προσθέσει μια εντελώς νέα στήλη σε έναν πίνακα, όλα αυτά ενώ τα δεδομένα που είναι ήδη αποθηκευμένα στον πίνακα παραμένουν ανέπαφα.
Αφού καθοριστεί ο σκοπός της εντολής, το επόμενο βήμα είναι η σύνταξη που την εκτελεί.
MySQL Σύνταξη ALTER
Η βασική σύνταξη που χρησιμοποιείται για την προσθήκη μιας στήλης σε έναν πίνακα που ήδη υπάρχει φαίνεται παρακάτω.
ALTER TABLE `table_name` ADD COLUMN `column_name` `data_type`;
ΕΔΩ
- "ΑΛΛΟΣ ΠΙΝΑΚΑ "όνομα_πίνακα"" είναι η εντολή που λέει MySQL διακομιστή για να τροποποιήσει τον πίνακα με το όνομα "table_name".
- "ΠΡΟΣΘΗΚΗ ΣΤΗΛΗΣ "όνομα_στήλης" "τύπος_δεδομένων"" είναι η εντολή που λέει MySQL διακομιστή για να προσθέσει μια νέα στήλη με όνομα `column_name` με τον τύπο δεδομένων `data_type`.
Ας υποθέσουμε ότι το Myflix έχει εισαγάγει την ηλεκτρονική χρέωση και πληρωμές. Για να την υποστηρίξει, πρέπει να προστεθεί ένα πεδίο για τον αριθμό της πιστωτικής κάρτας στον πίνακα μελών. Πριν κάνετε οποιαδήποτε τροποποίηση, αξίζει να εξετάσετε τη δομή του πίνακα όπως έχει. Το σενάριο που φαίνεται παρακάτω το κάνει αυτό.
SHOW COLUMNS FROM `members`;
| Πεδίο | Χαρακτηριστικά | Null | Κλειδί | Προεπιλογή | Εξτρα |
|---|---|---|---|---|---|
| αριθμός μέλους | int (11) | ΟΧΙ | PRI | Τιμή NULL | αυτόματη_αύξηση |
| πλήρη_ονόματα | varchar(350) | ΟΧΙ | Τιμή NULL | ||
| των δύο φύλων | varchar(6) | ΝΑΙ | Τιμή NULL | ||
| ημερομηνία_γέννησης | Ραντεβού | ΝΑΙ | Τιμή NULL | ||
| φυσική_διεύθυνση | varchar(255) | ΝΑΙ | Τιμή NULL | ||
| ταχυδρομική_διεύθυνση | varchar(255) | ΝΑΙ | Τιμή NULL | ||
| αριθμός_επαφής | varchar(75) | ΝΑΙ | Τιμή NULL | ||
| ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ | varchar(255) | ΝΑΙ | Τιμή NULL |
💡 Σημείωση για το int(11): Ο αριθμός στις παρενθέσεις είναι μόνο το πλάτος εμφάνισης. MySQL Η έκδοση 8.0.17 το καταργούσε για ακέραιους τύπους, επομένως ένας σύγχρονος διακομιστής αναφέρει αυτήν τη στήλη απλώς ως intΤο μέγεθος αποθήκευσης παραμένει αμετάβλητο.
Το παρακάτω σενάριο προσθέτει το νέο πεδίο στον πίνακα μελών.
ALTER TABLE `members` ADD COLUMN `credit_card_number` VARCHAR(25);
Η εκτέλεση αυτού του σεναρίου στο myflixdb προσθέτει μια στήλη με όνομα credit_card_number στον πίνακα μελών με τύπο δεδομένων VARCHAR. Η εκτέλεση του σεναρίου SHOW COLUMNS ξανά δίνει το ακόλουθο αποτέλεσμα.
| Πεδίο | Χαρακτηριστικά | Null | Κλειδί | Προεπιλογή | Εξτρα |
|---|---|---|---|---|---|
| αριθμός μέλους | int (11) | ΟΧΙ | PRI | Τιμή NULL | αυτόματη_αύξηση |
| πλήρη_ονόματα | varchar(350) | ΟΧΙ | Τιμή NULL | ||
| των δύο φύλων | varchar(6) | ΝΑΙ | Τιμή NULL | ||
| ημερομηνία_γέννησης | Ραντεβού | ΝΑΙ | Τιμή NULL | ||
| φυσική_διεύθυνση | varchar(255) | ΝΑΙ | Τιμή NULL | ||
| ταχυδρομική_διεύθυνση | varchar(255) | ΝΑΙ | Τιμή NULL | ||
| αριθμός_επαφής | varchar(75) | ΝΑΙ | Τιμή NULL | ||
| ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ | varchar(255) | ΝΑΙ | Τιμή NULL | ||
| αριθμός πιστωτικής κάρτας | varchar(25) | ΝΑΙ | Τιμή NULL |
Η επισημασμένη γραμμή επιβεβαιώνει ότι ο αριθμός_πιστωτικής_κάρτας_έχει προστεθεί στον πίνακα μελών και τα δεδομένα που υπάρχουν ήδη στις άλλες στήλες δεν επηρεάζονται από την προσθήκη.
Η προσθήκη μιας στήλης είναι μόνο η μισή ιστορία. Ένα σχήμα πρέπει επίσης να απορρίψει αντικείμενα που δεν χρειάζεται πλέον, κάτι που είναι η δουλειά της εντολής DROP.
Τι είναι η εντολή DROP στο MySQL?
Η εντολή DROP διαγράφει οριστικά ένα αντικείμενο. Χρησιμοποιείται για να
- Διαγραφή μιας βάσης δεδομένων από το MySQL διακομιστής.
- Διαγράψτε ένα αντικείμενο, όπως έναν πίνακα ή μια στήλη, από μια βάση δεδομένων.
⚠️ Προειδοποίηση: Η συνάρτηση DROP δεν είναι αναστρέψιμη. Ούτε το αντικείμενο ούτε οι γραμμές μέσα σε αυτό μπορούν να ανακτηθούν χωρίς αντίγραφο ασφαλείας, επομένως εκτελέστε μια εντολή SELECT στον στόχο και επιβεβαιώστε πρώτα το αντίγραφο ασφαλείας.
Πτώσηping μια στήλη
Στο παραπάνω παράδειγμα ALTER, μια στήλη με το όνομα credit_card_number προστέθηκε στον πίνακα μελών. Ας υποθέσουμε ότι η λειτουργία ηλεκτρονικής χρέωσης αναβάλλεται και ότι αυτή η στήλη πρέπει να καταργηθεί ξανά. Το ακόλουθο σενάριο το κάνει.
ALTER TABLE `members` DROP COLUMN `credit_card_number`;
Η εκτέλεση του σεναρίου διαγράφει τη στήλη credit_card_number από τον πίνακα μελών. Η εκ νέου καταγραφή των στηλών επιβεβαιώνει το αποτέλεσμα.
SHOW COLUMNS FROM `members`;
| Πεδίο | Χαρακτηριστικά | Null | Κλειδί | Προεπιλογή | Εξτρα |
|---|---|---|---|---|---|
| αριθμός μέλους | int (11) | ΟΧΙ | PRI | Τιμή NULL | αυτόματη_αύξηση |
| πλήρη_ονόματα | varchar(350) | ΟΧΙ | Τιμή NULL | ||
| των δύο φύλων | varchar(6) | ΝΑΙ | Τιμή NULL | ||
| ημερομηνία_γέννησης | Ραντεβού | ΝΑΙ | Τιμή NULL | ||
| φυσική_διεύθυνση | varchar(255) | ΝΑΙ | Τιμή NULL | ||
| ταχυδρομική_διεύθυνση | varchar(255) | ΝΑΙ | Τιμή NULL | ||
| αριθμός_επαφής | varchar(75) | ΝΑΙ | Τιμή NULL | ||
| ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ | varchar(255) | ΝΑΙ | Τιμή NULL |
Ο αριθμός της πιστωτικής κάρτας έχει εξαφανιστεί από τη λίστα πεδίων.
ΠΤΡΑΠΕΖΙ ΠΤΩΣΗΣ
Η σύνταξη για την απόρριψη ολόκληρου πίνακα από μια βάση δεδομένων έχει ως εξής.
DROP TABLE `sample_table`;
Εφαρμοσμένη σε ένα πραγματικό αντικείμενο, η πρόταση μοιάζει με αυτό.
DROP TABLE `categories_archive`;
Η εκτέλεση του διαγράφει από τη βάση δεδομένων τον πίνακα με το όνομα `categories_archive` και κάθε γραμμή μέσα σε αυτόν.
ΑΠΟΣΤΟΛΗ ΒΑΣΗΣ ΔΕΔΟΜΕΝΩΝ
Η ίδια λέξη-κλειδί καταργεί ένα ολόκληρο σχήμα. Η προσθήκη της συνάρτησης IF EXISTS καταστέλλει το σφάλμα που MySQL αυξάνεται όταν ο στόχος έχει ήδη εξαφανιστεί, κάτι που είναι χρήσιμο μέσα σε σενάρια που εκτελούνται περισσότερες από μία φορές.
DROP DATABASE IF EXISTS `myflixdb_backup`;
Η αφαίρεση ενός αντικειμένου είναι οριστική. Όταν το ίδιο το αντικείμενο θα πρέπει να παραμείνει και μόνο το όνομά του είναι λάθος, η εντολή RENAME είναι το σωστό εργαλείο.
Τι είναι η εντολή RENAME στο MySQL?
Η εντολή RENAME αλλάζει το όνομα ενός υπάρχοντος αντικειμένου βάσης δεδομένων, όπως ενός πίνακα ή μιας στήλης, σε ένα νέο όνομα. Η μετονομασία ενός πίνακα δεν έχει ως αποτέλεσμα την απώλεια οποιουδήποτε από τα δεδομένα που περιέχονται σε αυτόν.
Η εντολή έχει την ακόλουθη βασική σύνταξη.
RENAME TABLE `current_table_name` TO `new_table_name`;
Για να μετονομάσετε τον πίνακα movierentals σε movie_rentals, χρησιμοποιείται το παρακάτω σενάριο.
RENAME TABLE `movierentals` TO `movie_rentals`;
Η εκτέλεσή του μετονομάζει τον πίνακα `movierentals` σε `movie_rentals`. Επειδή η μετονομασία είναι μόνο μια αλλαγή ετικέτας, η ίδια εντολή αντίστροφα επαναφέρει το αρχικό όνομα.
RENAME TABLE `movie_rentals` TO `movierentals`;
Η εντολή RENAME TABLE χειρίζεται το όνομα ενός πίνακα. Μετονομασία ενός στήλη, και η αλλαγή αυτού που περιέχει, είναι το έργο της λέξης-κλειδιού CHANGE.
Λέξη-κλειδί ΑΛΛΑΓΗΣ
Η λέξη-κλειδί CHANGE σάς επιτρέπει να
- Αλλαγή του ονόματος μιας στήλης
- Αλλαγή του τύπου δεδομένων στήλης
- Αλλαγή των περιορισμών στηλών
Ας εξετάσουμε ένα παράδειγμα. Το πεδίο full_names στον πίνακα members είναι τύπου δεδομένων varchar με πλάτος 350, όπως επιβεβαιώνει το παρακάτω σενάριο.
SHOW COLUMNS FROM `members`;
| Πεδίο | Χαρακτηριστικά | Null | Κλειδί | Προεπιλογή | Εξτρα |
|---|---|---|---|---|---|
| αριθμός μέλους | int (11) | ΟΧΙ | PRI | Τιμή NULL | αυτόματη_αύξηση |
| πλήρη_ονόματα | varchar(350) | ΟΧΙ | Τιμή NULL | ||
| των δύο φύλων | varchar(6) | ΝΑΙ | Τιμή NULL | ||
| ημερομηνία_γέννησης | Ραντεβού | ΝΑΙ | Τιμή NULL | ||
| φυσική_διεύθυνση | varchar(255) | ΝΑΙ | Τιμή NULL | ||
| ταχυδρομική_διεύθυνση | varchar(255) | ΝΑΙ | Τιμή NULL | ||
| αριθμός_επαφής | varchar(75) | ΝΑΙ | Τιμή NULL | ||
| ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ | varchar(255) | ΝΑΙ | Τιμή NULL |
Ας υποθέσουμε ότι η απαίτηση είναι να
- Αλλάξτε το όνομα πεδίου από "full_names" σε "fullname"
- Αλλάξτε το σε τύπο δεδομένων char με πλάτος 250
- Προσθέστε έναν περιορισμό NOT NULL
Και οι τρεις επεξεργασίες πραγματοποιούνται με μία μόνο εντολή CHANGE.
ALTER TABLE `members` CHANGE COLUMN `full_names` `fullname` char(250) NOT NULL;
Η εκτέλεσή του στο myflixdb και στη συνέχεια η εκτέλεση του σεναρίου SHOW COLUMNS δίνει το ακόλουθο αποτέλεσμα.
| Πεδίο | Χαρακτηριστικά | Null | Κλειδί | Προεπιλογή | Εξτρα |
|---|---|---|---|---|---|
| αριθμός μέλους | int (11) | ΟΧΙ | PRI | Τιμή NULL | αυτόματη_αύξηση |
| πλήρες όνομα | char (250) | ΟΧΙ | Τιμή NULL | ||
| των δύο φύλων | varchar(6) | ΝΑΙ | Τιμή NULL | ||
| ημερομηνία_γέννησης | Ραντεβού | ΝΑΙ | Τιμή NULL | ||
| φυσική_διεύθυνση | varchar(255) | ΝΑΙ | Τιμή NULL | ||
| ταχυδρομική_διεύθυνση | varchar(255) | ΝΑΙ | Τιμή NULL | ||
| αριθμός_επαφής | varchar(75) | ΝΑΙ | Τιμή NULL | ||
| ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ | varchar(255) | ΝΑΙ | Τιμή NULL |
Η στήλη ονομάζεται πλέον fullname, περιέχει την τιμή char(250) και απορρίπτει τις τιμές NULL.
ΤΡΟΠΟΠΟΙΗΣΗ Λέξης-κλειδιού
Η λέξη-κλειδί MODIFY σάς επιτρέπει να
- Τροποποίηση του τύπου δεδομένων στήλης
- Τροποποίηση των περιορισμών στηλών
Στο παραπάνω παράδειγμα CHANGE, το όνομα πεδίου έπρεπε να καταχωρηθεί δύο φορές, παρόλο που η μετονομασία ήταν μόνο μέρος του στόχου. Η παράλειψη του ονόματος πεδίου από μια πρόταση CHANGE δημιουργεί ένα σφάλμα. Όταν χρειάζονται προσαρμογή μόνο ο τύπος δεδομένων και οι περιορισμοί και το όνομα πρέπει να παραμείνει ως έχει, η εντολή MODIFY κάνει τη δουλειά με μία αναφορά της στήλης.
Το παρακάτω σενάριο αλλάζει το πλάτος του πεδίου "πλήρες όνομα" από 250 σε 50.
ALTER TABLE `members` MODIFY `fullname` char(50) NOT NULL;
Η εκτέλεσή του στο myflixdb και στη συνέχεια η εκτέλεση του σεναρίου SHOW COLUMNS δίνει το αποτέλεσμα που φαίνεται παρακάτω.
| Πεδίο | Χαρακτηριστικά | Null | Κλειδί | Προεπιλογή | Εξτρα |
|---|---|---|---|---|---|
| αριθμός μέλους | int (11) | ΟΧΙ | PRI | Τιμή NULL | αυτόματη_αύξηση |
| πλήρες όνομα | char (50) | ΟΧΙ | Τιμή NULL | ||
| των δύο φύλων | varchar(6) | ΝΑΙ | Τιμή NULL | ||
| ημερομηνία_γέννησης | Ραντεβού | ΝΑΙ | Τιμή NULL | ||
| φυσική_διεύθυνση | varchar(255) | ΝΑΙ | Τιμή NULL | ||
| ταχυδρομική_διεύθυνση | varchar(255) | ΝΑΙ | Τιμή NULL | ||
| αριθμός_επαφής | varchar(75) | ΝΑΙ | Τιμή NULL | ||
| ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ | varchar(255) | ΝΑΙ | Τιμή NULL |
⚠️ Προειδοποίηση: Η στένωση μιας στήλης περικόπτει δεδομένα που δεν ταιριάζουν πλέον. Οποιοδήποτε όνομα μεγαλύτερο από 50 χαρακτήρες περικόπτεται από αυτήν την πρόταση, επομένως ελέγξτε τη μεγαλύτερη υπάρχουσα τιμή με ένα SELECT ερώτημα πριν από τη συρρίκνωση ενός πεδίου.
ΑΛΛΑΓΗ έναντι ΤΡΟΠΟΠΟΙΗΣΗΣ έναντι ΜΕΤΟΝΟΜΑΣΙΑΣ ΣΤΗΛΗΣ
Οι τρεις λέξεις-κλειδιά αλληλεπικαλύπτονται και η επιλογή λανθασμένης λέξης-κλειδιού είναι η πιο συνηθισμένη πηγή σφαλμάτων σε αυτόν τον τομέα. Ο παρακάτω πίνακας τις παραθέτει δίπλα-δίπλα.
| Λέξη-κλειδί | Μετονομάζει τη στήλη | Αλλάζει τον τύπο και τους περιορισμούς | Απαιτείται παλιό όνομα | Τυπική χρήση |
|---|---|---|---|---|
| ΑΛΛΑΓΗ | Ναι | Ναι | Ναι, συν το νέο όνομα | Μετονομασία και επαναπροσδιορισμός σε μία πρόταση |
| ΤΡΟΠΟΠΟΙΩ | Οχι | Ναι | Όνομα που δόθηκε μία φορά | Διεύρυνση, περιορισμός ή επαναπληκτρολόγηση μιας στήλης |
| ΜΕΤΟΝΟΜΑΣΙΑ ΣΤΗΛΗΣ | Ναι | Οχι | Ναι, συν το νέο όνομα | Μόνο μετονομασία, από MySQL 8.0 και μετά |
MySQL Η έκδοση 8.0 πρόσθεσε μια τέταρτη επιλογή για την απλούστερη περίπτωση, μια μετονομασία χωρίς καθόλου επαναπροσδιορισμό.
ALTER TABLE `members` RENAME COLUMN `fullname` TO `full_name`;
Ο τύπος και το όνομα έχουν διευθετηθεί. Το ερώτημα που απομένει είναι πού τοποθετείται μια νέα στήλη στον πίνακα, την οποία ελέγχει η λέξη-κλειδί AFTER.
Λέξη-κλειδί AFTER
Από προεπιλογή, μια στήλη που προστίθεται με την εντολή ALTER TABLE εμφανίζεται στο τέλος του πίνακα. Για να την τοποθετήσετε σε μια συγκεκριμένη θέση, η εντολή ALTER συνδυάζεται με τη λέξη-κλειδί AFTER.
Το παρακάτω σενάριο προσθέτει την εντολή "date_of_registration" αμέσως μετά την ημερομηνία_γέννησης στον πίνακα μελών.
ALTER TABLE `members` ADD `date_of_registration` date NULL AFTER `date_of_birth`;
Η εκτέλεσή του στο myflixdb και στη συνέχεια η εκτέλεση του σεναρίου SHOW COLUMNS δίνει το αποτέλεσμα που φαίνεται παρακάτω.
| Πεδίο | Χαρακτηριστικά | Null | Κλειδί | Προεπιλογή | Εξτρα |
|---|---|---|---|---|---|
| αριθμός μέλους | int (11) | ΟΧΙ | PRI | Τιμή NULL | αυτόματη_αύξηση |
| πλήρες όνομα | char (50) | ΟΧΙ | Τιμή NULL | ||
| των δύο φύλων | varchar(6) | ΝΑΙ | Τιμή NULL | ||
| ημερομηνία_γέννησης | Ραντεβού | ΝΑΙ | Τιμή NULL | ||
| ημερομηνία_εγγραφής | Ραντεβού | ΝΑΙ | Τιμή NULL | ||
| φυσική_διεύθυνση | varchar(255) | ΝΑΙ | Τιμή NULL | ||
| ταχυδρομική_διεύθυνση | varchar(255) | ΝΑΙ | Τιμή NULL | ||
| αριθμός_επαφής | varchar(75) | ΝΑΙ | Τιμή NULL | ||
| ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ | varchar(255) | ΝΑΙ | Τιμή NULL |
Η επισημασμένη γραμμή είναι η στήλη που προστίθεται μετά την ημερομηνία_γέννησης. Η λέξη-κλειδί FIRST λειτουργεί με τον ίδιο τρόπο και μετακινεί τη νέα στήλη στην αρχή του πίνακα.
