← Назад к вопросам

Как изменить таблицу в SQL

2.2 Middle🔥 121 комментариев
#Основы Java

Комментарии (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. Выбирай нужную операцию в зависимости от поставленной задачи!

Как изменить таблицу в SQL | PrepBro