Увеличение идентификатора столбца - PullRequest
0 голосов
/ 04 июля 2018

У меня есть два метода: один используется для вставки данных в БД, а другой - для их удаления. Допустим, я добавил 3 строки с id = 1, id = 2, id = 3. Теперь я решил удалить последний и снова вставить 1 строку. так что у меня три строки с идентификаторами 1,2,3. У меня три строки с идентификаторами 1,2,4. Как я могу это исправить?

 private void insert() throws SQLException {

    String query = "INSERT INTO users (username, email, password, user_group_id) VALUES (?, ?, ?, ?);";

 PreparedStatement sql = Boot.getCon().prepareStatement(query, Statement.RETURN_GENERATED_KEYS); 
    sql.setString(1, username);
    sql.setString(2, email);
    sql.setString(3, password);
    sql.setInt(4,user_group_id);
    sql.executeUpdate();

}

public static void delete(int id) throws SQLException {

    String query = "DELETE FROM users where id=?;";
    PreparedStatement statement = Boot.getCon().prepareStatement(query);
    statement.setInt(1,id);
    statement.executeUpdate();
    System.out.println("You have deleted 1 row");
}

Ответы [ 3 ]

0 голосов
/ 04 июля 2018

Это не похоже на проблему, это ожидаемое поведение. Ваш код в порядке.

Я полагаю, что вы используете некоторую последовательность в фоновом режиме для назначения идентификаторов. Каждый раз, когда вы будете вставлять, значение последовательности будет увеличиваться на 1.

Если вы удалите какую-либо строку, этот идентификатор больше не будет использоваться.

0 голосов
/ 04 июля 2018

Когда вы удаляете перманент в базе данных, вы обязательно создадите пробелы в вашем семени идентификации. Часто решения работают с удаленными флагами, 1 = удалено. Если вам не нужно создавать пробелы (из соображений соответствия), рассмотрите возможность обновления удаленного столбца, а не полного удаления.

Изменение начального числа идентификаторов возможно с помощью следующих запросов:

SELECT LAST_INSERT_ID (); SET IDENTITY = 4;

Идентификационное начальное число является инкрементным, установка начального идентификационного значения ниже максимального значения не будет работать.

0 голосов
/ 04 июля 2018

это не проблема, во-первых, так работает AUTO_INCREMENT ... если вы хотите это исправить, то вам нужно сделать еще немного кодирования, я могу рассказать вам о некоторых идеях, если вы не ленивы и не заинтересованы.

удалите AUTO_INCREMENT ИЗ ВАШЕГО ИНДЕКСА, создайте столбец с именем ID, просто сделайте его типом INT, тогда вам нужно создать такую ​​функцию:

private int returnLastID(){
//Make your Connection to the database things here.
String query="SELECT ID FROM table_name ORDER BY ID DESC LIMIT 1";
//prepare your statement into the resultset variable then simply return it.
return resultSet.getInt("ID");
}

так каждый раз, когда вы вставляете новую запись, вы просто вызываете эту функцию и добавляете к ней +1. надеюсь, вам понравится.

...