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.

  • 🛠️ ALTER-käsk: ALTER TABLE defineerib uuesti juba olemasoleva objekti, seega reaalajas skeem neelab uued nõuded ilma ümberehituseta.
  • LISA VEERG: Käsk ALTER TABLE ADD COLUMN lisab välja ja olemasolevad read säilitavad kõik olemasolevad väärtused.
  • 🗑️ DROP-käsk: DROP kustutab jäädavalt: andmebaasi, tabeli või üksiku veeru käsuga ALTER TABLE DROP COLUMN.
  • 🔁 ÜMBERNIMETAMISE käsk: RENAME TABLE muudab ainult tabeli nime ja selles olevad andmed ei lähe kaotsi.
  • ✏️ MUUDA märksõna: CHANGE nimetab veeru ümber ning määratleb selle tüübi ja piirangud uuesti ühes lauses, seega on mõlema veeru nimed kohustuslikud.
  • 🧩 MUUDA märksõna: MODIFY muudab tüüpi ja piiranguid, samal ajal kui keeping nimi, mis on turvalisem valik ainult teksti sisestamiseks.
  • 📍 Märksõna PÄRAST: Funktsioon AFTER paigutab äsja lisatud veeru valitud positsioonile tabeli lõppu asemel.

MySQL ALTER, DROP, RENAME ja MODIFY

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
e-mail 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
e-mail 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

  1. Andmebaasi kustutamine MySQL server.
  2. 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
e-mail 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

  1. Veeru nime muutmine
  2. Veeru andmetüübi muutmine
  3. 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
e-mail varchar (255) JAH NULL

Oletame, et nõue on

  1. Muutke välja nimi „täisnimed” asemel „täisnimi”
  2. Muutke see char andmetüübiks laiusega 250
  3. 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
e-mail 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

  1. Veeru andmetüübi muutmine
  2. 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
e-mail 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
e-mail 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.

KKK

Ei. DDL-laused, näiteks ALTER, DROP ja RENAME, rakenduvad kaudselt. MySQL, seega ei saa avatud tehing neid tagasi võtta. Varukoopiast taastamine on ainus tee tagasi.

See sõltub muudatusest. Paljud InnoDB muudatused toimivad võrgus ja lubavad samaaegset lugemist ja kirjutamist, teised aga kopeerivad terve tabeli ja blokeerivad kirjutamist. Lisa ALGORITHM ja LOCK klauslid, et määrata, mida sa aktsepteerid.

DROP eemaldab objekti enda. TRUNCATE tühjendab tabeli, kuid säilitab selle struktuuri. Kustuta eemaldab valitud read ja seda saab filtreerida WHERE-klausliga.

Tavaliselt jah. Klientidesse sisse ehitatud tehisintellekti assistendid, näiteks MySQL Workbench Muutke selline päring nagu „lisa sünnikuupäeva_järgi nullitav kuupäevaveerg” kehtivaks süntaksiks. RevEnne genereeritud lause käivitamist võrdle seda reaalajas skeemiga.

Ainult osaliselt. Tehisintellekti ülevaatustööriistad märgistavad ilmseid riske, näiteks päringus nimetatud veeru eemaldamist või andmete kärpimist kitsendavat tüüpi. Nad ei näe iga kutsujat, seega on eeltestimisprotsess endiselt vajalik.

Võta see postitus kokku järgmiselt: