MYSQL – ALTER, DROP, RENAME, MODIFY
⚡ Chytré shrnutí
ZMĚNIT, ODSTRANIT, PŘEJMENOVAT a UPRAVIT jsou MySQL příkazy, které přetvářejí databázi poté, co je již používána. Přidávají, odebírají, přejmenovávají a předefinují objekty, jako jsou tabulky a sloupce, aniž by zahodily již uložené řádky.

Co je příkaz ALTER v MySQL?
Jedno ALTER Příkaz upravuje existující databázi, tabulku, zobrazení nebo jiný databázový objekt, který je třeba změnit během životního cyklu databáze. Je to příkaz, který umožňuje vývoj schématu poté, co již bylo vytvořeno a naplněno daty.
Obchodní požadavky se málokdy zastaví a návrh databáze se s nimi musí měnit. Předpokládejme, že návrh databáze Myflix byl implementován a uživatelé s ním pracují, a teprve tehdy si tým uvědomí, že byly vynechány důležité informace. Nikdo nechce ztratit stávající řádky; chce jen zaznamenat nové informace vedle nich.
Příkaz ALTER přesně tuto situaci pokrývá. Může změnit datový typ pole z řetězce na číslo, přejmenovat pole nebo přidat do tabulky zcela nový sloupec, a to vše při zachování dat již uložených v tabulce.
Po stanovení účelu příkazu je dalším krokem syntaxe, která jej provede.
MySQL Syntaxe ALTER
Základní syntaxe používaná k přidání sloupce do již existující tabulky je uvedena níže.
ALTER TABLE `table_name` ADD COLUMN `column_name` `data_type`;
ZDE
- "ALTER TABLE `název_tabulky`" je příkaz, který říká MySQL serveru upravit tabulku s názvem `název_tabulky`.
- "PŘIDAT SLOUPEC `název_sloupce` `typ_dat`" je příkaz, který říká MySQL serveru přidat nový sloupec s názvem `column_name` s datovým typem `data_type`.
Předpokládejme, že Myflix zavedl online fakturaci a platby. Pro jejich podporu je nutné do tabulky členů přidat pole pro číslo kreditní karty. Před provedením jakýchkoli změn je vhodné se podívat na strukturu tabulky v jejím současném stavu. To provede níže uvedený skript.
SHOW COLUMNS FROM `members`;
| Pole | Typ | Null | Klíč | Automaticky | extra |
|---|---|---|---|---|---|
| členské číslo | int (11) | NE | PRI | NULL | auto_increment |
| celá_jména | varchar(350) | NE | NULL | ||
| rod | varchar(6) | ANO | NULL | ||
| datum_narození | datum | ANO | NULL | ||
| fyzická adresa | varchar(255) | ANO | NULL | ||
| poštovní_adresa | varchar(255) | ANO | NULL | ||
| kontaktní_číslo | varchar(75) | ANO | NULL | ||
| varchar(255) | ANO | NULL |
💡 Poznámka k int(11): Číslo v závorkách udává pouze šířku zobrazení. MySQL Verze 8.0.17 jej pro celočíselné typy zastarala, takže moderní server tento sloupec hlásí jednoduše jako intVelikost úložiště se nezmění.
Níže uvedený skript přidá nové pole do tabulky členů.
ALTER TABLE `members` ADD COLUMN `credit_card_number` VARCHAR(25);
Spuštění tohoto skriptu na myflixdb přidá do tabulky members sloupec s názvem credit_card_number s datovým typem VARCHAR. Opakované spuštění skriptu SHOW COLUMNS vrátí následující výsledek.
| Pole | Typ | Null | Klíč | Automaticky | extra |
|---|---|---|---|---|---|
| členské číslo | int (11) | NE | PRI | NULL | auto_increment |
| celá_jména | varchar(350) | NE | NULL | ||
| rod | varchar(6) | ANO | NULL | ||
| datum_narození | datum | ANO | NULL | ||
| fyzická adresa | varchar(255) | ANO | NULL | ||
| poštovní_adresa | varchar(255) | ANO | NULL | ||
| kontaktní_číslo | varchar(75) | ANO | NULL | ||
| varchar(255) | ANO | NULL | |||
| číslo_kreditní_karty | varchar(25) | ANO | NULL |
Zvýrazněný řádek potvrzuje, že hodnota credit_card_number byla přidána do tabulky členů a data, která se již nacházejí v ostatních sloupcích, zůstanou přidáním nedotčena.
Přidání sloupce je jen polovina příběhu. Schéma se také musí zbavit objektů, které již nepotřebuje, což je úkolem příkazu DROP.
Co je příkaz DROP? MySQL?
Příkaz DROP trvale odstraní objekt. Používá se k
- Odstranění databáze z MySQL Server.
- Odstranění objektu, jako je tabulka nebo sloupec, z databáze.
Warning️ Varování: Příkaz DROP není vratný. Ani objekt, ani řádky v něm nelze obnovit bez zálohy, proto spusťte příkaz SELECT pro cíl a nejprve potvrďte zálohu.
Poklesping sloupec
Ve výše uvedeném příkladu s příkazem ALTER byl do tabulky členů přidán sloupec s názvem credit_card_number. Předpokládejme, že funkce online fakturace je odložena a tento sloupec by měl být opět odstraněn. Následující skript to provede.
ALTER TABLE `members` DROP COLUMN `credit_card_number`;
Spuštěním skriptu se z tabulky členů odstraní sloupec credit_card_number. Opětovným výpisem sloupců se výsledek potvrdí.
SHOW COLUMNS FROM `members`;
| Pole | Typ | Null | Klíč | Automaticky | extra |
|---|---|---|---|---|---|
| členské číslo | int (11) | NE | PRI | NULL | auto_increment |
| celá_jména | varchar(350) | NE | NULL | ||
| rod | varchar(6) | ANO | NULL | ||
| datum_narození | datum | ANO | NULL | ||
| fyzická adresa | varchar(255) | ANO | NULL | ||
| poštovní_adresa | varchar(255) | ANO | NULL | ||
| kontaktní_číslo | varchar(75) | ANO | NULL | ||
| varchar(255) | ANO | NULL |
Číslo kreditní karty zmizelo ze seznamu polí.
SHOP STŮL
Syntaxe pro odstranění celé tabulky z databáze je následující.
DROP TABLE `sample_table`;
Aplikováno na reálný objekt vypadá toto tvrzení takto.
DROP TABLE `categories_archive`;
Jeho spuštěním se z databáze smaže tabulka s názvem `categories_archive` a všechny řádky v ní.
DROP DATABASE
Stejné klíčové slovo odstraní celé schéma. Přidáním IF EXISTS se potlačí chyba, která MySQL vyvolává, když je cíl již pryč, což je užitečné uvnitř skriptů, které se běží vícekrát.
DROP DATABASE IF EXISTS `myflixdb_backup`;
Odstranění objektu je konečné. Pokud by měl samotný objekt přežít a chybný je pouze jeho název, je správným nástrojem příkaz RENAME.
Co je příkaz RENAME v MySQL?
Příkaz RENAME změní název existujícího databázového objektu, například tabulky nebo sloupce, na nový název. Přejmenování tabulky nezpůsobí ztrátu žádných dat v ní obsažených.
Příkaz má následující základní syntaxi.
RENAME TABLE `current_table_name` TO `new_table_name`;
Pro přejmenování tabulky movierentals na movie_rentals se používá níže uvedený skript.
RENAME TABLE `movierentals` TO `movie_rentals`;
Jeho spuštěním se tabulka `movierentals` přejmenuje na `movie_rentals`. Protože se jedná pouze o změnu popisku, stejný příkaz v opačném pořadí obnoví původní název.
RENAME TABLE `movie_rentals` TO `movierentals`;
RENAME TABLE zpracovává název tabulky. Přejmenování sloupeca změna toho, co obsahuje, je dílem klíčového slova CHANGE.
ZMĚNA klíčového slova
Klíčové slovo CHANGE vám umožňuje
- Změna názvu sloupce
- Změna datového typu sloupce
- Změna omezení sloupců
Uvažujme příklad. Pole full_names v tabulce members je datového typu varchar se šířkou 350, jak potvrzuje níže uvedený skript.
SHOW COLUMNS FROM `members`;
| Pole | Typ | Null | Klíč | Automaticky | extra |
|---|---|---|---|---|---|
| členské číslo | int (11) | NE | PRI | NULL | auto_increment |
| celá_jména | varchar(350) | NE | NULL | ||
| rod | varchar(6) | ANO | NULL | ||
| datum_narození | datum | ANO | NULL | ||
| fyzická adresa | varchar(255) | ANO | NULL | ||
| poštovní_adresa | varchar(255) | ANO | NULL | ||
| kontaktní_číslo | varchar(75) | ANO | NULL | ||
| varchar(255) | ANO | NULL |
Předpokládejme, že požadavek je
- Změňte název pole z „full_names“ na „fullname“
- Změňte jej na datový typ char se šířkou 250.
- Přidejte omezení NOT NULL
Všechny tři úpravy se provádějí jediným příkazem CHANGE.
ALTER TABLE `members` CHANGE COLUMN `full_names` `fullname` char(250) NOT NULL;
Spuštění na myflixdb a následné spuštění skriptu SHOW COLUMNS dává následující výsledek.
| Pole | Typ | Null | Klíč | Automaticky | extra |
|---|---|---|---|---|---|
| členské číslo | int (11) | NE | PRI | NULL | auto_increment |
| celé jméno | char (250) | NE | NULL | ||
| rod | varchar(6) | ANO | NULL | ||
| datum_narození | datum | ANO | NULL | ||
| fyzická adresa | varchar(255) | ANO | NULL | ||
| poštovní_adresa | varchar(255) | ANO | NULL | ||
| kontaktní_číslo | varchar(75) | ANO | NULL | ||
| varchar(255) | ANO | NULL |
Sloupec se nyní nazývá fullname, obsahuje char(250) a odmítá hodnoty NULL.
UPRAVIT klíčové slovo
Klíčové slovo MODIFY vám umožňuje
- Úprava datového typu sloupce
- Úprava omezení sloupců
Ve výše uvedeném příkladu CHANGE musel být název pole zadán dvakrát, přestože přejmenování bylo pouze součástí cíle. Vynechání názvu pole z příkazu CHANGE generuje chybu. Pokud je třeba upravit pouze datový typ a omezení a název by měl zůstat tak, jak je, příkaz MODIFY provede tuto práci s jednou zmínkou o sloupci.
Níže uvedený skript změní šířku pole „celé jméno“ z 250 na 50.
ALTER TABLE `members` MODIFY `fullname` char(50) NOT NULL;
Spuštění skriptu SHOW COLUMNS na myflixdb a následné spuštění skriptu SHOW COLUMNS dává výsledek zobrazený níže.
| Pole | Typ | Null | Klíč | Automaticky | extra |
|---|---|---|---|---|---|
| členské číslo | int (11) | NE | PRI | NULL | auto_increment |
| celé jméno | char (50) | NE | NULL | ||
| rod | varchar(6) | ANO | NULL | ||
| datum_narození | datum | ANO | NULL | ||
| fyzická adresa | varchar(255) | ANO | NULL | ||
| poštovní_adresa | varchar(255) | ANO | NULL | ||
| kontaktní_číslo | varchar(75) | ANO | NULL | ||
| varchar(255) | ANO | NULL |
Warning️ Varování: Zúžení sloupce ořízne data, která se již nevejdou. Jakýkoli název delší než 50 znaků je tímto příkazem zkrácen, proto se nejdelší existující hodnota kontroluje pomocí SELECT dotaz před zmenšením pole.
ZMĚNA vs. ÚPRAVA vs. PŘEJMENOVÁNÍ SLOUPCE
Tato tři klíčová slova se překrývají a výběr nesprávného klíčového slova je v této oblasti nejčastějším zdrojem chyb. Níže uvedená tabulka je srovnává vedle sebe.
| Klíčové slovo | Přejmenuje sloupec | Mění typ a omezení | Vyžadováno staré jméno | Typické použití |
|---|---|---|---|---|
| ZMĚNA | Ano | Ano | Ano, plus nové jméno | Přejmenování a předefinování v jednom příkazu |
| MODIFIKOVAT | Ne | Ano | Jméno dané jednou | Rozšíření, zúžení nebo přepsání sloupce |
| PŘEJMENOVAT SLOUPEC | Ano | Ne | Ano, plus nové jméno | Pouze přejmenovat, z MySQL 8.0 dále |
MySQL Verze 8.0 přidala pro nejjednodušší případ čtvrtou možnost, a to přejmenování bez jakékoli redefinice.
ALTER TABLE `members` RENAME COLUMN `fullname` TO `full_name`;
Typ a název jsou vyřešeny. Zbývající otázkou je, kam se v tabulce umístí nový sloupec, což řídí klíčové slovo AFTER.
PO klíčovém slově
Ve výchozím nastavení se sloupec přidaný pomocí příkazu ALTER TABLE umístí na konec tabulky. Chcete-li jej umístit na určitou pozici, je příkaz ALTER kombinován s klíčovým slovem AFTER.
Níže uvedený skript přidá „date_of_registration“ přímo za date_of_birth v tabulce členů.
ALTER TABLE `members` ADD `date_of_registration` date NULL AFTER `date_of_birth`;
Spuštění skriptu SHOW COLUMNS na myflixdb a následné spuštění skriptu SHOW COLUMNS dává výsledek zobrazený níže.
| Pole | Typ | Null | Klíč | Automaticky | extra |
|---|---|---|---|---|---|
| členské číslo | int (11) | NE | PRI | NULL | auto_increment |
| celé jméno | char (50) | NE | NULL | ||
| rod | varchar(6) | ANO | NULL | ||
| datum_narození | datum | ANO | NULL | ||
| datum_registrace | datum | ANO | NULL | ||
| fyzická adresa | varchar(255) | ANO | NULL | ||
| poštovní_adresa | varchar(255) | ANO | NULL | ||
| kontaktní_číslo | varchar(75) | ANO | NULL | ||
| varchar(255) | ANO | NULL |
Zvýrazněný řádek je sloupec přidaný po date_of_birth. Klíčové slovo FIRST funguje stejným způsobem a přesune nový sloupec úplně na začátek tabulky.
