← Назад к вопросам
Назови ограничение помимо 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 критически важно для поддержания консистентности данных в базе данных и предотвращения потери целостности при сложных операциях удаления и обновления.