Изменение структуры таблиц: 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 — нет.
Реальные кейсы из практики 🏗️
- Миграция данных: добавьте новую колонку, заполните её на основе старых данных, затем удалите старую
- Оптимизация: удалите неиспользуемые колонки для увеличения производительности
- Рефакторинг: приведите названия к единому стандарту во всей БД
Осторожно: подводные камни! 🚨
- Блокировки: ALTER TABLE может блокировать таблицу на время выполнения
- Производительность: на больших таблицах операции могут выполняться долго
- Зависимости: триггеры, представления и хранимые процедуры могут сломаться
Проверь себя: мини-задание 🔍
- В таблице
employeesзамените колонкуemp_idнаemployee_id - Добавьте колонку
departmentпослеposition - Удалите устаревшую колонку
temp_password
Ответ:
ALTER TABLE employees
RENAME COLUMN emp_id TO employee_id,
ADD COLUMN department VARCHAR(50) AFTER position,
DROP COLUMN temp_password;