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.

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 | ||
| 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 | ||
| 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
- Adatbázis törlése a MySQL szerver.
- 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 | ||
| 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
- Oszlop nevének módosítása
- Az oszlop adattípusának módosítása
- 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 | ||
| varchar(255) | IGEN | NULL |
Tegyük fel, hogy a követelmény az, hogy
- Módosítsa a mező nevét „full_names”-ről „fullname”-re
- Változtasd meg char adattípusra, 250 szélességgel
- 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 | ||
| 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
- Módosítsa az oszlop adattípusát
- 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 | ||
| 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 | ||
| 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.
