ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Выбор между DROP...CREATE и ALTER: что лучше в SQL?

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

При замене объекта SQL рекомендуется использовать ALTER. Это позволяет вносить изменения, сохраняя данные и связи, как при ремонте помещения. Если же требуется полное обновление объекта, используйте DROP...CREATE. Однако имейте в виду риск потери данных и возможные сложности с зависимостями.

Пример изменения столбца в таблице:

SQL
Скопировать код
ALTER TABLE MyTable ALTER COLUMN MyColumn NewDataType;

ALTER хорош тем, что позволяет точечно изменять объекты, сохраняя данные. DROP...CREATE подразумевает полное обновление и может нарушить установленные связи.

[AsideBanner]

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Проверка на существование объекта

Перед тем, как модифицировать объекты, стоит проверить их наличие. Пример шаблона для такой проверки:

SQL
Скопировать код
IF OBJECT_ID('MyObject', 'P') IS NOT NULL
  ALTER OBJECT...
ELSE
  CREATE OBJECT...

Начиная с версии SQL Server 2016 SP1, доступна команда CREATE OR ALTER, что упрощает написание скриптов благодаря автоматической проверке существования объекта.

Безопасность прежде всего: сохранение разрешений

При использовании DROP...CREATE не стоит забывать о сохранении разрешений на объект и их восстановлении после пересоздания.

Поддержание метаданных

ALTER предпочтителен при сохранении расширенных свойств и зависимостей объекта, особенно в сложных системах с множеством взаимосвязей.

Вопрос производительности

DROP...CREATE требует больше ресурсов по сравнению с ALTER, который влияет на систему минимально, так как затрагивает только необходимые части.

Удобство использования CREATE OR ALTER

С введением SQL Server 2016 SP1 появилась возможность использовать CREATE OR ALTER, что облегчает процесс управления кодом, позволяя изменять или создавать объекты без лишних усилий.

Визуализация

Представьте городской пейзаж, где каждое здание — это таблица в базе данных:

Город до: 🏢🏬🏦🏣

  • DROP...CREATE:
    • Шаг 1: 🏢 демонтируется 🚧➡️🕳️ (удаление таблицы)
    • Шаг 2: Строится новое здание 🏢 🏗️➡️🆕 (создание таблицы)
    • Результат: город изменился 🏬🏦🏣🆕
  • ALTER:
    • Шаг 1: 🏢 реконструируется 🛠️ (изменение таблицы)
    • Результат: город остался без изменений 🏬🏦🏣🏢🆒

Эта аналогия иллюстрирует, что DROP...CREATE создает объект с нуля, а ALTER дополняет и настраивает уже существующий.

Продвинутые случаи использования: Джунгли ALTER

В сложных ситуациях, требующих масштабного рефакторинга, важно осуществлять изменения с помощью ALTER в рамках одной транзакции для обеспечения атомарности обновлений.

Вечные споры: DROP...CREATE или ALTER

Нет универсального решения в выборе между DROP...CREATE и ALTER. Каждый подход имеет свои преимущества и недостатки, что вызывает обсуждения в профессиональном сообществе.

Применение CREATE OR ALTER в реальной жизни

CREATE OR ALTER упрощает поддержку кода и может значительно облегчить выполнение ваших задач в SQL. Пример использования:

SQL
Скопировать код
CREATE OR ALTER PROCEDURE MyProcedure AS
BEGIN
  -- Здесь ваш SQL-код
END

Полезные материалы

  1. SQL ALTER TABLE Statement – W3Schools Reference — Доступное руководство по использованию SQL ALTER.
  2. ALTER TABLE (Transact-SQL) – SQL Server | Microsoft Learn — Официальная документация Microsoft по команде ALTER TABLE.
  3. Cast to date is sargable but is it a good idea? – Database Administrators Stack Exchange — Дискуссия о производительности использования ALTER TABLE.
  4. What is the most recommended way to store time in PostgreSQL using Java? – Stack Overflow — Обсуждение лучших практик хранения времени в SQL.
  5. The cost of recreating a table – SQL Performance — Анализ затрат на пересоздание таблицы в сравнении с ее модификацией через ALTER.