Ответ
Да, уникальность — это обязательное и фундаментальное свойство первичного ключа (PRIMARY KEY).
Требования к PRIMARY KEY:
- Уникальность: Каждое значение в столбце(ах) ключа должно быть уникальным в рамках таблицы.
- Непустота (NOT NULL): Значение не может быть
NULL. - Один на таблицу: В таблице может быть только один PRIMARY KEY.
Что происходит при нарушении уникальности?
СУБД генерирует ошибку нарушения ограничения уникальности (например, SQLIntegrityConstraintViolationException в JDBC), и операция вставки или обновления откатывается.
Пример на SQL/Java:
CREATE TABLE users (
id INT PRIMARY KEY, -- Этот столбец ДОЛЖЕН быть уникальным и не NULL
name VARCHAR(100)
);
// Попытка вставить дубликат вызовет исключение
String sqlInsert = "INSERT INTO users (id, name) VALUES (?, ?)";
try (PreparedStatement pstmt = connection.prepareStatement(sqlInsert)) {
pstmt.setInt(1, 1);
pstmt.setString(2, "Alice");
pstmt.executeUpdate(); // Успех
pstmt.setInt(1, 1); // Тот же самый ID!
pstmt.setString(2, "Bob");
pstmt.executeUpdate(); // ВЫБРОСИТ SQLIntegrityConstraintViolationException
}
Распространенные стратегии генерации уникальных ключей:
AUTO_INCREMENT(MySQL),SERIAL/IDENTITY(PostgreSQL, SQL Server).- Генерация UUID на стороне приложения.
- Составные ключи из нескольких полей (уникальность обеспечивается комбинацией).