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.

  • 🛠️ Příkaz ALTER: Příkaz ALTER TABLE předefinuje objekt, který již existuje, takže aktivní schéma absorbuje nové požadavky bez nutnosti opětovného sestavení.
  • PŘIDAT SLOUPEC: Příkaz ALTER TABLE ADD COLUMN přidá nové pole a existující řádky si zachovají všechny hodnoty, které již obsahovaly.
  • 🗑️ Příkaz DROP: Příkaz DROP trvale odstraní: databázi, tabulku nebo jeden sloupec pomocí příkazu ALTER TABLE DROP COLUMN.
  • 🔁 Příkaz PŘEJMENOVAT: Příkaz RENAME TABLE změní pouze název tabulky a žádná data v ní se neztratí.
  • ✏️ ZMĚNA klíčového slova: Příkaz CHANGE přejmenuje sloupec a předefinuje jeho typ a omezení v jednom příkazu, takže jsou povinné oba názvy sloupců.
  • 🧩 UPRAVIT klíčové slovo: Příkaz MODIFY mění typ a omezení a zároveň zachováváping název, bezpečnější volba pro úpravu pouze textu.
  • 📍 PO klíčovém slově: Příkaz AFTER umístí nově přidaný sloupec na zvolenou pozici místo na konec tabulky.

MySQL ZMĚNIT, ODSTRANIT, PŘEJMENOVAT a UPRAVIT

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

  1. Odstranění databáze z MySQL Server.
  2. 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
e-mail 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

  1. Změna názvu sloupce
  2. Změna datového typu sloupce
  3. 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
e-mail varchar(255) ANO NULL

Předpokládejme, že požadavek je

  1. Změňte název pole z „full_names“ na „fullname“
  2. Změňte jej na datový typ char se šířkou 250.
  3. 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
e-mail 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

  1. Úprava datového typu sloupce
  2. Ú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
e-mail 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
e-mail 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.

Nejčastější dotazy

Ne. Příkazy DDL, jako například ALTER, DROP a RENAME, se implicitně potvrzují v MySQL, takže otevřená transakce je nemůže vrátit zpět. Obnova ze zálohy je jediná cesta zpět.

Záleží na změně. Mnoho úprav InnoDB běží online a umožňuje souběžné čtení a zápisy, zatímco jiné kopírují celou tabulku a blokují zápisy. Přidejte klauzule ALGORITHM a LOCK, abyste uvedli, co budete akceptovat.

DROP odstraní samotný objekt. TRUNCATE vyprázdní tabulku, ale zachová její strukturu. DELETE odstraní vybrané řádky a lze je filtrovat pomocí klauzule WHERE.

Obvykle ano. Asistenti s umělou inteligencí zabudovaní do klientů, jako například MySQL Workbench převeďte požadavek jako „přidat sloupec s datem s hodnotou null za date_of_birth“ do platné syntaxe. RevPřed spuštěním si vygenerovaný příkaz prohlédněte v živém schématu.

Pouze částečně. Nástroje pro kontrolu s využitím umělé inteligence označují zjevná rizika, jako je například vynechaný sloupec, který je v dotazu stále pojmenován, nebo zúžený typ, který ořezává data. Nevidí každého volajícího, takže je i nadále nutné provést testovací spuštění.

Shrňte tento příspěvek takto: