1. Зміна структури бази даних
І нарешті, найсмачніша частина роботи з базами — зміна бази даних. Якщо ти думаєш, що це щось дуже просте, то ось тобі анекдот на цю тему:
Майстер СТО, витираючи руки, здає клієнту машину і принагідно базікає:
- А ось ви ким працюєте?
- Кардіохірургом, операції на серці проводжу.
– І багато платять?
- 20,000 $ за операцію.
- Ніфіга собі ... Адже ми, по суті, одним і тим самим займаємося, двигуни перебираємо, а мені лише 300 $ платять ...
- Хочеш так само, як я, заробити?
- Хочу...
Хірург заводить двигун у машині і звертається до майстра:
– Перебирай!
З базами даних така ж сама ситуація. Ти хочеш винести частину даних окрему таблицю? Добре, тобі потрібно:
- створити нову таблицю
- скопіювати дані до цієї нової таблиці
- видалити колонки зі старої таблиці
- змінити всі SQL-запити, які посилалися на стару таблицю
- додати SQL-запити, які будуть звертатися до нової таблиці
- змінити Java-код, який працював з таблицями по-старому
- змінити сценарії бекапу та відновлення даних, тому що тепер структури таблиць не збігаються
- якщо в тебе є тестові дані для розробників, потрібно змінити їх
Хоча насправді буває ще гірше:
Нова структура БД:
- спочатку змінюєш структуру таблиць на машині розробника
- потім переконуєшся, що така структура дійсно краща
- затверджуєш нову структуру БД
Скрипти міграції:
- пишеш скрипти, які змінюватимуть таблиці даних тощо на реальній базі даних
- запускаєш ці скрипти на машині зі старою структурою бази та дивишся, як вона змінюється
- верифікуєш усі критичні місця нової бази
Апдейт на продажі
- зупиняєш production-базу
- робиш повний бекап
- виконуєш скрипти
- оскільки на проді зазвичай купа, дані скрипти можуть працювати годинами
Запускаєш прод і сподіваєшся, що тобі не доведеться все відкочувати назад.
2. Оператор ALTER TABLE
З іншого боку, сам скрипт, який змінює структуру таблиць, дуже простий. Чимось він схожий на скрипт створення таблиці. Загальний вигляд запиту зміни таблиці:
ALTER TABLE таблиця
команда 1,
команда 2,
команда N
Команди бувають дуже різними, але можна виділити три основні групи:
ADD
— додає щось до таблиціMODIFY
— змінює щось у таблиціDROP
— видаляє щось у таблиці
І коли я говорю щось, то йдеться не про дані, а про структуру таблиці.
Наприклад, ти вирішуєш додати до таблиці нову колонку. В такому разі потрібно виконати такий запит:
ALTER TABLE таблиця
ADD COLUMN ім'я тип
Давай напишемо запит, який додасть до нашої таблиці employee колонку email:
ALTER TABLE employee
ADD COLUMN email VARCHAR(10)
Тепер поміняємо довжину рядка email з 10 на 100: для цього нам знадобиться новий скрипт:
ALTER TABLE employee
MODIFY COLUMN email VARCHAR(100)
Якщо ти хочеш змінити якісь атрибути колонки, але не її тип, тобі потрібна команда ALTER COLUM
. Давай встановимо значення email за замовчуванням:
ALTER TABLE employee
ALTER COLUMN email VARCHAR(100) DEFAULT 'test@test.com'
І, нарешті, колонку можна видалити, якщо вона тобі не потрібна:
ALTER TABLE employee
DROP COLUMN email
3. Додавання та видалення первинного ключа
І ще кілька корисних прикладів.
Припустимо, ми забули оголосити колонку id первинним ключем. Завжди це можна зробити окремо через ALTER TABLE
:
ALTER TABLE employee
ADD PRIMARY KEY (id);
Видалити його ще простіше:
ALTER TABLE employee
DELETE PRIMARY KEY;
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ