Что такое SQL-ограничения (constraints) и какие основные типы существуют?

Ответ

SQL-ограничения (constraints) — это правила, применяемые к столбцам или таблицам для обеспечения целостности и точности данных. Они предотвращают вставку некорректных данных на уровне базы данных.

Основные типы ограничений:

  1. NOT NULL — запрещает столбцу содержать значения NULL.

    CREATE TABLE users (
        id INT NOT NULL,
        username VARCHAR(50) NOT NULL
    );
  2. UNIQUE — гарантирует, что все значения в столбце (или комбинации столбцов) различны.

    CREATE TABLE users (
        email VARCHAR(100) UNIQUE
    );
    -- Или для нескольких столбцов:
    ALTER TABLE users ADD CONSTRAINT uc_name UNIQUE (first_name, last_name);
  3. PRIMARY KEY — комбинация NOT NULL и UNIQUE. Однозначно идентифицирует каждую строку в таблице.

    CREATE TABLE orders (
        order_id INT PRIMARY KEY
    );
  4. FOREIGN KEY — обеспечивает ссылочную целостность. Связывает столбец с PRIMARY KEY другой таблицы.

    CREATE TABLE orders (
        user_id INT,
        FOREIGN KEY (user_id) REFERENCES users(id)
    );
  5. CHECK — проверяет, что значения в столбце удовлетворяют заданному условию.

    CREATE TABLE products (
        price DECIMAL(10,2) CHECK (price > 0),
        quantity INT CHECK (quantity >= 0)
    );
  6. DEFAULT — задает значение по умолчанию для столбца при вставке новой строки, если значение не указано.

    CREATE TABLE logs (
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        status VARCHAR(20) DEFAULT 'PENDING'
    );

Практическое применение: Ограничения можно задавать при создании таблицы (CREATE TABLE) или добавить/изменить позже с помощью ALTER TABLE. Их использование критически важно для предотвращения "мусорных" данных, но может незначительно влиять на производительность операций INSERT/UPDATE из-за дополнительных проверок.

Ответ 18+ 🔞

А, SQL-ограничения, блядь! Это ж как строгий охранник на входе в клуб, который не пускает всяких распиздяев с фальшивыми данными. Слушай, если ты не поставишь эти правила, твоя база превратится в помойку, внатуре.

Вот смотри, основные типы этих заслонов, которые не дают всякой хуйне просочиться.

  1. NOT NULL — это как сказать столбцу: «Мужик, ты обязан быть, нихуя пустым не останешься!». Нельзя воткнуть NULL, и всё тут.

    CREATE TABLE users (
        id INT NOT NULL,
        username VARCHAR(50) NOT NULL
    );
  2. UNIQUE — гарантирует, что все значения в столбце — уникальные пидоры. Два одинаковых — уже пиздец, ошибка.

    CREATE TABLE users (
        email VARCHAR(100) UNIQUE
    );
    -- А если на пару столбцов — то это уже групповуха уникальности, блядь:
    ALTER TABLE users ADD CONSTRAINT uc_name UNIQUE (first_name, last_name);
  3. PRIMARY KEY — это, ёпта, главный пахан таблицы. Комбо из NOT NULL и UNIQUE. Каждая строка им клеймится, как зек.

    CREATE TABLE orders (
        order_id INT PRIMARY KEY
    );
  4. FOREIGN KEY — а это уже связи налаживает, семейные узы, блядь. Столбец тычет пальцем в PRIMARY KEY другой таблицы и говорит: «Я от этого пацана, пустите».

    CREATE TABLE orders (
        user_id INT,
        FOREIGN KEY (user_id) REFERENCES users(id)
    );
  5. CHECK — самый дотошный, ёбаный проверяльщик. Стоит с условием и не пускает, если что не так. «Цена больше нуля? Не-а, иди нахуй».

    CREATE TABLE products (
        price DECIMAL(10,2) CHECK (price > 0),
        quantity INT CHECK (quantity >= 0)
    );
  6. DEFAULT — ленивый, но добрый. Если ты забыл указать значение, он подсовывает своё, заранее заготовленное. «Не пались, братан, я тебя прикрою».

    CREATE TABLE logs (
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        status VARCHAR(20) DEFAULT 'PENDING'
    );

Как этим пользоваться на практике: Можно всё это впилить сразу при рождении таблицы (CREATE TABLE), а можно и потом прикрутить, через ALTER TABLE. Без них — анархия и бардак, но знай, чувак: каждая дополнительная проверка — это микро-тормоз при вставке или обновлении. За порядок, блядь, всегда надо платить.