MYSQL – MUUDA, KOKKU, NIME ÜMBER, MUUDA
⚡ Nutikas kokkuvõte
ALTER, DROP, RENAME ja MODIFY on järgmised MySQL Käsklused, mis kujundavad andmebaasi ümber pärast seda, kui see on juba kasutuses. Need lisavad, eemaldavad, nimetavad ümber ja määratlevad uuesti objekte, näiteks tabeleid ja veerge, ilma et juba salvestatud ridu kustutataks.
Mis on ALTER käsk? MySQL?
. VANUS Käsk muudab olemasolevat andmebaasi, tabelit, vaadet või muud andmebaasiobjekti, mida tuleb andmebaasi elutsükli jooksul muuta. See on käsk, mis võimaldab skeemil pärast selle loomist ja andmetega täitmist areneda.
Ärinõuded seisavad harva paigal ja andmebaasi disain peab nendega kaasas käima. Oletame, et Myflixi andmebaasi disain on rakendatud ja kasutajad sellega töötavad, ning alles siis saab meeskond aru, et oluline teave on välja jäetud. Keegi ei taha olemasolevaid ridu kaotada; nad tahavad lihtsalt uue teabe nende kõrvale salvestada.
ALTER katab täpselt sellise olukorra. See saab muuta välja andmetüüpi stringist numbriks, ümber nimetada välja või lisada tabelisse täiesti uue veeru, samal ajal kui tabelis juba salvestatud andmed jäävad puutumata.
Kui käsu eesmärk on paika pandud, on järgmine samm seda täide viiv süntaks.
MySQL ALTER süntaks
Allpool on näidatud põhisüntaks, mida kasutatakse juba olemasolevale tabelile veeru lisamiseks.
ALTER TABLE `table_name` ADD COLUMN `column_name` `data_type`;
SIIN
- "ALTER TABLE `tabeli_nimi"" on käsk, mis ütleb MySQL server, et muuta tabelit nimega "tabeli_nimi".
- „LISA VEERU „veeru_nimi” „andmete_tüüp” on käsk, mis ütleb MySQL serverile uue veeru lisamiseks nimega `column_name`, mille andmetüüp on `data_type`.
Oletame, et Myflix on kasutusele võtnud veebipõhise arveldamise ja maksed. Selle toetamiseks tuleb liikmete tabelisse lisada krediitkaardi numbri väli. Enne muudatuste tegemist tasub vaadata tabeli praegust struktuuri. Allolev skript teeb seda.
SHOW COLUMNS FROM `members`;
| Väli | KASUTUSALA | NULL | Võti | vaikimisi | lisatasu |
|---|---|---|---|---|---|
| liikme_number | int (11) | EI | PRI | NULL | automaatne_suurendamine |
| täis_nimed | varchar (350) | EI | NULL | ||
| sugu | varchar (6) | JAH | NULL | ||
| sünnikuupäev | andmed | JAH | NULL | ||
| füüsiline_aadress | varchar (255) | JAH | NULL | ||
| postiaadress | varchar (255) | JAH | NULL | ||
| kontaktnumber | varchar (75) | JAH | NULL | ||
| varchar (255) | JAH | NULL |
💡 Märkus int(11) kohta: Sulgudes olev number on ainult ekraani laius. MySQL 8.0.17 aegutas selle täisarvutüüpide jaoks, seega tänapäevane server kuvab seda veergu lihtsalt järgmiselt: intSalvestusruumi suurus jääb samaks.
Allolev skript lisab uue välja liikmete tabelisse.
ALTER TABLE `members` ADD COLUMN `credit_card_number` VARCHAR(25);
Selle skripti käivitamine myflixdb-s lisab liikmete tabelisse veeru nimega credit_card_number, mille andmetüüp on VARCHAR. Skripti SHOW COLUMNS uuesti käivitamine annab järgmise tulemuse.
| Väli | KASUTUSALA | NULL | Võti | vaikimisi | lisatasu |
|---|---|---|---|---|---|
| liikme_number | int (11) | EI | PRI | NULL | automaatne_suurendamine |
| täis_nimed | varchar (350) | EI | NULL | ||
| sugu | varchar (6) | JAH | NULL | ||
| sünnikuupäev | andmed | JAH | NULL | ||
| füüsiline_aadress | varchar (255) | JAH | NULL | ||
| postiaadress | varchar (255) | JAH | NULL | ||
| kontaktnumber | varchar (75) | JAH | NULL | ||
| varchar (255) | JAH | NULL | |||
| krediitkaardi_number | varchar (25) | JAH | NULL |
Esiletõstetud rida kinnitab, et krediitkaardi_number on liikmete tabelisse lisatud ja teistes veergudes juba olevad andmed jäävad lisamisest puutumata.
Veeru lisamine on ainult pool asja. Skeem peab ka vabanema objektidest, mida ta enam ei vaja, mis on DROP-käsu ülesanne.
Mis on DROP-käsk? MySQL?
DROP-käsk kustutab objekti jäädavalt. Seda kasutatakse selleks, et
- Andmebaasi kustutamine MySQL server.
- Objekti, näiteks tabeli või veeru, kustutamine andmebaasist.
⚠️ Hoiatus: DROP ei ole pöörduv. Ei objekti ennast ega selle sees olevaid ridu ei saa ilma varukoopiata taastada, seega käivita sihtmärgi suhtes SELECT ja kinnita esmalt varukoopia.
Dropping veerg
Ülaltoodud ALTER näites lisati liikmete tabelisse veerg nimega credit_card_number. Oletame, et veebipõhise arvelduse funktsioon lükatakse edasi ja see veerg tuleks uuesti eemaldada. Järgmine skript teeb seda.
ALTER TABLE `members` DROP COLUMN `credit_card_number`;
Skripti käivitamisel eemaldatakse liikmete tabelist veerg credit_card_number. Veergude uuesti loetlemine kinnitab tulemust.
SHOW COLUMNS FROM `members`;
| Väli | KASUTUSALA | NULL | Võti | vaikimisi | lisatasu |
|---|---|---|---|---|---|
| liikme_number | int (11) | EI | PRI | NULL | automaatne_suurendamine |
| täis_nimed | varchar (350) | EI | NULL | ||
| sugu | varchar (6) | JAH | NULL | ||
| sünnikuupäev | andmed | JAH | NULL | ||
| füüsiline_aadress | varchar (255) | JAH | NULL | ||
| postiaadress | varchar (255) | JAH | NULL | ||
| kontaktnumber | varchar (75) | JAH | NULL | ||
| varchar (255) | JAH | NULL |
Krediitkaardi number on väljaloendist kadunud.
KUKKATA LAUD
Terve tabeli andmebaasist eemaldamise süntaks on järgmine.
DROP TABLE `sample_table`;
Reaalsele objektile rakendatuna näeb lause välja selline.
DROP TABLE `categories_archive`;
Selle käivitamine kustutab andmebaasist tabeli nimega `categories_archive` ja kõik selles olevad read.
ANDMEBAAS VÄLJA
Sama märksõna eemaldab terve skeemi. IF EXISTS lisamine välistab vea, mis MySQL tekib siis, kui sihtmärk on juba kadunud, mis on kasulik skriptide sees, mis töötavad mitu korda.
DROP DATABASE IF EXISTS `myflixdb_backup`;
Objekti eemaldamine on lõplik. Kui objekt ise peaks alles jääma ja ainult selle nimi on vale, on RENAME käsk õige tööriist.
Mis on käsk RENAME (ümbernimetamine)? MySQL?
Käsk RENAME muudab olemasoleva andmebaasiobjekti, näiteks tabeli või veeru, nime uueks nimeks. Tabeli ümbernimetamine ei põhjusta selles sisalduvate andmete kadumist.
Käsul on järgmine põhisüntaks.
RENAME TABLE `current_table_name` TO `new_table_name`;
Tabeli movierentals ümbernimetamiseks nimeks movie_rentals kasutatakse allolevat skripti.
RENAME TABLE `movierentals` TO `movie_rentals`;
Selle käivitamine nimetab tabeli `movierentals` ümber tabeliks `movie_rentals`. Kuna ümbernimetamine on ainult sildi muudatus, taastab sama lause vastupidine käivitamine algse nime.
RENAME TABLE `movie_rentals` TO `movierentals`;
RENAME TABLE haldab tabeli nime. Tabeli ümbernimetamine veergja selle sisu muutmine on märksõna CHANGE töö.
MUUDA märksõna
Märksõna CHANGE võimaldab teil
- Veeru nime muutmine
- Veeru andmetüübi muutmine
- Veergude piirangute muutmine
Vaatleme näidet. Meetmete tabelis olev täisnimede väli on varchar andmetüübiga ja laiusega 350, nagu allolev skript kinnitab.
SHOW COLUMNS FROM `members`;
| Väli | KASUTUSALA | NULL | Võti | vaikimisi | lisatasu |
|---|---|---|---|---|---|
| liikme_number | int (11) | EI | PRI | NULL | automaatne_suurendamine |
| täis_nimed | varchar (350) | EI | NULL | ||
| sugu | varchar (6) | JAH | NULL | ||
| sünnikuupäev | andmed | JAH | NULL | ||
| füüsiline_aadress | varchar (255) | JAH | NULL | ||
| postiaadress | varchar (255) | JAH | NULL | ||
| kontaktnumber | varchar (75) | JAH | NULL | ||
| varchar (255) | JAH | NULL |
Oletame, et nõue on
- Muutke välja nimi „täisnimed” asemel „täisnimi”
- Muutke see char andmetüübiks laiusega 250
- Lisage piirang NOT NULL
Kõik kolm muudatust teostatakse ühe CHANGE-lausega.
ALTER TABLE `members` CHANGE COLUMN `full_names` `fullname` char(250) NOT NULL;
Selle käivitamine myflixdb suhtes ja seejärel skripti SHOW COLUMNS käivitamine annab järgmise tulemuse.
| Väli | KASUTUSALA | NULL | Võti | vaikimisi | lisatasu |
|---|---|---|---|---|---|
| liikme_number | int (11) | EI | PRI | NULL | automaatne_suurendamine |
| täisnimi | märk(250) | EI | NULL | ||
| sugu | varchar (6) | JAH | NULL | ||
| sünnikuupäev | andmed | JAH | NULL | ||
| füüsiline_aadress | varchar (255) | JAH | NULL | ||
| postiaadress | varchar (255) | JAH | NULL | ||
| kontaktnumber | varchar (75) | JAH | NULL | ||
| varchar (255) | JAH | NULL |
Veerg kannab nüüd nime fullname, sisaldab char(250) ja lükkab tagasi NULL-väärtused.
MUUDA märksõna
Märksõna MODIFY võimaldab teil
- Veeru andmetüübi muutmine
- Veergude piirangute muutmine
Ülaltoodud CHANGE näites tuli väljanimi sisestada kaks korda, kuigi ümbernimetamine oli ainult osa eesmärgist. Väljanime väljajätmine CHANGE-lausest tekitab vea. Kui on vaja muuta ainult andmetüüpi ja piiranguid ning nimi peaks jääma samaks, siis MODIFY teeb töö ära veeru ühekordse mainimisega.
Allolev skript muudab välja „täisnimi” laiust 250-lt 50-le.
ALTER TABLE `members` MODIFY `fullname` char(50) NOT NULL;
Selle käivitamine myflixdb suhtes ja seejärel skripti SHOW COLUMNS käivitamine annab allpool näidatud tulemuse.
| Väli | KASUTUSALA | NULL | Võti | vaikimisi | lisatasu |
|---|---|---|---|---|---|
| liikme_number | int (11) | EI | PRI | NULL | automaatne_suurendamine |
| täisnimi | märk(50) | EI | NULL | ||
| sugu | varchar (6) | JAH | NULL | ||
| sünnikuupäev | andmed | JAH | NULL | ||
| füüsiline_aadress | varchar (255) | JAH | NULL | ||
| postiaadress | varchar (255) | JAH | NULL | ||
| kontaktnumber | varchar (75) | JAH | NULL | ||
| varchar (255) | JAH | NULL |
⚠️ Hoiatus: Veeru kitsendamine kärbib andmeid, mis enam ei mahu. See lause lühendab kõik nimed, mis on pikemad kui 50 tähemärki, seega kontrollige pikimat olemasolevat väärtust a-ga SELECT päring enne välja vähendamist.
MUUDA vs MUUDA vs NIMETA ÜMBER VEERG
Need kolm märksõna kattuvad ja vale märksõna valimine on selles valdkonnas kõige levinum vigade allikas. Allolev tabel seab need kõrvuti.
| Võtmesõna | Nimetab veeru ümber | Muudab tüüpi ja piiranguid | Vana nimi on nõutav | Tüüpiline kasutamine |
|---|---|---|---|---|
| CHANGE | Jah | Jah | Jah, pluss uus nimi | Ümbernimetamine ja ümberdefineerimine ühes lauses |
| MUUTMA | Ei | Jah | Nimi antud üks kord | Veeru laiendamine, kitsendamine või ümberkirjutamine |
| NIMETA VEERG ÜMBER | Jah | Ei | Jah, pluss uus nimi | Ainult ümbernimetamine alates MySQL 8.0 edasi |
MySQL Versioonis 8.0 lisati lihtsama juhtumi jaoks neljas valik – ümbernimetamine ilma ümberdefinitsioonita.
ALTER TABLE `members` RENAME COLUMN `fullname` TO `full_name`;
Tüüp ja nimi on paigas. Jääb küsimus, kuhu uus veerg tabelis paigutatakse, mida kontrollib märksõna AFTER.
Märksõna PÄRAST
Vaikimisi paigutatakse käsuga ALTER TABLE lisatud veerg tabeli lõppu. Selle kindlale positsioonile paigutamiseks kombineeritakse käsk ALTER märksõnaga AFTER.
Allolev skript lisab liikmete tabelisse sünnikuupäeva järele otse „registreerimise_kuupäeva”.
ALTER TABLE `members` ADD `date_of_registration` date NULL AFTER `date_of_birth`;
Selle käivitamine myflixdb suhtes ja seejärel skripti SHOW COLUMNS käivitamine annab allpool näidatud tulemuse.
| Väli | KASUTUSALA | NULL | Võti | vaikimisi | lisatasu |
|---|---|---|---|---|---|
| liikme_number | int (11) | EI | PRI | NULL | automaatne_suurendamine |
| täisnimi | märk(50) | EI | NULL | ||
| sugu | varchar (6) | JAH | NULL | ||
| sünnikuupäev | andmed | JAH | NULL | ||
| registreerimiskuupäev | andmed | JAH | NULL | ||
| füüsiline_aadress | varchar (255) | JAH | NULL | ||
| postiaadress | varchar (255) | JAH | NULL | ||
| kontaktnumber | varchar (75) | JAH | NULL | ||
| varchar (255) | JAH | NULL |
Esiletõstetud rida on veerg, mis on lisatud pärast sünnikuupäeva. Märksõna FIRST toimib samamoodi ja liigutab uue veeru tabeli kõige algusesse.

