6.1 Изменение структуры базы данных
И наконец самая вкусная часть работы с базами — изменение базы данных. Если ты думаешь, что это что-то очень простое, то вот тебе анекдот в тему:
Мастер СТО, вытирая руки, сдает клиенту машину и попутно болтает:
- А вот вы кем работаете?
- Кардиохирургом, операции на сердце провожу.
- И много платят?
- 20,000$ за операцию.
- Нифига себе... А ведь мы, по сути, одним и тем же занимаемся, движки перебираем, а мне всего 300$ платят...
- Хочешь так же, как я, заработать?
- Хочу...
Хирург заводит движок в машине и обращается к мастеру:
- Перебирай!
С базами данных прямо такая же ситуация. Ты хочешь вынести часть данных в отдельную таблицу? Хорошо, тебе нужно:
- создать новую таблицу
- скопировать данные в эту новую таблицу
- удалить колонки из старой таблицы
- поменять все SQL-запросы, которые ссылались на старую таблица
- добавить SQL-запросы, которые будут обращаться к новой таблице
- поменять Java-код, которые работал с таблицами по-старому
- поменять сценарии бэкапа и восстановления данных, так как теперь структуры таблиц не совпадают
- если у тебя есть тестовые данные для разработчиков, нужно поменять и их
Хотя в реальности бывает еще хуже:
Новая структура БД:
- сначала меняешь структуру таблиц на машине разработчика
- потом убеждаешься, что такая структура действительно лучше
- утверждаешь новую структуру БД
Скрипты миграции:
- пишешь скрипты, которые будут менять таблицые данный и т. д. на реальной базе данных
- запускаешь эти скрипты на машине со старой структурой базы и смотришь, как она меняется
- верифицируйшь все критические места новой базы
Апдейт на проде
- останавливаешь production-базу
- делаешь полный бэкап
- выполняешь скрипты
- так как на проде обычно куча, данных скрипты могут работать часами
Запускаешь прод и надеешься, что тебе не придется все откатывать назад.
6.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
6.3 Добавление и удаление первичного ключа
И еще несколько полезных примеров.
Допустим, мы забыли объявить колонку id первичным ключом. Всегда можно сделать это отдельно через ALTER TABLE
:
ALTER TABLE employee
ADD PRIMARY KEY (email);
Удалить его еще проще:
ALTER TABLE employee
DELETE PRIMARY KEY;
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ