MYSQL – ALTER, DROP, RENUMIRE, MODIFICA
⚡ Rezumat inteligent
ALTER, DROP, RENAME și MODIFY sunt MySQL comenzi care remodelează o bază de date după ce aceasta este deja utilizată. Acestea adaugă, elimină, redenumesc și redefinesc obiecte precum tabele și coloane fără a elimina rândurile deja stocate.

Ce este comanda ALTER în MySQL?
MODIFICA Comanda modifică o bază de date, un tabel, o vizualizare sau alt obiect al bazei de date existente care trebuie modificate pe parcursul ciclului de viață al unei baze de date. Este comanda care permite unei scheme să evolueze după ce a fost deja creată și umplută cu date.
Cerințele de business rareori stagnează, iar designul bazei de date trebuie să se adapteze odată cu ele. Să presupunem că designul bazei de date Myflix a fost implementat și utilizatorii lucrează cu acesta, iar abia atunci echipa își dă seama că au fost omise informații vitale. Nimeni nu vrea să piardă rândurile existente; pur și simplu vor să înregistreze noile informații alături de ele.
ALTER acoperă exact această situație. Poate schimba tipul de date al unui câmp dintr-un șir de caractere într-un număr, poate redenumi un câmp sau poate adăuga o coloană complet nouă într-un tabel, toate acestea în timp ce datele deja stocate în tabel rămân intacte.
Odată ce scopul comenzii este stabilit, următorul pas este sintaxa care o execută.
MySQL Sintaxa ALTER
Sintaxa de bază utilizată pentru a adăuga o coloană la un tabel deja existent este prezentată mai jos.
ALTER TABLE `table_name` ADD COLUMN `column_name` `data_type`;
AICI
- „ALTER TABLE `table_name`” este comanda care spune MySQL server pentru a modifica tabelul numit `table_name`.
- „ADĂUGAȚI COLONA `nume_coloană` `tip_date`” este comanda care spune MySQL server pentru a adăuga o nouă coloană numită `column_name` cu tipul de date `data_type`.
Să presupunem că Myflix a introdus facturarea și plățile online. Pentru a susține acest lucru, trebuie adăugat în tabelul membrilor un câmp pentru numărul cardului de credit. Înainte de a face orice modificare, merită să analizăm structura tabelului așa cum este. Scriptul prezentat mai jos face acest lucru.
SHOW COLUMNS FROM `members`;
| Câmp | Tip | Null | Cheie | Mod implicit | în plus - Extra |
|---|---|---|---|---|---|
| numar de membru | int (11) | NU | PRI | NULL | increment auto |
| nume complete | varchar(350) | NU | NULL | ||
| sex | varchar(6) | DA | NULL | ||
| data nașterii | data | DA | NULL | ||
| adresă fizică | varchar(255) | DA | NULL | ||
| adresă_poștală | varchar(255) | DA | NULL | ||
| număr_de_contact | varchar(75) | DA | NULL | ||
| varchar(255) | DA | NULL |
💡 Notă despre int(11): Numărul dintre paranteze reprezintă doar lățimea afișajului. MySQL Versiunea 8.0.17 a fost depreciată pentru tipurile întregi, așa că un server modern raportează această coloană pur și simplu ca intDimensiunea spațiului de stocare rămâne neschimbată.
Scriptul prezentat mai jos adaugă noul câmp în tabelul membrilor.
ALTER TABLE `members` ADD COLUMN `credit_card_number` VARCHAR(25);
Executarea acestui script în myflixdb adaugă o coloană numită credit_card_number în tabela members cu VARCHAR ca tip de date. Rularea din nou a scriptului SHOW COLUMNS dă următorul rezultat.
| Câmp | Tip | Null | Cheie | Mod implicit | în plus - Extra |
|---|---|---|---|---|---|
| numar de membru | int (11) | NU | PRI | NULL | increment auto |
| nume complete | varchar(350) | NU | NULL | ||
| sex | varchar(6) | DA | NULL | ||
| data nașterii | data | DA | NULL | ||
| adresă fizică | varchar(255) | DA | NULL | ||
| adresă_poștală | varchar(255) | DA | NULL | ||
| număr_de_contact | varchar(75) | DA | NULL | ||
| varchar(255) | DA | NULL | |||
| Numărul cărții de credit | varchar(25) | DA | NULL |
Rândul evidențiat confirmă faptul că obiectul credit_card_number a fost adăugat în tabelul membrilor, iar datele deja conținute în celelalte coloane nu sunt afectate de adăugare.
Adăugarea unei coloane este doar jumătate din poveste. O schemă trebuie, de asemenea, să scape de obiectele de care nu mai are nevoie, ceea ce este sarcina comenzii DROP.
Ce este comanda DROP în MySQL?
Comanda DROP șterge permanent un obiect. Este utilizată pentru a
- Ștergeți o bază de date din MySQL serverul.
- Ștergeți un obiect, cum ar fi un tabel sau o coloană, dintr-o bază de date.
⚠️ Atenție: Operația DROP nu este reversibilă. Nici obiectul, nici rândurile din interiorul său nu pot fi recuperate fără o copie de rezervă, așadar executați o comandă SELECT asupra țintei și confirmați mai întâi copia de rezervă.
Picăturăping o coloana
În exemplul ALTER de mai sus, o coloană numită credit_card_number a fost adăugată în tabelul members. Să presupunem că funcția de facturare online este amânată și că acea coloană ar trebui eliminată din nou. Următorul script face acest lucru.
ALTER TABLE `members` DROP COLUMN `credit_card_number`;
Executarea scriptului elimină coloana credit_card_number din tabelul members. Listarea din nou a coloanelor confirmă rezultatul.
SHOW COLUMNS FROM `members`;
| Câmp | Tip | Null | Cheie | Mod implicit | în plus - Extra |
|---|---|---|---|---|---|
| numar de membru | int (11) | NU | PRI | NULL | increment auto |
| nume complete | varchar(350) | NU | NULL | ||
| sex | varchar(6) | DA | NULL | ||
| data nașterii | data | DA | NULL | ||
| adresă fizică | varchar(255) | DA | NULL | ||
| adresă_poștală | varchar(255) | DA | NULL | ||
| număr_de_contact | varchar(75) | DA | NULL | ||
| varchar(255) | DA | NULL |
Numărul cardului de credit a dispărut din lista de câmpuri.
DROP TABLE
Sintaxa pentru eliminarea unui tabel întreg dintr-o bază de date este următoarea.
DROP TABLE `sample_table`;
Aplicată unui obiect real, afirmația arată astfel.
DROP TABLE `categories_archive`;
Executarea acesteia șterge tabelul numit `categories_archive` și fiecare rând din interiorul acestuia din baza de date.
DROP BAZA DE DATE
Același cuvânt cheie elimină o întreagă schemă. Adăugarea IF EXISTS elimină eroarea care MySQL se ridică atunci când ținta a dispărut deja, ceea ce este util în scripturile care rulează de mai multe ori.
DROP DATABASE IF EXISTS `myflixdb_backup`;
Eliminarea unui obiect este definitivă. Când obiectul în sine ar trebui să supraviețuiască și doar numele său este greșit, comanda RENAME este instrumentul corect.
Ce este comanda RENAME în MySQL?
Comanda RENAME schimbă numele unui obiect existent în baza de date, cum ar fi un tabel sau o coloană, cu un nume nou. Redenumirea unui tabel nu duce la pierderea datelor conținute în acesta.
Comanda are următoarea sintaxă de bază.
RENAME TABLE `current_table_name` TO `new_table_name`;
Pentru a redenumi tabela movierentals în movie_rentals, se folosește scriptul de mai jos.
RENAME TABLE `movierentals` TO `movie_rentals`;
Executarea acesteia redenumește tabelul `movierentals` în `movie_rentals`. Deoarece redenumirea este doar o schimbare de etichetă, aceeași instrucțiune inversată restaurează numele original.
RENAME TABLE `movie_rentals` TO `movierentals`;
RENAME TABLE gestionează numele unui tabel. Redenumirea unui coloană...iar schimbarea a ceea ce conține este lucrarea cuvântului cheie CHANGE.
SCHIMBĂ cuvântul cheie
Cuvântul cheie CHANGE vă permite să
- Schimbarea numelui unei coloane
- Schimbarea tipului de date al coloanei
- Modificați constrângerile coloanei
Să luăm un exemplu. Câmpul full_names din tabelul members este de tipul de date varchar cu o lățime de 350, așa cum confirmă scriptul de mai jos.
SHOW COLUMNS FROM `members`;
| Câmp | Tip | Null | Cheie | Mod implicit | în plus - Extra |
|---|---|---|---|---|---|
| numar de membru | int (11) | NU | PRI | NULL | increment auto |
| nume complete | varchar(350) | NU | NULL | ||
| sex | varchar(6) | DA | NULL | ||
| data nașterii | data | DA | NULL | ||
| adresă fizică | varchar(255) | DA | NULL | ||
| adresă_poștală | varchar(255) | DA | NULL | ||
| număr_de_contact | varchar(75) | DA | NULL | ||
| varchar(255) | DA | NULL |
Să presupunem că cerința este de a
- Schimbați numele câmpului din „full_names” în „fullname”
- Schimbați-l la tipul de date char cu o lățime de 250
- Adăugați o constrângere NOT NULL
Toate cele trei editări sunt efectuate printr-o singură instrucțiune CHANGE.
ALTER TABLE `members` CHANGE COLUMN `full_names` `fullname` char(250) NOT NULL;
Executarea sa în myflixdb și apoi rularea scriptului SHOW COLUMNS dă următorul rezultat.
| Câmp | Tip | Null | Cheie | Mod implicit | în plus - Extra |
|---|---|---|---|---|---|
| numar de membru | int (11) | NU | PRI | NULL | increment auto |
| Numele complet | char (250) | NU | NULL | ||
| sex | varchar(6) | DA | NULL | ||
| data nașterii | data | DA | NULL | ||
| adresă fizică | varchar(255) | DA | NULL | ||
| adresă_poștală | varchar(255) | DA | NULL | ||
| număr_de_contact | varchar(75) | DA | NULL | ||
| varchar(255) | DA | NULL |
Coloana se numește acum fullname, conține char(250) și respinge valorile NULL.
MODIFICARE Cuvânt cheie
Cuvântul cheie MODIFY vă permite să
- Modificarea tipului de date al coloanei
- Modificați constrângerile coloanei
În exemplul CHANGE de mai sus, numele câmpului a trebuit furnizat de două ori, chiar dacă redenumirea era doar o parte a obiectivului. Omiterea numelui câmpului dintr-o instrucțiune CHANGE generează o eroare. Când trebuie ajustate doar tipul de date și constrângerile, iar numele trebuie să rămână nemodificat, MODIFY face treaba cu o singură menționare a coloanei.
Scriptul de mai jos modifică lățimea câmpului „fullname” de la 250 la 50.
ALTER TABLE `members` MODIFY `fullname` char(50) NOT NULL;
Executarea scriptului în myflixdb și apoi rularea scriptului SHOW COLUMNS dă rezultatul prezentat mai jos.
| Câmp | Tip | Null | Cheie | Mod implicit | în plus - Extra |
|---|---|---|---|---|---|
| numar de membru | int (11) | NU | PRI | NULL | increment auto |
| Numele complet | char (50) | NU | NULL | ||
| sex | varchar(6) | DA | NULL | ||
| data nașterii | data | DA | NULL | ||
| adresă fizică | varchar(255) | DA | NULL | ||
| adresă_poștală | varchar(255) | DA | NULL | ||
| număr_de_contact | varchar(75) | DA | NULL | ||
| varchar(255) | DA | NULL |
⚠️ Atenție: Restrângerea unei coloane trunchiază datele care nu se mai încadrează. Orice nume mai lung de 50 de caractere este scurtat de această instrucțiune, așadar verificați cea mai lungă valoare existentă cu un SELECT interogare înainte de a micșora un câmp.
MODIFICARE vs. MODIFICARE vs. REDENUMIRE COLOANĂ
Cele trei cuvinte cheie se suprapun, iar alegerea celui greșit este cea mai frecventă sursă de erori în acest domeniu. Tabelul de mai jos le prezintă alăturate.
| Cuvânt cheie | Redenumește coloana | Modifică tipul și constrângerile | Numele vechi este necesar | Utilizare tipică |
|---|---|---|---|---|
| SCHIMBARE | Da | Da | Da, plus noul nume | Redenumiți și redefiniți într-o singură instrucțiune |
| MODIFICA | Nu | Da | Nume dat o singură dată | Lărgirea, îngustarea sau retestarea unei coloane |
| REDENUMIRE COLOANĂ | Da | Nu | Da, plus noul nume | Doar redenumire, de la MySQL 8.0 înainte |
MySQL Versiunea 8.0 a adăugat o a patra opțiune pentru cel mai simplu caz, o redenumire fără nicio redefinire.
ALTER TABLE `members` RENAME COLUMN `fullname` TO `full_name`;
Tipul și numele sunt deja stabilite. Întrebarea rămasă este unde se află o nouă coloană în tabel, pe care cuvântul cheie AFTER o controlează.
DUPĂ cuvântul cheie
În mod implicit, o coloană adăugată cu ALTER TABLE ajunge la sfârșitul tabelului. Pentru a o plasa într-o anumită poziție, comanda ALTER este combinată cu cuvântul cheie AFTER.
Scriptul de mai jos adaugă „date_of_registration” direct după date_of_birth în tabelul membrilor.
ALTER TABLE `members` ADD `date_of_registration` date NULL AFTER `date_of_birth`;
Executarea scriptului în myflixdb și apoi rularea scriptului SHOW COLUMNS dă rezultatul prezentat mai jos.
| Câmp | Tip | Null | Cheie | Mod implicit | în plus - Extra |
|---|---|---|---|---|---|
| numar de membru | int (11) | NU | PRI | NULL | increment auto |
| Numele complet | char (50) | NU | NULL | ||
| sex | varchar(6) | DA | NULL | ||
| data nașterii | data | DA | NULL | ||
| data_înregistrării | data | DA | NULL | ||
| adresă fizică | varchar(255) | DA | NULL | ||
| adresă_poștală | varchar(255) | DA | NULL | ||
| număr_de_contact | varchar(75) | DA | NULL | ||
| varchar(255) | DA | NULL |
Rândul evidențiat este coloana adăugată după data_nașterii. Cuvântul cheie FIRST funcționează în același mod și mută noua coloană chiar în fața tabelului.
