Выбор между DROP...CREATE и ALTER: что лучше в SQL?
Быстрый ответ
При замене объекта SQL рекомендуется использовать ALTER
. Это позволяет вносить изменения, сохраняя данные и связи, как при ремонте помещения. Если же требуется полное обновление объекта, используйте DROP...CREATE
. Однако имейте в виду риск потери данных и возможные сложности с зависимостями.
Пример изменения столбца в таблице:
ALTER TABLE MyTable ALTER COLUMN MyColumn NewDataType;
ALTER
хорош тем, что позволяет точечно изменять объекты, сохраняя данные. DROP...CREATE
подразумевает полное обновление и может нарушить установленные связи.
Проверка на существование объекта
Перед тем, как модифицировать объекты, стоит проверить их наличие. Пример шаблона для такой проверки:
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. Пример использования:
CREATE OR ALTER PROCEDURE MyProcedure AS
BEGIN
-- Здесь ваш SQL-код
END
Полезные материалы
- SQL ALTER TABLE Statement – W3Schools Reference — Доступное руководство по использованию SQL ALTER.
- ALTER TABLE (Transact-SQL) – SQL Server | Microsoft Learn — Официальная документация Microsoft по команде ALTER TABLE.
- Cast to date is sargable but is it a good idea? – Database Administrators Stack Exchange — Дискуссия о производительности использования ALTER TABLE.
- What is the most recommended way to store time in PostgreSQL using Java? – Stack Overflow — Обсуждение лучших практик хранения времени в SQL.
- The cost of recreating a table – SQL Performance — Анализ затрат на пересоздание таблицы в сравнении с ее модификацией через ALTER.