Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
# Как изменить таблицу в SQL
Основная команда ALTER TABLE
Основной синтаксис для изменения структуры таблицы:
ALTER TABLE название_таблицы
ACTION параметры;
Основные операции
1. Добавление столбца (ADD COLUMN)
ALTER TABLE users
ADD COLUMN phone_number VARCHAR(20);
-- С ограничениями
ALTER TABLE users
ADD COLUMN created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL;
-- Несколько столбцов
ALTER TABLE users
ADD COLUMN email VARCHAR(255) NOT NULL,
ADD COLUMN age INT CHECK (age >= 18);
2. Удаление столбца (DROP COLUMN)
ALTER TABLE users
DROP COLUMN phone_number;
-- С проверкой зависимостей (PostgreSQL)
ALTER TABLE users
DROP COLUMN email CASCADE;
3. Переименование столбца (RENAME COLUMN)
-- PostgreSQL
ALTER TABLE users
RENAME COLUMN user_name TO username;
-- MySQL
ALTER TABLE users
CHANGE COLUMN user_name username VARCHAR(100);
-- SQL Server
EXEC sp_rename users.user_name, username;
4. Изменение типа данных (MODIFY)
-- PostgreSQL
ALTER TABLE users
ALTER COLUMN age TYPE BIGINT;
-- MySQL
ALTER TABLE users
MODIFY COLUMN age BIGINT;
-- SQL Server
ALTER TABLE users
ALTER COLUMN age BIGINT;
5. Добавление/удаление ограничений (CONSTRAINTS)
-- Добавление PRIMARY KEY
ALTER TABLE users
ADD PRIMARY KEY (id);
-- Добавление FOREIGN KEY
ALTER TABLE orders
ADD CONSTRAINT fk_user_id
FOREIGN KEY (user_id) REFERENCES users(id);
-- Добавление UNIQUE
ALTER TABLE users
ADD CONSTRAINT unique_email UNIQUE (email);
-- Добавление CHECK
ALTER TABLE users
ADD CHECK (age >= 0 AND age <= 150);
-- Удаление ограничения
ALTER TABLE users
DROP CONSTRAINT unique_email;
6. Изменение значения по умолчанию (DEFAULT)
-- Добавить значение по умолчанию
ALTER TABLE users
ALTER COLUMN is_active SET DEFAULT true;
-- Удалить значение по умолчанию
ALTER TABLE users
ALTER COLUMN is_active DROP DEFAULT;
7. Переименование таблицы
-- PostgreSQL
ALTER TABLE users
RENAME TO customers;
-- MySQL
RENAME TABLE users TO customers;
-- SQL Server
EXEC sp_rename users, customers;
Практические примеры
Расширение кодового имущества
-- Было
CREATE TABLE products (
id INT PRIMARY KEY,
name VARCHAR(100),
price DECIMAL(10,2)
);
-- Добавляем функционал
ALTER TABLE products
ADD COLUMN description TEXT,
ADD COLUMN category VARCHAR(50) NOT NULL DEFAULT General,
ADD COLUMN in_stock BOOLEAN DEFAULT true,
ADD COLUMN created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
Добавление связей между таблицами
-- Изначально users и orders независимы
ALTER TABLE orders
ADD COLUMN user_id INT,
ADD CONSTRAINT fk_orders_users
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;
Подготовка к миграции данных
-- Добавляем новый столбец с временным хранилищем
ALTER TABLE users
ADD COLUMN new_email VARCHAR(255);
-- Заполняем данные
UPDATE users SET new_email = LOWER(email);
-- Удаляем старый столбец
ALTER TABLE users
DROP COLUMN email;
-- Переименовываем новый
ALTER TABLE users
RENAME COLUMN new_email TO email;
Важные моменты
Производительность:
- ALTER TABLE может заблокировать таблицу на время выполнения
- На больших таблицах операции могут быть долгими
- Некоторые БД поддерживают ONLINE ALTER для минимизации блокировок
Безопасность:
- Всегда делай бэкап перед ALTER TABLE
- Тестируй изменения на staging
- Используй транзакции (где возможно)
Совместимость:
- Синтаксис отличается между PostgreSQL, MySQL и SQL Server
- Проверяй документацию для конкретной БД
Откат изменений:
-- Откат в PostgreSQL (в транзакции)
BEGIN;
ALTER TABLE users ADD COLUMN test INT;
-- Если ошибка:
ROLLBACK;
Примеры выше охватывают основные сценарии работы с ALTER TABLE в SQL. Выбирай нужную операцию в зависимости от поставленной задачи!