Изменение структуры таблиц: ALTER TABLE, ADD COLUMN, DROP COLUMN, RENAME

Почему ALTER TABLE — ваш главный инструмент для гибкости 🛠️

Базы данных живые — они меняются вместе с бизнесом. Добавляются новые поля, устаревшие данные удаляются, а названия колонок становятся неактуальными. Именно здесь команда ALTER TABLE становится вашей волшебной палочкой!

Пример из жизни: представьте таблицу users с колонкой phone. Но внезапно понадобилось добавить country_code для международных звонков. Вот как это делается:

ALTER TABLE users
ADD COLUMN country_code VARCHAR(5) DEFAULT '+1';

Добавляем новые колонки: ADD COLUMN 📌

Добавление колонки — самая частая операция. Важные нюансы: - Можно указать DEFAULT значение для существующих строк - Позиция колонки (FIRST/AFTER column_name) важна для удобства

-- Добавляем колонку с датой регистрации после email
ALTER TABLE employees
ADD COLUMN registration_date DATE AFTER email;

-- Колонка с дефолтным значением
ALTER TABLE products
ADD COLUMN in_stock BOOLEAN DEFAULT TRUE;

Удаляем лишнее: DROP COLUMN 🗑️

Будьте осторожны! Удаление колонки безвозвратно стирает данные. Лучшие практики: 1. Сделайте бэкап 2. Проверьте, не используется ли колонка в индексах или внешних ключах

-- Простое удаление
ALTER TABLE orders
DROP COLUMN old_payment_method;

-- Удаление с проверкой (если колонка существует)
ALTER TABLE customers
DROP COLUMN IF EXISTS temporary_discount;

Переименование: RENAME COLUMN 🔄

Когда названия устаревают или не соответствуют стандартам:

-- Меняем название колонки
ALTER TABLE vehicles
RENAME COLUMN car_model TO model;

-- Переименование таблицы (бонус!)
ALTER TABLE client_data
RENAME TO customers;

Комбинируем операции ⚡

SQL позволяет выполнять несколько изменений за один запрос:

ALTER TABLE users
ADD COLUMN last_login TIMESTAMP,
DROP COLUMN obsolete_flag,
RENAME COLUMN user_name TO username;

Важно: не все СУБД поддерживают это. PostgreSQL — да, SQLite — нет.


Реальные кейсы из практики 🏗️

  1. Миграция данных: добавьте новую колонку, заполните её на основе старых данных, затем удалите старую
  2. Оптимизация: удалите неиспользуемые колонки для увеличения производительности
  3. Рефакторинг: приведите названия к единому стандарту во всей БД

Осторожно: подводные камни! 🚨

  1. Блокировки: ALTER TABLE может блокировать таблицу на время выполнения
  2. Производительность: на больших таблицах операции могут выполняться долго
  3. Зависимости: триггеры, представления и хранимые процедуры могут сломаться

Проверь себя: мини-задание 🔍

  1. В таблице employees замените колонку emp_id на employee_id
  2. Добавьте колонку department после position
  3. Удалите устаревшую колонку temp_password

Ответ:

ALTER TABLE employees
RENAME COLUMN emp_id TO employee_id,
ADD COLUMN department VARCHAR(50) AFTER position,
DROP COLUMN temp_password;
Скрыть рекламу навсегда

📘 VK Видео — обучение без ограничений

Все уроки доступны без VPN, без блокировок и зависаний.

Можно смотреть с телефона, планшета или компьютера — в любое время.

▶️ Смотреть на VK Видео