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

К чему применяется ограничение unique

1.2 Junior🔥 111 комментариев
#Базы данных и SQL

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Ограничение UNIQUE в базах данных

Ограничение UNIQUE — это правило целостности данных, которое гарантирует, что все значения в указанном столбце (или группе столбцов) уникальны. Иными словами, в этом столбце не может быть двух одинаковых значений.

Основное применение

Ограничение UNIQUE применяется для обеспечения уникальности данных в полях, которые не являются первичным ключом, но должны содержать только уникальные значения:

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    email VARCHAR(255) UNIQUE NOT NULL,
    username VARCHAR(100) UNIQUE,
    password VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

В этом примере каждый пользователь должен иметь уникальный email и username.

Различие между PRIMARY KEY и UNIQUE

PRIMARY KEY:

  • Однозначно идентифицирует строку
  • Не может быть NULL
  • Может быть только один на таблицу
  • Автоматически индексируется

UNIQUE:

  • Гарантирует уникальность значений
  • Может содержать NULL (и обычно может быть несколько NULL значений)
  • Может быть несколько ограничений на таблицу
  • Также автоматически индексируется для оптимизации поиска

Примеры применения

1. Email как уникальное поле

CREATE TABLE accounts (
    id INT PRIMARY KEY,
    email VARCHAR(255) UNIQUE NOT NULL,
    name VARCHAR(100)
);

-- Эта операция вызовет ошибку (дублирование email)
INSERT INTO accounts VALUES (1, "user@example.com", "John");
INSERT INTO accounts VALUES (2, "user@example.com", "Jane"); -- Ошибка!

2. Составной UNIQUE ключ (несколько столбцов)

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    product_id INT,
    order_date DATE,
    UNIQUE(customer_id, product_id) -- Один покупатель не может заказать один товар дважды
);

3. Альтернативный ключ (Alternative Key)

CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    passport_number VARCHAR(20) UNIQUE NOT NULL,
    email VARCHAR(255) UNIQUE,
    name VARCHAR(100)
);

-- employee_id - первичный ключ
-- passport_number и email - альтернативные ключи

Применение в Java с JPA/Hibernate

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @Column(unique = true, nullable = false)
    private String email;
    
    @Column(unique = true)
    private String username;
    
    private String password;
}

Практическое применение

  1. Email адреса — в системах регистрации
  2. Имена пользователей — username, nickname
  3. Номера телефонов — уникальные контактные данные
  4. Номера паспортов — государственные идентификаторы
  5. SKU товаров — уникальные коды в каталоге
  6. UUID — уникальные идентификаторы в распределённых системах
  7. Серийные номера — для оборудования, продуктов

Обработка нарушений ограничения

try {
    User user = new User();
    user.setEmail("duplicate@example.com");
    userRepository.save(user); // Может выбросить DataIntegrityViolationException
} catch (DataIntegrityViolationException e) {
    System.out.println("Email уже зарегистрирован");
}

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

К чему применяется ограничение unique | PrepBro