Что такое DEFAULT-ограничение в SQL?sql-89

DEFAULT-ограничение — это механизм в SQL Server, который определяет значение по умолчанию для столбца, автоматически используемое при вставке новой строки, если для этого столбца явно не указано значение. Это важный инструмент для обеспечения целостности данных и упрощения операций вставки.

Основные характеристики DEFAULT-ограничений

  1. Автоматическое применение:

    • Активируется при INSERT, если значение для столбца не указано
    • Не влияет на явное указание NULL
  2. Гибкость значений:

    • Может быть константой (число, строка)
    • Может быть системной функцией (GETDATE(), NEWID())
    • Может быть NULL (если столбец допускает NULL)

Синтаксис создания

При создании таблицы:

CREATE TABLE Orders (
    OrderID INT PRIMARY KEY,
    OrderDate DATETIME DEFAULT GETDATE(),
    Status VARCHAR(20) DEFAULT 'Pending',
    TotalAmount DECIMAL(10,2) DEFAULT 0
)

Для существующей таблицы:

ALTER TABLE Employees
ADD CONSTRAINT DF_HireDate
DEFAULT GETDATE() FOR HireDate

Практические примеры

  1. Текущая дата/время:

    CREATE TABLE LogEntries (
        LogID INT IDENTITY,
        EntryDate DATETIME DEFAULT CURRENT_TIMESTAMP,
        Message TEXT
    )
    
  2. Уникальный идентификатор:

    CREATE TABLE Documents (
        DocID UNIQUEIDENTIFIER DEFAULT NEWID(),
        DocName VARCHAR(100)
    )
    
  3. Сложные выражения:

    CREATE TABLE Products (
        ProductID INT,
        LastUpdated DATETIME DEFAULT (DATEADD(DAY, 30, GETDATE()))
    )
    

Особенности работы

  1. Применение только при INSERT:

    • Не влияет на UPDATE операции
    • Можно явно указать DEFAULT в INSERT:
      INSERT INTO Orders (OrderID, Status)
      VALUES (1, DEFAULT)
      
  2. Взаимодействие с NULL:

    • Если столбец допускает NULL и значение не указано - будет NULL
    • DEFAULT применяется только если столбец NOT NULL или NULL указан явно
  3. Ограничения:

    • Не может ссылаться на другие столбцы
    • Не может содержать подзапросы
    • Должно быть совместимо с типом данных столбца

Управление DEFAULT-ограничениями

  1. Просмотр существующих:

    SELECT name, definition
    FROM sys.default_constraints
    WHERE parent_object_id = OBJECT_ID('TableName')
    
  2. Удаление:

    ALTER TABLE TableName
    DROP CONSTRAINT DF_ConstraintName
    

Преимущества DEFAULT-ограничений

  • Сокращение кода: Уменьшает объем ручного ввода
  • Согласованность данных: Гарантирует начальные значения
  • Бизнес-логика: Реализует правила уровня данных
  • Производительность: Эффективнее триггеров для простых сценариев

Резюмируем

DEFAULT-ограничения — это эффективный способ управления значениями по умолчанию в SQL Server, который помогает поддерживать целостность данных и упрощает операции вставки. Они особенно полезны для столбцов с предсказуемыми начальными значениями, таких как даты создания, статусы или системные идентификаторы. Правильное использование DEFAULT-ограничений делает схему базы данных более выразительной и самодокументируемой.