MYSQL – PROMIJENI, ISPUSTI, PREIMENI, MIJENI
⚡ Pametni sažetak
PROMIJENI, ISPUSTI, PREIMENI i MODIFICIRAJ su MySQL naredbe koje preoblikuju bazu podataka nakon što je već u upotrebi. Dodaju, uklanjaju, preimenuju i redefiniraju objekte poput tablica i stupaca bez odbacivanja već pohranjenih redaka.

Što je naredba ALTER u MySQL?
The IZMIJENI Naredba mijenja postojeću bazu podataka, tablicu, prikaz ili drugi objekt baze podataka koji se treba promijeniti tijekom životnog ciklusa baze podataka. To je naredba koja omogućuje shemi da se razvija nakon što je već stvorena i ispunjena podacima.
Poslovni zahtjevi rijetko stoje na mjestu, a dizajn baze podataka mora se prilagođavati njima. Pretpostavimo da je dizajn Myflix baze podataka implementiran i da korisnici rade s njim, i tek tada tim shvaća da su ključne informacije izostavljene. Nitko ne želi izgubiti postojeće retke; jednostavno žele zabilježiti nove informacije uz njih.
Naredba ALTER pokriva upravo tu situaciju. Može promijeniti tip podataka polja iz niza u broj, preimenovati polje ili dodati potpuno novi stupac u tablicu, a sve to dok podaci koji su već pohranjeni u tablici ostaju netaknuti.
Nakon što je utvrđena svrha naredbe, sljedeći korak je sintaksa koja je izvršava.
MySQL ALTER sintaksa
Osnovna sintaksa koja se koristi za dodavanje stupca u tablicu koja već postoji prikazana je u nastavku.
ALTER TABLE `table_name` ADD COLUMN `column_name` `data_type`;
OVDJE
- “ALTER TABLE `table_name`” je naredba koja govori MySQL poslužitelj za izmjenu tablice pod nazivom `table_name`.
- “DODAJ KOLONCU `naziv_stupca` `tip_podataka`” je naredba koja govori MySQL poslužitelj za dodavanje novog stupca pod nazivom `column_name` s tipom podataka `data_type`.
Pretpostavimo da je Myflix uveo online naplatu i plaćanja. Kako bi to podržao, u tablicu članova potrebno je dodati polje za broj kreditne kartice. Prije bilo kakve izmjene, vrijedi pogledati strukturu tablice kakva jest. Skript prikazan u nastavku to radi.
SHOW COLUMNS FROM `members`;
| Polje | Tip | nula | Ključ | Zadano | dodatni |
|---|---|---|---|---|---|
| članski broj | int (11) | NE | PRI | NULL | automatsko_povećanje |
| puna_imena | varchar(350) | NE | NULL | ||
| rod | varchar(6) | DA | NULL | ||
| datum_rođenja | podaci | DA | NULL | ||
| fizička adresa | varchar(255) | DA | NULL | ||
| poštanska_adresa | varchar(255) | DA | NULL | ||
| broj_kontakta | varchar(75) | DA | NULL | ||
| varchar(255) | DA | NULL |
💡 Napomena o int(11): Broj u zagradama predstavlja samo širinu prikaza. MySQL Verzija 8.0.17 ga je ukinula za cjelobrojne tipove, pa moderni poslužitelj ovaj stupac prikazuje jednostavno kao intVeličina pohrane ostaje nepromijenjena.
Skript prikazan u nastavku dodaje novo polje u tablicu članova.
ALTER TABLE `members` ADD COLUMN `credit_card_number` VARCHAR(25);
Izvršavanje ovog skripta na myflixdb dodaje stupac pod nazivom credit_card_number u tablicu članova s tipom podataka VARCHAR. Ponovno pokretanje skripte SHOW COLUMNS daje sljedeći rezultat.
| Polje | Tip | nula | Ključ | Zadano | dodatni |
|---|---|---|---|---|---|
| članski broj | int (11) | NE | PRI | NULL | automatsko_povećanje |
| puna_imena | varchar(350) | NE | NULL | ||
| rod | varchar(6) | DA | NULL | ||
| datum_rođenja | podaci | DA | NULL | ||
| fizička adresa | varchar(255) | DA | NULL | ||
| poštanska_adresa | varchar(255) | DA | NULL | ||
| broj_kontakta | varchar(75) | DA | NULL | ||
| varchar(255) | DA | NULL | |||
| broj_kreditne_kartice | varchar(25) | DA | NULL |
Označeni redak potvrđuje da je broj_kreditne_kartice dodan u tablicu članova, a podaci koji se već nalaze u ostalim stupcima nisu dotaknuti dodavanjem.
Dodavanje stupca je samo pola priče. Shema također mora ukloniti objekte koji joj više nisu potrebni, što je zadatak naredbe DROP.
Što je naredba DROP u MySQL?
Naredba DROP trajno briše objekt. Koristi se za
- Izbrišite bazu podataka iz MySQL server.
- Izbrisati objekt kao što je tablica ili stupac iz baze podataka.
⚠️ Upozorenje: DROP nije poništiv. Ni objekt ni retci unutar njega ne mogu se oporaviti bez sigurnosne kopije, stoga pokrenite SELECT na cilju i prvo potvrdite sigurnosnu kopiju.
Ispustitiping stupac
U gornjem primjeru ALTER-a, stupac pod nazivom broj_kreditne_kartice dodan je u tablicu članova. Pretpostavimo da je značajka online naplate odgođena i da taj stupac treba ponovno ukloniti. Sljedeći skript to radi.
ALTER TABLE `members` DROP COLUMN `credit_card_number`;
Izvršavanje skripte briše stupac credit_card_number iz tablice članova. Ponovni popis stupaca potvrđuje rezultat.
SHOW COLUMNS FROM `members`;
| Polje | Tip | nula | Ključ | Zadano | dodatni |
|---|---|---|---|---|---|
| članski broj | int (11) | NE | PRI | NULL | automatsko_povećanje |
| puna_imena | varchar(350) | NE | NULL | ||
| rod | varchar(6) | DA | NULL | ||
| datum_rođenja | podaci | DA | NULL | ||
| fizička adresa | varchar(255) | DA | NULL | ||
| poštanska_adresa | varchar(255) | DA | NULL | ||
| broj_kontakta | varchar(75) | DA | NULL | ||
| varchar(255) | DA | NULL |
Broj kreditne kartice je nestao s popisa polja.
ISPUSTI STOL
Sintaksa za brisanje cijele tablice iz baze podataka je sljedeća.
DROP TABLE `sample_table`;
Primijenjeno na stvarni objekt, izjava izgleda ovako.
DROP TABLE `categories_archive`;
Izvršavanjem se iz baze podataka briše tablica pod nazivom `categories_archive` i svaki redak unutar nje.
ISPUSTI BAZU PODATAKA
Ista ključna riječ uklanja cijelu shemu. Dodavanje IF EXISTS potiskuje grešku koja MySQL podiže kada je meta već nestala, što je korisno unutar skripti koje se izvršavaju više puta.
DROP DATABASE IF EXISTS `myflixdb_backup`;
Uklanjanje objekta je konačno. Kada sam objekt treba preživjeti, a samo mu je ime pogrešno, naredba RENAME je ispravan alat.
Što je naredba RENAME u MySQL?
Naredba RENAME mijenja naziv postojećeg objekta baze podataka, kao što je tablica ili stupac, u novi naziv. Preimenovanje tablice ne uzrokuje gubitak podataka koji se u njoj nalaze.
Naredba ima sljedeću osnovnu sintaksu.
RENAME TABLE `current_table_name` TO `new_table_name`;
Za preimenovanje tablice movierentals u movie_rentals koristi se donji skript.
RENAME TABLE `movierentals` TO `movie_rentals`;
Izvršavanjem se tablica `movierentals` preimenuje u `movie_rentals`. Budući da je preimenovanje samo promjena oznake, ista naredba obrnuto vraća izvorni naziv.
RENAME TABLE `movie_rentals` TO `movierentals`;
RENAME TABLE obrađuje naziv tablice. Preimenovanje kolona, a promjena onoga što sadrži, djelo je ključne riječi CHANGE.
PROMIJENI ključnu riječ
Ključna riječ CHANGE vam omogućuje da
- Promjena naziva stupca
- Promijenite tip podataka stupca
- Promijenite ograničenja stupaca
Razmotrimo primjer. Polje full_names u tablici članova je tipa podataka varchar širine 350, što potvrđuje skript u nastavku.
SHOW COLUMNS FROM `members`;
| Polje | Tip | nula | Ključ | Zadano | dodatni |
|---|---|---|---|---|---|
| članski broj | int (11) | NE | PRI | NULL | automatsko_povećanje |
| puna_imena | varchar(350) | NE | NULL | ||
| rod | varchar(6) | DA | NULL | ||
| datum_rođenja | podaci | DA | NULL | ||
| fizička adresa | varchar(255) | DA | NULL | ||
| poštanska_adresa | varchar(255) | DA | NULL | ||
| broj_kontakta | varchar(75) | DA | NULL | ||
| varchar(255) | DA | NULL |
Pretpostavimo da je zahtjev
- Promijenite naziv polja iz "puna_imena" u "puno_ime"
- Promijenite ga u tip podataka char širine 250.
- Dodajte NOT NULL ograničenje
Sve tri izmjene se provode jednom naredbom CHANGE.
ALTER TABLE `members` CHANGE COLUMN `full_names` `fullname` char(250) NOT NULL;
Izvršavanje na myflixdb, a zatim pokretanje skripte SHOW COLUMNS daje sljedeći rezultat.
| Polje | Tip | nula | Ključ | Zadano | dodatni |
|---|---|---|---|---|---|
| članski broj | int (11) | NE | PRI | NULL | automatsko_povećanje |
| puno ime | karakter(250) | NE | NULL | ||
| rod | varchar(6) | DA | NULL | ||
| datum_rođenja | podaci | DA | NULL | ||
| fizička adresa | varchar(255) | DA | NULL | ||
| poštanska_adresa | varchar(255) | DA | NULL | ||
| broj_kontakta | varchar(75) | DA | NULL | ||
| varchar(255) | DA | NULL |
Stupac se sada zove puno ime, sadrži char(250) i odbacuje NULL vrijednosti.
IZMIJENI ključnu riječ
Ključna riječ MODIFY vam omogućuje da
- Izmijenite tip podataka stupca
- Izmijenite ograničenja stupaca
U gornjem primjeru CHANGE, naziv polja morao se navesti dva puta, iako je preimenovanje bilo samo dio cilja. Izostavljanje naziva polja iz naredbe CHANGE generira grešku. Kada je potrebno prilagoditi samo tip podataka i ograničenja, a naziv treba ostati kakav jest, MODIFY obavlja posao s jednim spominjanjem stupca.
Skripta u nastavku mijenja širinu polja „puno ime“ s 250 na 50.
ALTER TABLE `members` MODIFY `fullname` char(50) NOT NULL;
Izvršavanje na myflixdb, a zatim pokretanje skripte SHOW COLUMNS daje rezultat prikazan dolje.
| Polje | Tip | nula | Ključ | Zadano | dodatni |
|---|---|---|---|---|---|
| članski broj | int (11) | NE | PRI | NULL | automatsko_povećanje |
| puno ime | karakter(50) | NE | NULL | ||
| rod | varchar(6) | DA | NULL | ||
| datum_rođenja | podaci | DA | NULL | ||
| fizička adresa | varchar(255) | DA | NULL | ||
| poštanska_adresa | varchar(255) | DA | NULL | ||
| broj_kontakta | varchar(75) | DA | NULL | ||
| varchar(255) | DA | NULL |
⚠️ Upozorenje: Sužavanje stupca skraćuje podatke koji više ne stanu. Bilo koji naziv dulji od 50 znakova skraćuje se ovom naredbom, stoga provjerite najdužu postojeću vrijednost s SELECT upit prije smanjivanja polja.
PROMIJENI vs. IZMJENI vs. PREIMENI STUPAC
Tri ključne riječi se preklapaju, a odabir pogrešne je najčešći izvor pogrešaka u ovom području. Tablica u nastavku ih prikazuje jednu pored druge.
| Riječ | Preimenuje stupac | Mijenja vrstu i ograničenja | Potrebno je staro ime | Tipična upotreba |
|---|---|---|---|---|
| PROMJENA | Da | Da | Da, plus novo ime | Preimenuj i redefiniraj u jednoj izjavi |
| IZMJENITI | Ne | Da | Ime dano jednom | Proširivanje, sužavanje ili ponovno tipkanje stupca |
| PREIMENUJ STUPAC | Da | Ne | Da, plus novo ime | Samo preimenuj, iz MySQL 8.0 nadalje |
MySQL Verzija 8.0 dodala je četvrtu opciju za najjednostavniji slučaj, preimenovanje bez ikakve redefinicije.
ALTER TABLE `members` RENAME COLUMN `fullname` TO `full_name`;
Tip i naziv su određeni. Preostalo je pitanje gdje se novi stupac nalazi u tablici, što kontrolira ključna riječ AFTER.
NAKON ključne riječi
Prema zadanim postavkama, stupac dodan naredbom ALTER TABLE završava na kraju tablice. Da biste ga umjesto toga postavili na određenu poziciju, naredba ALTER kombinira se s ključnom riječi AFTER.
Skripta u nastavku dodaje "date_of_registration" odmah nakon date_of_birth u tablici članova.
ALTER TABLE `members` ADD `date_of_registration` date NULL AFTER `date_of_birth`;
Izvršavanje na myflixdb, a zatim pokretanje skripte SHOW COLUMNS daje rezultat prikazan dolje.
| Polje | Tip | nula | Ključ | Zadano | dodatni |
|---|---|---|---|---|---|
| članski broj | int (11) | NE | PRI | NULL | automatsko_povećanje |
| puno ime | karakter(50) | NE | NULL | ||
| rod | varchar(6) | DA | NULL | ||
| datum_rođenja | podaci | DA | NULL | ||
| datum_registracije | podaci | DA | NULL | ||
| fizička adresa | varchar(255) | DA | NULL | ||
| poštanska_adresa | varchar(255) | DA | NULL | ||
| broj_kontakta | varchar(75) | DA | NULL | ||
| varchar(255) | DA | NULL |
Istaknuti redak je stupac dodan nakon datuma_rođenja. Ključna riječ FIRST funkcionira na isti način i pomiče novi stupac na sam početak tablice.
