SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 26.02.2023 18:29:45

OlegR
Участник
Зарегистрирован: 14.06.2022
Сообщений: 21

Изменение значения автоинкремента

Добрый день, коллеги.

Нигде в доках по mysql не нашел явного указания что в качестве параметра AUTO_INCREMENT принимает только явно заданное число.
Но на запрос типа

ALTER TABLE `archive` AUTO_INCREMENT = (@ai+1)

выдает ошибку синтаксиса.

Это действительно невозможно или у меня "кривые" руки?

Если это так, то возможно ли каким либо другим способом задать автоинкременту вычисляемое значение?

Зачем?

Одна из таблиц в проекте заполняется данными при выполнении расчёта в конце заданного периода.
Перед выполнением нового расчёта таблица очищается (так нужно).
Поэтому, перед очередным расчётом данные из этой таблицы сливаются в таблицы типа "архив_1", "архив_2" и т.д.
Хочу их сливать в общую архивную таблицу.
Но из-за установленного для базы значения блокировки, после каждого массового добавления записей в общий архив значение
автоинкремента в архиве увеличивается на большее значение, чем добавлено записей.
Само значение поля автоинкремента нигде не используется и, в принципе, не играет никакого значения.
Но заказчик, который с этими записями иногда работает из акцесса, хочет что бы значения этого поля в архиве шли последовательно, без дырок.

Как вариант, конечно, можно после добавления в архив новых записей просто перелить их во временную таблицу, сбросить автоинкремент в архиве
и залить обратно все записи. Но архив уже немаленький и пополняется активно - зачем лишняя и долговременная загрузка сервера?

Есть другое решение?
Спасибо!

Неактивен

 

#2 26.02.2023 18:48:26

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Изменение значения автоинкремента

Для того, чтобы обойти ограничение по использованию пользовательских переменных, можно применить подготовленные выражения (prepared statements):

SET @s = CONCAT("ALTER TABLE `archive` AUTO_INCREMENT = ", @ai+1);
PREPARE stmt from @s;
EXECUTE stmt;

Неактивен

 

#3 26.02.2023 19:32:12

OlegR
Участник
Зарегистрирован: 14.06.2022
Сообщений: 21

Re: Изменение значения автоинкремента

Елки-палки, ну конечно!
Как одно из решений я рассматривал написание хранимки с похожим алгоритмом, но, почему то ступил - что код хранимки с таким же успехом можно использовать напрямую в консоли пхпадминера!

Спасибо, большое!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson