Пересчитать идентификатор автоматического увеличения SQL, сохраняя при этом другие столбцы без изменений

у меня такая таблица

Я БЫНАЗВАНИЕ
1МАЙКЛ
2ИОРДАНИЯ
5ДОНАЛЬД
7ДЖЕЙС
8РОЙ
11ДЖОН
16Министерство энергетики

Есть ли способ пересчитать идентификатор с самого начала, чтобы было продолжение и сохранить остальные столбцы нетронутыми, чтобы они были такими:

Я БЫНАЗВАНИЕ
1МАЙКЛ
2ИОРДАНИЯ
3ДОНАЛЬД
4ДЖЕЙС
5РОЙ
6ДЖОН
7Министерство энергетики

Благодарю вас!

Вы можете получить свои записи с помощью PHP, проверить наименьший free ID, проверить следующий наименьший filled ID. обновить набор filled ID = free ID и продолжить проверку со следующего наименьшего free ID

medilies 19.03.2022 15:24

нет необходимости в последовательных идентификаторах

nbk 19.03.2022 16:14
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
29
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если ваша версия MySQL поддерживает функцию окна, вы можете использовать ROW_NUMBER.

Предположим, у вас есть следующая таблица:

create table test(
ID int NOT NULL ,
NAME VARCHAR (25)
);

insert into test values 
(1,'MICHAEL'),
(2,'JORDAN'),
(5,'DONALD'),
(7,'JAYCE'),
(8,'ROY'),
(11,'JOHN'),
(16,'DOE');

Использование row_number даст:

select ID,NAME, row_number() over(order by ID ASC ) as rownum
from test

Result:

ID    NAME    rownum
1   MICHAEL     1
2   JORDAN      2
5   DONALD      3
7   JAYCE       4
8   ROY         5
11  JOHN        6
16  DOE         7

Теперь создайте еще одну таблицу test2.

create table test2(
ID int NOT NULL ,
NAME VARCHAR (25)
);

Мы можем использовать INSERT INTO SELECT:

INSERT INTO test2( ID, NAME )
  WITH cte AS (
            select ID,NAME, row_number() over(order by ID ASC ) as rownum
            from test t1
  )
  SELECT rownum,NAME
  FROM cte;

select * from test2;

Result:

ID    NAME
1 MICHAEL
2 JORDAN
3 DONALD
4 JAYCE
5 ROY
6 JOHN
7 DOE

См. рабочий пример

Другие вопросы по теме