MYSQL – ПРОМЯНА, ИЗПУСКАНЕ, ПРЕИМЕНУВАНЕ, ПРОМЕНЯНЕ

⚡ Умно обобщение

ПРОМЯНА, ОТКАЗ, ПРЕИМЕНУВАНЕ и МОДИФИКАЦИЯ са MySQL команди, които преоформят база данни, след като тя вече е използвана. Те добавят, премахват, преименуват и предефинират обекти като таблици и колони, без да изхвърлят вече съхранените редове.

  • 🛠️ Команда ALTER: ALTER TABLE предефинира обект, който вече съществува, така че активната схема абсорбира нови изисквания без повторно изграждане.
  • ДОБАВЯНЕ НА КОЛОНА: ALTER TABLE ADD COLUMN добавя поле и съществуващите редове запазват всяка стойност, която вече са съдържали.
  • 🗑️ Команда DROP: DROP изтрива окончателно: база данни, таблица или една колона чрез ALTER TABLE DROP COLUMN.
  • 🔁 Команда за преименуване: RENAME TABLE променя само името на таблицата и не губи данни в нея.
  • ПРОМЯНА Ключова дума: CHANGE преименува колона и предефинира нейния тип и ограничения в един оператор, така че и двете имена на колони са задължителни.
  • 🧩 ПРОМЕНИ ключова дума: MODIFY променя типа и ограниченията, като същевременно запазваping името, по-безопасният избор за редактиране само на текст.
  • 📍 СЛЕД ключова дума: AFTER поставя новодобавената колона на избрана позиция, вместо в края на таблицата.

MySQL ПРОМЯНА, ИЗПУСКВАНЕ, ПРЕИМЕНАВАНЕ и МОДИФИЦИРАНЕ

Какво представлява командата ALTER в MySQL?

- ПРОМЕНИ Командата променя съществуваща база данни, таблица, изглед или друг обект на база данни, който трябва да се промени по време на жизнения цикъл на базата данни. Това е командата, която позволява на схемата да се развива, след като вече е създадена и запълнена с данни.

Бизнес изискванията рядко стоят неподвижно и дизайнът на базата данни трябва да се движи заедно с тях. Да предположим, че дизайнът на базата данни Myflix е внедрен и потребителите работят с нея, и едва тогава екипът осъзнава, че е пропусната жизненоважна информация. Никой не иска да загуби съществуващите редове; те просто искат да запишат новата информация заедно с тях.

ALTER покрива точно тази ситуация. Той може да промени типа данни на поле от низ на число, да преименува поле или да добави изцяло нова колона към таблица, като същевременно данните, които вече са съхранени в таблицата, остават непокътнати.

След като целта на командата е установена, следващата стъпка е синтаксисът, който я изпълнява.

MySQL Синтаксис на ALTER

Основният синтаксис, използван за добавяне на колона към вече съществуваща таблица, е показан по-долу.

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

ТУК

  • „ПРОМИНЯВАНЕ НА ТАБЛИЦА `име_на_таблица`” е командата, която казва MySQL сървър, за да модифицира таблицата с име `table_name`.
  • „ДОБАВИ КОЛОНА `име_на_колона` `тип_данни`” е командата, която казва MySQL сървърът да добави нова колона с име `column_name` с тип данни `data_type`.

Да предположим, че Myflix е въвел онлайн фактуриране и плащания. За да се поддържа това, към таблицата с членове трябва да се добави поле за номера на кредитната карта. Преди да се правят каквито и да е промени, си струва да се разгледа структурата на таблицата в сегашния ѝ вид. Скриптът, показан по-долу, прави това.

SHOW COLUMNS FROM `members`;
Област Тип Null ключ По подразбиране екстра - Extra
членски_номер int (11) НЕ PRI NULL автоматично_увеличение
пълни_имена varchar (350) НЕ NULL
пол varchar (6) ДА NULL
дата_на_раждане дата ДА NULL
физически_адрес varchar (255) ДА NULL
пощенски_адрес varchar (255) ДА NULL
номер_на_контакт varchar (75) ДА NULL
електронна поща varchar (255) ДА NULL

💡 Забележка за int(11): Числото в скобите е само ширината на дисплея. MySQL Версия 8.0.17 го отхвърли за целочислени типове, така че съвременните сървъри отчитат тази колона просто като IntРазмерът на хранилището е непроменен.

Показаният по-долу скрипт добавя новото поле към таблицата members.

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

Изпълнението на този скрипт спрямо myflixdb добавя колона с име credit_card_number към таблицата members с тип данни VARCHAR. Повторното изпълнение на скрипта SHOW COLUMNS дава следния резултат.

Област Тип Null ключ По подразбиране екстра - Extra
членски_номер int (11) НЕ PRI NULL автоматично_увеличение
пълни_имена varchar (350) НЕ NULL
пол varchar (6) ДА NULL
дата_на_раждане дата ДА NULL
физически_адрес varchar (255) ДА NULL
пощенски_адрес varchar (255) ДА NULL
номер_на_контакт varchar (75) ДА NULL
електронна поща varchar (255) ДА NULL
номер_на_кредитна_карта varchar (25) ДА NULL

Маркираният ред потвърждава, че credit_card_number е добавен към таблицата members и данните, които вече се намират в другите колони, не са засегнати от добавянето.

Добавянето на колона е само половината от работата. Схемата също така трябва да се отърве от обекти, от които вече не се нуждае, което е задачата на командата DROP.

Какво представлява командата DROP? MySQL?

Командата DROP изтрива обект завинаги. Използва се за

  1. Изтриване на база данни от MySQL сървър.
  2. Изтриване на обект, като например таблица или колона, от база данни.

⚠️ Предупреждение: DROP не е обратима. Нито обектът, нито редовете в него могат да бъдат възстановени без резервно копие, така че изпълнете SELECT спрямо целта и първо потвърдете резервното копие.

Спадping колона

В горния пример с ALTER, към таблицата members е добавена колона с име credit_card_number. Да предположим, че функцията за онлайн фактуриране е отложена и тази колона трябва да бъде премахната отново. Следният скрипт го прави.

ALTER TABLE `members` DROP COLUMN `credit_card_number`;

Изпълнението на скрипта премахва колоната credit_card_number от таблицата members. Повторното изброяване на колоните потвърждава резултата.

SHOW COLUMNS FROM `members`;
Област Тип Null ключ По подразбиране екстра - Extra
членски_номер int (11) НЕ PRI NULL автоматично_увеличение
пълни_имена varchar (350) НЕ NULL
пол varchar (6) ДА NULL
дата_на_раждане дата ДА NULL
физически_адрес varchar (255) ДА NULL
пощенски_адрес varchar (255) ДА NULL
номер_на_контакт varchar (75) ДА NULL
електронна поща varchar (255) ДА NULL

Номерът на кредитната карта е премахнат от списъка с полета.

ИЗПУСКАНЕ МАСА

Синтаксисът за премахване на цяла таблица от база данни е следният.

DROP TABLE `sample_table`;

Приложено към реален обект, твърдението изглежда така.

DROP TABLE `categories_archive`;

Изпълнението му изтрива таблицата с име `categories_archive` и всеки ред в нея от базата данни.

ПРЕКРАТЯВАНЕ НА БАЗА ДАННИ

Същата ключова дума премахва цяла схема. Добавянето на IF EXISTS потиска грешката, която MySQL повдига, когато целта вече е изчезнала, което е полезно в скриптове, които се изпълняват повече от веднъж.

DROP DATABASE IF EXISTS `myflixdb_backup`;

Премахването на обект е окончателно. Когато самият обект трябва да оцелее и само името му е грешно, командата RENAME е правилният инструмент.

Какво представлява командата RENAME в MySQL?

Командата RENAME променя името на съществуващ обект в базата данни, като например таблица или колона, на ново име. Преименуването на таблица не води до загуба на данни, съдържащи се в нея.

Командата има следния основен синтаксис.

RENAME TABLE `current_table_name` TO `new_table_name`;

За да преименувате таблицата movierentals на movie_rentals, се използва скриптът по-долу.

RENAME TABLE `movierentals` TO `movie_rentals`;

Изпълнението му преименува таблицата `movierentals` на `movie_rentals`. Тъй като преименуването е само промяна на етикета, същият оператор, обърнат в обратна посока, възстановява оригиналното име.

RENAME TABLE `movie_rentals` TO `movierentals`;

RENAME TABLE обработва името на таблица. Преименуване на колонаи промяната на това, което съдържа, е дело на ключовата дума CHANGE.

ПРОМЯНА на ключова дума

Ключовата дума CHANGE ви позволява да

  1. Промяна на името на колона
  2. Промяна на типа данни на колоната
  3. Промяна на ограниченията на колоните

Да разгледаме един пример. Полето full_names в таблицата members е от тип данни varchar с ширина 350, както потвърждава скриптът по-долу.

SHOW COLUMNS FROM `members`;
Област Тип Null ключ По подразбиране екстра - Extra
членски_номер int (11) НЕ PRI NULL автоматично_увеличение
пълни_имена varchar (350) НЕ NULL
пол varchar (6) ДА NULL
дата_на_раждане дата ДА NULL
физически_адрес varchar (255) ДА NULL
пощенски_адрес varchar (255) ДА NULL
номер_на_контакт varchar (75) ДА NULL
електронна поща varchar (255) ДА NULL

Да предположим, че изискването е да

  1. Променете името на полето от „full_names“ на „fullname“
  2. Променете го на типа данни char с ширина 250
  3. Добавете ограничение NOT NULL

И трите редакции се извършват с една единствена команда CHANGE.

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

Изпълнението му спрямо myflixdb и последващото изпълнение на скрипта SHOW COLUMNS дава следния резултат.

Област Тип Null ключ По подразбиране екстра - Extra
членски_номер int (11) НЕ PRI NULL автоматично_увеличение
пълно име символ (250) НЕ NULL
пол varchar (6) ДА NULL
дата_на_раждане дата ДА NULL
физически_адрес varchar (255) ДА NULL
пощенски_адрес varchar (255) ДА NULL
номер_на_контакт varchar (75) ДА NULL
електронна поща varchar (255) ДА NULL

Колоната вече се нарича fullname, съдържа char(250) и отхвърля NULL стойности.

ПРОМЕНИ ключова дума

Ключовата дума MODIFY ви позволява да

  1. Промяна на типа данни на колоната
  2. Променете ограниченията на колоните

В примера CHANGE по-горе, името на полето трябваше да бъде предоставено два пъти, въпреки че преименуването беше само част от целта. Пропускането на името на полето от оператор CHANGE генерира грешка. Когато само типът данни и ограниченията се нуждаят от корекция и името трябва да остане такова, каквото е, MODIFY върши работата с едно споменаване на колоната.

Скриптът по-долу променя ширината на полето „пълно име“ от 250 на 50.

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

Изпълнението му спрямо myflixdb и последващото изпълнение на скрипта SHOW COLUMNS дава резултата, показан по-долу.

Област Тип Null ключ По подразбиране екстра - Extra
членски_номер int (11) НЕ PRI NULL автоматично_увеличение
пълно име символ (50) НЕ NULL
пол varchar (6) ДА NULL
дата_на_раждане дата ДА NULL
физически_адрес varchar (255) ДА NULL
пощенски_адрес varchar (255) ДА NULL
номер_на_контакт varchar (75) ДА NULL
електронна поща varchar (255) ДА NULL

⚠️ Предупреждение: Стесняването на колона отрязва данните, които вече не се побират. Всяко име, по-дълго от 50 знака, се съкращава от този оператор, така че проверете най-дългата съществуваща стойност с МАРКИРАЙ заявка преди свиване на поле.

ПРОМЯНА срещу ПРОМЯНА срещу ПРЕИМЕНУВАНЕ НА КОЛОНА

Трите ключови думи се припокриват и изборът на грешна е най-честият източник на грешки в тази област. Таблицата по-долу ги поставя една до друга.

Ключова дума Преименува колоната Променя типа и ограниченията Необходимо е старо име Типична употреба
ПРОМЯНА Да Да Да, плюс новото име Преименуване и предефиниране с едно изречение
МОДИФИЦИРАЙТЕ Не Да Име, дадено веднъж Разширяване, стесняване или пренаписване на колона
ПРЕИМЕНУВАНЕ НА КОЛОНА Да Не Да, плюс новото име Само преименуване, от MySQL 8.0 нататък

MySQL Версия 8.0 добави четвърта опция за най-простия случай - преименуване без никакво предефиниране.

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

Типът и името са уточнени. Оставащият въпрос е къде се поставя нова колона в таблицата, което се контролира от ключовата дума AFTER.

СЛЕД ключова дума

По подразбиране колона, добавена с ALTER TABLE, се поставя в края на таблицата. За да се постави на определена позиция, командата ALTER се комбинира с ключовата дума AFTER.

Скриптът по-долу добавя „date_of_registration“ директно след date_of_birth в таблицата с членове.

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

Изпълнението му спрямо myflixdb и последващото изпълнение на скрипта SHOW COLUMNS дава резултата, показан по-долу.

Област Тип Null ключ По подразбиране екстра - Extra
членски_номер int (11) НЕ PRI NULL автоматично_увеличение
пълно име символ (50) НЕ NULL
пол varchar (6) ДА NULL
дата_на_раждане дата ДА NULL
дата_на_регистрация дата ДА NULL
физически_адрес varchar (255) ДА NULL
пощенски_адрес varchar (255) ДА NULL
номер_на_контакт varchar (75) ДА NULL
електронна поща varchar (255) ДА NULL

Маркираният ред е колоната, добавена след date_of_birth. Ключовата дума FIRST работи по същия начин и премества новата колона в самото начало на таблицата.

Въпроси и Отговори

Не. DDL оператори като ALTER, DROP и RENAME се извършват имплицитно в MySQL, така че отворена транзакция не може да ги отмени. Възстановяването от резервно копие е единственият път обратно.

Зависи от промяната. Много промени в InnoDB се изпълняват онлайн и позволяват едновременно четене и запис, докато други копират цялата таблица и блокират записите. Добавете клаузи ALGORITHM и LOCK, за да посочите какво ще приемете.

DROP премахва самия обект. TRUNCATE изпразва таблица, но запазва структурата ѝ. ИЗТРИЙ премахва избраните редове и може да се филтрира с клауза WHERE.

Обикновено, да. Асистенти с изкуствен интелект, вградени в клиенти, като например MySQL Workbench Превърнете заявка като „добавяне на колона с дата, която може да се нулира, след date_of_birth“ във валиден синтаксис. RevПрегледайте генерирания оператор спрямо активната схема, преди да го изпълните.

Само частично. Инструментите за преглед с изкуствен интелект сигнализират за очевидни рискове, като например пропусната колона, все още посочена в заявка, или стеснен тип, който отрязва данните. Те не могат да видят всеки извикващ, така че остава необходимо предварително изпълнение.

Обобщете тази публикация с: