@JohnDidact
Нуб во всём

Как «пересчитать» столбец с первичным автоинкрементным ключём?

В заголовке неточно сформулировал вопрос. Есть 2 таблицы: args и shit. shit.args имеет внешний ключ на args.id. Я понимаю, что первичный ключ с автоинкрементом - это не порядковый номер, но мне нужно пронумеровать args.id по порядку. Количество полей всегда 64. Иногда, по необходимости, если нужно изменить (что вряд ли, но возможно) структуру программы, их количество может быть другим. От этих изменений разбивается порядок id’шников в args. Поэтому мне нужно всё пересчитать... При этом, в shit.args изменить значение на новое.

Почему я считаю задачу сложной…

В принципе, наверное, можно было бы просто в тупую всё переписать, но тогда вылезли бы ошибки, так как первичный ключ - уникальный. Можно сделать так: удалить внешний ключ в shit.args, удалить первичный ключ и автоинкремент к args.id, заменив обычным индексом. Затем, снова назначить внешний ключ из shit.args в args.id. переписать средствами ЯП программы значения args.id, удалить внешний ключ в shit.args, удалить обычный индекс args.id, назначить его первичным, настроить автоинкремент, снова назначить внешний ключ на args.id из shit.args. Но это геморно, для меня)) есть ли метод в один-два запроса? Ну или чуть более…


За "неправильно построена архитектура/логика/etc.", пожалуйста, писать не надо. Спасибо за помощь.
  • Вопрос задан
  • 42 просмотра
Пригласить эксперта
Ответы на вопрос 2
@101-s
мне нужно пронумеровать args.id по порядку

Почему именно его? А есть возможность добавить еще один столбец, где будет указан порядковый номер?
Ответ написан
@Nc_Soft
пересчитать первичные ключи можно так
UPDATE args SET id =(SELECT @a:= @a + 1 from (SELECT @a:= 0) s)
ORDER BY `id`
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы