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

Назови ограничение помимо PRIMARY KEY, UNIQUE, NOT NULL и CHECK

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

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

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

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

Назови ограничение помимо PRIMARY KEY, UNIQUE, NOT NULL и CHECK

Помимо перечисленных ограничений, одним из основных ограничений в SQL является FOREIGN KEY (внешний ключ). Это ограничение обеспечивает целостность данных и поддерживает связи между таблицами в реляционной базе данных.

FOREIGN KEY — что это?

FOREIGN KEY — это ограничение, которое:

  • Устанавливает связь между таблицами
  • Гарантирует, что значение в одной таблице соответствует значению в другой таблице
  • Предотвращает удаление или обновление значений, на которые ссылаются другие записи
  • Обеспечивает ссылочную целостность данных

Синтаксис FOREIGN KEY:

CREATE TABLE Orders (
    order_id INT PRIMARY KEY,
    customer_id INT NOT NULL,
    order_date DATE,
    FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
);

Пример с каскадными операциями:

CREATE TABLE Orders (
    order_id INT PRIMARY KEY AUTO_INCREMENT,
    customer_id INT NOT NULL,
    order_date DATE,
    FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
        ON DELETE CASCADE
        ON UPDATE CASCADE
);

Варианты каскадных операций:

  • ON DELETE CASCADE — удалить все заказы при удалении клиента
  • ON DELETE SET NULL — установить NULL при удалении клиента (если столбец допускает NULL)
  • ON DELETE RESTRICT — запретить удаление, если есть ссылающиеся записи
  • ON UPDATE CASCADE — обновить customer_id во всех заказах при обновлении в Customers

Использование FOREIGN KEY в Hibernate/JPA:

@Entity
@Table(name = "orders")
public class Order {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long orderId;
    
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "customer_id", nullable = false)
    private Customer customer;
    
    private LocalDate orderDate;
}

@Entity
@Table(name = "customers")
public class Customer {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long customerId;
    
    private String name;
    
    @OneToMany(mappedBy = "customer", cascade = CascadeType.REMOVE)
    private List<Order> orders = new ArrayList<>();
}

FOREIGN KEY критически важно для поддержания консистентности данных в базе данных и предотвращения потери целостности при сложных операциях удаления и обновления.

Назови ограничение помимо PRIMARY KEY, UNIQUE, NOT NULL и CHECK | PrepBro