Ответ
Автоинкрементное (AUTO_INCREMENT, SERIAL, IDENTITY) поле — это столбец таблицы, значение которого автоматически увеличивается при каждой вставке новой записи. Оно обычно используется для первичных ключей, гарантируя их уникальность и избавляя разработчика от ручного управления этими значениями.
Основные цели:
- Упрощение вставки: Не нужно вычислять или передавать следующий ID.
- Гарантия уникальности: СУБД сама обеспечивает уникальность значений.
- Производительность: Оптимизированные внутренние механизмы СУБД для генерации последовательных чисел.
Пример создания таблицы (MySQL):
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY, -- Значение генерируется автоматически
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE
);
Как получить сгенерированный ID в Java (JDBC):
String sql = "INSERT INTO users (username, email) VALUES (?, ?)";
// Указываем флаг RETURN_GENERATED_KEYS
PreparedStatement pstmt = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
pstmt.setString(1, "john_doe");
pstmt.setString(2, "john@example.com");
int affectedRows = pstmt.executeUpdate();
if (affectedRows > 0) {
ResultSet generatedKeys = pstmt.getGeneratedKeys();
if (generatedKeys.next()) {
long newUserId = generatedKeys.getLong(1); // Получаем сгенерированный id
System.out.println("New user ID: " + newUserId);
}
}
Примечание: Название и реализация различаются в СУБД: AUTO_INCREMENT (MySQL), SERIAL (PostgreSQL), IDENTITY (SQL Server), SEQUENCE (Oracle).