JavaRush/Курсы/Модуль 4. Работа с БД/Изменение структуры таблицы

Изменение структуры таблицы

Открыта

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 (id);

Удалить его еще проще:

ALTER TABLE employee
	DELETE PRIMARY KEY;
1
Задача
Модуль 4. Работа с БД,  6 уровень5 лекция
Недоступна
task0620
Напиши запрос, который добавит в таблицу employee колонку с зарплатой salary с типом INT.
1
Задача
Модуль 4. Работа с БД,  6 уровень5 лекция
Недоступна
task0621
Напиши запрос, который добавит в таблицу employee колонку с зарплатой salary с типом INT и департаментом department с типом VARCHAR(20).
1
Задача
Модуль 4. Работа с БД,  6 уровень5 лекция
Недоступна
task0622
Напиши запрос, который изменит в таблице employee тип колонки с зарплатой (salary) на FLOAT.
1
Задача
Модуль 4. Работа с БД,  6 уровень5 лекция
Недоступна
Удаляем позицию
Напиши запрос, который удалит в таблице employee колонку с позицией (position).
1
Задача
Модуль 4. Работа с БД,  6 уровень5 лекция
Недоступна
task0624
Напиши запрос, который удалит в таблице cities колонку с населением (population).
Комментарии (12)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Олег
Уровень 106
Expert
24 сентября 2024, 21:22
Всё супер, понятно
Александр
Уровень 109
Expert
26 апреля 2024, 12:47
Мне кажется эта лекция достойна топа, в списке лекций с количеством опечаток))
AlekseiSieger
Уровень 29
27 июня 2023, 13:16
пишешь скрипты, которые будут менять таблицые данный и т. д. на реальной базе данных Что за "таблицые данный"? Опять опечатка?
Евгений
Уровень 38
16 июня 2023, 12:02
ALTER TABLE employee
	ADD PRIMARY KEY (email);
Как этот запрос говорит, что колонка id – это первичный ключ?
Dima Makarov
Уровень 42
17 июля 2023, 06:18
Вот тоже уже минут десять перечитываю этот кусок и не понимаю, то ли лыжи не едут, то ли я 🤪
А зачем тут упоминать MODIFY если используем ALTER, это одно и тоже?
рост
Уровень 32
23 февраля 2023, 13:34
это конечно не в тему. но объясните анектод плиз
рост
Уровень 32
23 февраля 2023, 13:36
а понял, типа хирург работает с работающим движком а не как СТОшник, смешно)
Артемий
Уровень 82
Expert
28 февраля 2023, 17:21
Не смешно было, блин.
Павел
Уровень 19
Expert
5 марта 2024, 08:50
Мне тоже было не смешно потому, что непонятно почему не включили в анекдот IT специалиста, который базу переносил. Хотелось бы иметь представление сколько платят за перенос БД.
Дмитро Гашук
Уровень 27
Expert
26 декабря 2022, 09:18
В задаче 0602 проходит решение
ALTER TABLE employee
ALTER COLUMN salary FLOAT;
Хотя мы изменяем тип колонки и согласно лекции нужно использовать MODIFY COLUMN
Рустам
Уровень 108
20 апреля 2023, 10:52
У меня прошло: ALTER TABLE employee MODIFY salary FLOAT;