Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как применить переменную? / 9 сообщений из 9, страница 1 из 1
23.01.2017, 13:43
    #39389482
Как применить переменную?
Здравствуйте!
Пытаюсь установить значение из переменной
Код: sql
1.
SET @tamax := (SELECT MAX( id) FROM `telemetry_archive` LIMIT 1);


Эта часть проходит, tamax получен и я могу его вывести
А вот дальше я пытаюсь применить его
Код: sql
1.
ALTER TABLE stored_telemetry AUTO_INCREMENT = @tamax;



но выскакивает ошибка:
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@tamax' at line 1

Помогите, пожалуйста, не могу понять как применить переменную
...
Рейтинг: 0 / 0
23.01.2017, 14:32
    #39389522
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как применить переменную?
ЛеонидКириенкокак применить переменную
через prepared statement.
...
Рейтинг: 0 / 0
23.01.2017, 15:34
    #39389576
Как применить переменную?
Akina, наподобие такого? Ругается на SQL syntax

Код: sql
1.
2.
3.
4.
PREPARE altersql FROM 'ALTER TABLE stored_telemetry AUTO_INCREMENT = ?';
SET @tamax := ('SELECT MAX( id) FROM `telemetry_archive` LIMIT 1');
EXECUTE altersql USING @tamax;
DEALLOCATE PREPARE altersql ;
...
Рейтинг: 0 / 0
23.01.2017, 19:17
    #39389794
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как применить переменную?
AUTO_INCREMENT в ALTER TABLE - литерал, а не параметр.

Код: sql
1.
2.
3.
4.
SELECT MAX(id) INTO @tamax FROM `telemetry_archive`;
PREPARE altersql FROM CONCAT('ALTER TABLE stored_telemetry AUTO_INCREMENT = ', @tamax);
EXECUTE altersql;
DEALLOCATE PREPARE altersql ;
...
Рейтинг: 0 / 0
24.01.2017, 11:17
    #39390118
Как применить переменную?
Akina,
ругался на вот эту часть
Код: sql
1.
PREPARE altersql FROM CONCAT('ALTER TABLE stored_telemetry AUTO_INCREMENT = ', @tamax);



изменил на
Код: sql
1.
2.
SET @sql = CONCAT('ALTER TABLE stored_telemetry AUTO_INCREMENT = ', @tamax);
PREPARE altersql FROM @sql;



И заработало, спасибо!
...
Рейтинг: 0 / 0
24.01.2017, 11:35
    #39390136
Как применить переменную?
Итоговый SQL если кому понадобится
Код: sql
1.
2.
3.
4.
5.
SELECT MAX(id) INTO @tamax FROM `telemetry_archive`;
SET @sql = CONCAT('ALTER TABLE stored_telemetry AUTO_INCREMENT = ', @tamax);
PREPARE altersql FROM @sql;
EXECUTE altersql;
DEALLOCATE PREPARE altersql;
...
Рейтинг: 0 / 0
24.01.2017, 11:44
    #39390142
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как применить переменную?
ЛеонидКириенко,

Достаточно было написать
Код: sql
1.
ALTER TABLE stored_telemetry AUTO_INCREMENT = 1

https://dev.mysql.com/doc/refman/5.7/en/alter-table.html For both InnoDB and MyISAM, if the value is less than or equal to the maximum value currently in the AUTO_INCREMENT column, the value is reset to the current maximum AUTO_INCREMENT column value plus one.
...
Рейтинг: 0 / 0
24.01.2017, 13:19
    #39390237
Как применить переменную?
miksoft, Хм точно
А у меня не срабатывало из-за ключа уникального
"Вот жопа усатая", зато научился
...
Рейтинг: 0 / 0
25.01.2017, 00:05
    #39390696
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как применить переменную?
ЛеонидКириенко,

Кстати, в вашем коде этот эффект тоже используется, т.к. в нем забыли единицу прибавить.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как применить переменную? / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]