MYSQL – ALTER, DROP, ÁTNEVEZÉS, MÓDOSÍTÁS

⚡ Okos összefoglaló

Az ALTER, DROP, RENAME és MODIFY parancsok a következők: MySQL Parancsok, amelyek egy már használatban lévő adatbázist formálnak át. Hozzáadnak, eltávolítanak, átneveznek és újradefiniálnak objektumokat, például táblázatokat és oszlopokat anélkül, hogy a már tárolt sorokat elvetnék.

  • 🇧🇷 ALTER parancs: Az ALTER TABLE újradefiniál egy már létező objektumot, így egy élő séma új követelményeket vesz fel újraépítés nélkül.
  • OSZLOP HOZZÁADÁSA: Az ALTER TABLE ADD COLUMN parancs hozzáfűz egy mezőt, és a meglévő sorok megtartják az összes már meglévő értéket.
  • 🗑️ DROP parancs: A DROP parancs véglegesen töröl: egy adatbázist, egy táblát vagy egyetlen oszlopot az ALTER TABLE DROP COLUMN parancs használatával.
  • 🔁 ÁTNEVEZÉS parancs: A RENAME TABLE parancs csak a tábla nevét módosítja, a benne lévő adatok nem vesznek el.
  • ✏️ Kulcsszó módosítása: A CHANGE egyetlen utasításban átnevezi az oszlopot, és újradefiniálja a típusát és a korlátozásait, így mindkét oszlopnév megadása kötelező.
  • 🧩 MÓDOSÍTÁS Kulcsszó: A MODIFY parancs megváltoztatja a típust és a korlátozásokat, miközben keeping a név, ami a biztonságosabb választás a csak gépelést igénylő szerkesztéshez.
  • 📍 UTÁNA Kulcsszó: Az AFTER függvény egy újonnan hozzáadott oszlopot helyez el a kiválasztott pozícióban a táblázat vége helyett.

MySQL MÓDOSÍTÁS, ELVESZÉS, ÁTNEVEZÉS és MÓDOSÍTÁS

Mi az ALTER parancs a következőben: MySQL?

Az VÁLTOZTAT A parancs egy meglévő adatbázist, táblát, nézetet vagy más adatbázis-objektumot módosít, amelynek meg kell változnia az adatbázis életciklusa során. Ez az a parancs, amely lehetővé teszi a séma fejlesztését, miután azt már létrehozták és feltöltötték adatokkal.

Az üzleti követelmények ritkán állnak mozdulatlanul, és az adatbázis-tervnek velük együtt kell haladnia. Tegyük fel, hogy a Myflix adatbázis tervét már megvalósították, és a felhasználók dolgoznak vele, és csak ekkor veszi észre a csapat, hogy létfontosságú információk maradtak ki. Senki sem akarja elveszíteni a meglévő sorokat; egyszerűen csak az új információkat szeretnék rögzíteni mellettük.

Az ALTER pontosan ezt a helyzetet fedi le. Megváltoztathatja egy mező adattípusát karakterláncról számra, átnevezhet egy mezőt, vagy teljesen új oszlopot adhat hozzá egy táblázathoz, miközben a táblázatban már tárolt adatok érintetlenek maradnak.

Miután a parancs célja meg van határozva, a következő lépés a végrehajtásához szükséges szintaxis.

MySQL ALTER szintaxis

Az alábbiakban látható az alapvető szintaxis, amellyel egy már létező táblázathoz oszlopot adhatunk hozzá.

ALTER TABLE `table_name` ADD COLUMN `column_name` `data_type`;

ITT

  • "ALTER TABLE `table_name"" a parancs, amely megmondja MySQL szervert, hogy módosítsa a `tábla_neve` nevű táblát.
  • "OSZLOP HOZZÁADÁSA `oszlop_neve" "adattípus" a parancs, amely megmondja MySQL a kiszolgálónak egy új, `oszlop_neve` nevű, `adattípus` adattípusú oszlopot kell hozzáadnia.

Tegyük fel, hogy a Myflix bevezette az online számlázást és fizetést. Ennek támogatásához hozzá kell adni egy mezőt a hitelkártyaszámhoz a tagok táblázatához. Mielőtt bármilyen módosítást végeznénk, érdemes megvizsgálni a táblázat jelenlegi felépítését. Az alább látható szkript ezt teszi meg.

SHOW COLUMNS FROM `members`;
Mező típus Null Kulcs alapértelmezett külön - Extra
Tagsági szám int (11) NEM PRI NULL automatikus_növelés
teljes_nevek varchar(350) NEM NULL
nemek varchar(6) IGEN NULL
születési_dátum adat IGEN NULL
valódi cím varchar(255) IGEN NULL
postai_cím varchar(255) IGEN NULL
elérhetőség varchar(75) IGEN NULL
email varchar(255) IGEN NULL

💡 Megjegyzés az int(11) függvényhez: A zárójelben lévő szám csak a megjelenítési szélességet jelöli. MySQL A 8.0.17-es verzióban elavult az egész számtípusok esetében, így egy modern szerver egyszerűen így jelenti ezt az oszlopot: intA tárhely mérete változatlan.

Az alább látható szkript hozzáadja az új mezőt a tagok táblához.

ALTER TABLE `members` ADD COLUMN `credit_card_number` VARCHAR(25);

A szkript myflixdb-n történő futtatása egy credit_card_number nevű oszlopot ad hozzá a members táblához, amelynek adattípusa VARCHAR. A SHOW COLUMNS szkript újbóli futtatása a következő eredményt adja.

Mező típus Null Kulcs alapértelmezett külön - Extra
Tagsági szám int (11) NEM PRI NULL automatikus_növelés
teljes_nevek varchar(350) NEM NULL
nemek varchar(6) IGEN NULL
születési_dátum adat IGEN NULL
valódi cím varchar(255) IGEN NULL
postai_cím varchar(255) IGEN NULL
elérhetőség varchar(75) IGEN NULL
email varchar(255) IGEN NULL
bankkártya száma varchar(25) IGEN NULL

A kiemelt sor megerősíti, hogy a credit_card_number hozzáadásra került a tagok táblához, és a többi oszlopban már tárolt adatokat a hozzáadás nem érinti.

Egy oszlop hozzáadása csak a történet fele. A sémának el kell távolítania a már nem szükséges objektumokat is, ami a DROP parancs feladata.

Mi a DROP parancs a következőben: MySQL?

A DROP parancs véglegesen töröl egy objektumot. Arra szolgál, hogy

  1. Adatbázis törlése a MySQL szerver.
  2. Töröljön egy objektumot, például egy táblát vagy egy oszlopot az adatbázisból.

⚠️ Figyelmeztetés: A DROP nem visszafordítható. Sem az objektum, sem a benne lévő sorok nem állíthatók vissza biztonsági mentés nélkül, ezért először futtasson egy SELECT-et a célobjektumon, és erősítse meg a biztonsági mentést.

Cseppping egy oszlop

A fenti ALTER példában egy credit_card_number nevű oszlop került hozzáadásra a members táblához. Tegyük fel, hogy az online számlázási funkciót elhalasztják, és ezt az oszlopot ismét el kell távolítani. A következő szkript ezt teszi meg.

ALTER TABLE `members` DROP COLUMN `credit_card_number`;

A szkript végrehajtása törli a credit_card_number oszlopot a members táblából. Az oszlopok újbóli listázása megerősíti az eredményt.

SHOW COLUMNS FROM `members`;
Mező típus Null Kulcs alapértelmezett külön - Extra
Tagsági szám int (11) NEM PRI NULL automatikus_növelés
teljes_nevek varchar(350) NEM NULL
nemek varchar(6) IGEN NULL
születési_dátum adat IGEN NULL
valódi cím varchar(255) IGEN NULL
postai_cím varchar(255) IGEN NULL
elérhetőség varchar(75) IGEN NULL
email varchar(255) IGEN NULL

A hitelkártyaszám eltűnt a mezőlistából.

DROP TÁBLÁZAT

Egy teljes tábla adatbázisból való törlésének szintaxisa a következő.

DROP TABLE `sample_table`;

Egy valós objektumra alkalmazva az állítás így néz ki.

DROP TABLE `categories_archive`;

A futtatása törli a `categories_archive` nevű táblát és a benne lévő összes sort az adatbázisból.

DROP ADATBÁZIS

Ugyanaz a kulcsszó eltávolít egy teljes sémát. Az IF EXISTS hozzáadása elnyomja a hibát, amely MySQL akkor aktiválódik, amikor a célpont már eltűnt, ami hasznos az egynél többször futó szkriptekben.

DROP DATABASE IF EXISTS `myflixdb_backup`;

Egy objektum eltávolítása végleges. Ha magának az objektumnak fenn kell maradnia, és csak a neve hibás, akkor a RENAME parancs a megfelelő eszköz.

Mi a RENAME parancs a következőben: MySQL?

A RENAME parancs egy meglévő adatbázis-objektum, például egy tábla vagy egy oszlop nevét új névre módosítja. Egy tábla átnevezése nem okozza a benne található adatok elvesztését.

A parancs alapvető szintaxisa a következő.

RENAME TABLE `current_table_name` TO `new_table_name`;

A movierentals tábla movie_rentals névre való átnevezéséhez az alábbi szkriptet kell használni.

RENAME TABLE `movierentals` TO `movie_rentals`;

A végrehajtása átnevezi a `movierentals` táblát `movie_rentals` táblára. Mivel az átnevezés csak a címke módosítása, ugyanazon utasítás megfordítása visszaállítja az eredeti nevet.

RENAME TABLE `movie_rentals` TO `movierentals`;

A RENAME TABLE parancs kezeli a tábla nevét. Egy tábla átnevezése oszlop, és a benne lévő információk megváltoztatása a CHANGE kulcsszó feladata.

Kulcsszó módosítása

A CHANGE kulcsszó lehetővé teszi, hogy

  1. Oszlop nevének módosítása
  2. Az oszlop adattípusának módosítása
  3. Az oszlopkorlátozások módosítása

Vegyünk egy példát. A members tábla full_names mezője varchar adattípusú, szélessége 350 karakter, ahogy az alábbi szkript is megerősíti.

SHOW COLUMNS FROM `members`;
Mező típus Null Kulcs alapértelmezett külön - Extra
Tagsági szám int (11) NEM PRI NULL automatikus_növelés
teljes_nevek varchar(350) NEM NULL
nemek varchar(6) IGEN NULL
születési_dátum adat IGEN NULL
valódi cím varchar(255) IGEN NULL
postai_cím varchar(255) IGEN NULL
elérhetőség varchar(75) IGEN NULL
email varchar(255) IGEN NULL

Tegyük fel, hogy a követelmény az, hogy

  1. Módosítsa a mező nevét „full_names”-ről „fullname”-re
  2. Változtasd meg char adattípusra, 250 szélességgel
  3. Adjon hozzá egy NOT NULL megkötést

Mindhárom szerkesztést egyetlen CHANGE utasítással lehet végrehajtani.

ALTER TABLE `members` CHANGE COLUMN `full_names` `fullname` char(250) NOT NULL;

A myflixdb-n végrehajtva, majd a SHOW COLUMNS szkript futtatva a következő eredményt kapjuk.

Mező típus Null Kulcs alapértelmezett külön - Extra
Tagsági szám int (11) NEM PRI NULL automatikus_növelés
teljes név char (250) NEM NULL
nemek varchar(6) IGEN NULL
születési_dátum adat IGEN NULL
valódi cím varchar(255) IGEN NULL
postai_cím varchar(255) IGEN NULL
elérhetőség varchar(75) IGEN NULL
email varchar(255) IGEN NULL

Az oszlop neve mostantól fullname, char(250) karaktereket tartalmaz, és elutasítja a NULL értékeket.

Kulcsszó MÓDOSÍTÁSA

A MODIFY kulcsszó lehetővé teszi, hogy

  1. Módosítsa az oszlop adattípusát
  2. Módosítsa az oszlopkorlátozásokat

A fenti CHANGE példában a mezőnevet kétszer kellett megadni, annak ellenére, hogy az átnevezés csak a cél része volt. A mezőnév kihagyása a CHANGE utasításból hibát generál. Ha csak az adattípust és a megszorításokat kell módosítani, és a névnek változatlannak kell maradnia, a MODIFY elvégzi a feladatot az oszlop egyetlen említésével.

Az alábbi szkript a „teljes név” mező szélességét 250-ről 50-re módosítja.

ALTER TABLE `members` MODIFY `fullname` char(50) NOT NULL;

A myflixdb-n végrehajtva, majd a SHOW COLUMNS szkript futtatásával az alább látható eredményt kapjuk.

Mező típus Null Kulcs alapértelmezett külön - Extra
Tagsági szám int (11) NEM PRI NULL automatikus_növelés
teljes név char (50) NEM NULL
nemek varchar(6) IGEN NULL
születési_dátum adat IGEN NULL
valódi cím varchar(255) IGEN NULL
postai_cím varchar(255) IGEN NULL
elérhetőség varchar(75) IGEN NULL
email varchar(255) IGEN NULL

⚠️ Figyelmeztetés: Egy oszlop szűkítése csonkolja a már nem férő adatokat. Az 50 karakternél hosszabb neveket ez az utasítás rövidre vágja, ezért a leghosszabb létező értéket egy SELECT lekérdezés egy mező zsugorítása előtt.

VÁLTOZTATÁS vs. MÓDOSÍTÁS vs. OSZLOP ÁTNEVEZÉSE

A három kulcsszó átfedésben van, és a rossz kiválasztása a leggyakoribb hibaforrás ezen a területen. Az alábbi táblázat egymás mellett mutatja őket.

Kulcsszó Átnevezi az oszlopot Módosítja a típust és a korlátozásokat Régi név szükséges Tipikus felhasználás
VÁLTOZÁS Igen Igen Igen, plusz az új név Átnevezés és újradefiniálás egyetlen utasításban
MÓDOSÍT Nem Igen Egyszer adott név Oszlop szélesítése, szűkítése vagy újragépelése
OSZLOP ÁTNEVEZÉSE Igen Nem Igen, plusz az új név Csak átnevezés, innen MySQL 8.0 tovább

MySQL A 8.0-s verzió egy negyedik lehetőséget adott hozzá a legegyszerűbb esetre, egy átnevezést újradefiniálás nélkül.

ALTER TABLE `members` RENAME COLUMN `fullname` TO `full_name`;

A típus és a név kérdése megvan. A fennmaradó kérdés az, hogy hol helyezkedik el a táblázatban az új oszlop, ezt az AFTER kulcsszó szabályozza.

UTÁN Kulcsszó

Alapértelmezés szerint az ALTER TABLE paranccsal hozzáadott oszlop a táblázat végére kerül. Ha egy adott pozícióba szeretné helyezni, az ALTER parancsot az AFTER kulcsszóval kell kombinálni.

Az alábbi szkript a „date_of_registration” karakterláncot közvetlenül a date_of_birth után adja hozzá a tagok táblában.

ALTER TABLE `members` ADD `date_of_registration` date NULL AFTER `date_of_birth`;

A myflixdb-n végrehajtva, majd a SHOW COLUMNS szkript futtatásával az alább látható eredményt kapjuk.

Mező típus Null Kulcs alapértelmezett külön - Extra
Tagsági szám int (11) NEM PRI NULL automatikus_növelés
teljes név char (50) NEM NULL
nemek varchar(6) IGEN NULL
születési_dátum adat IGEN NULL
regisztráció_dátuma adat IGEN NULL
valódi cím varchar(255) IGEN NULL
postai_cím varchar(255) IGEN NULL
elérhetőség varchar(75) IGEN NULL
email varchar(255) IGEN NULL

A kiemelt sor a születési_date_of_birth után hozzáadott oszlop. A FIRST kulcsszó ugyanígy működik, és az új oszlopot a táblázat legelejére helyezi.

GYIK

Nem. Az olyan DDL utasítások, mint az ALTER, DROP és RENAME, implicit módon véglegesítődnek a MySQL, így egy megnyitott tranzakció nem tudja visszavonni őket. A biztonsági mentésből való visszaállítás az egyetlen visszaút.

Attól függ, hogy mit fogadsz el, ez a módosítástól függ. Sok InnoDB módosítás online fut, és lehetővé teszi az egyidejű olvasásokat és írásokat, míg mások a teljes táblát másolják, és blokkolják az írásokat. Adj hozzá ALGORITHM és LOCK záradékokat, hogy meghatározd, mit fogadsz el.

A DROP parancs eltávolítja magát az objektumot. A TRUNCATE parancs kiüríti a táblázatot, de megőrzi a szerkezetét. DELETE eltávolítja a kijelölt sorokat, és WHERE záradékkal szűrhető.

Általában igen. Kliensekbe épített MI-asszisztensek, mint például MySQL Workbench Alakítsd át érvényes szintaxissá az olyan kéréseket, mint az „adj hozzá egy nullázható dátum oszlopot a születési_date_után”. RevA futtatás előtt hasonlítsa össze a generált utasítást az élő sémával.

Csak részben. A mesterséges intelligencia által felügyelt eszközök jelzik a nyilvánvaló kockázatokat, például egy lekérdezésben megnevezett, elvetett oszlopot vagy egy szűkített típust, amely csonkolja az adatokat. Nem látják az összes hívót, így egy átmeneti futtatás továbbra is szükséges.

Foglald össze ezt a bejegyzést a következőképpen: