![]() |
Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Столкнулся с тем, что при попытке зарегестрировать такой эвент получаю ошибку:
DELIMITER | CREATE EVENT `clear_battle_table` ON SCHEDULE EVERY 1 DAY STARTS '2009-12-18 13:00:00' ON COMPLETION PRESERVE ENABLE COMMENT 'очистка таблицы боёв' DO BEGIN DECLARE auto_increment INT DEFAULT 0; SELECT AUTO_INCREMENT INTO auto_increment FROM `information_schema`.`TABLES` WHERE TABLE_SCHEMA = "asteria" AND TABLE_NAME = "battle"; TRUNCATE TABLE `asteria`.`battle`; ALTER TABLE `asteria`.`battle` AUTO_INCREMENT = auto_increment; END DELIMITER ;
ERROR 1064 (42000): 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 'auto_increment;
Однако, если вместо переменной, подставить число явно, то всё проходит нормально:
ALTER TABLE `asteria`.`battle` AUTO_INCREMENT = 7;
Так же заметил, что следующий манёвр так же не прокатывает и выдаёт ошибку:
mysql> SET @ai = 7; Query OK, 0 rows affected (0.00 sec) mysql> SELECT @ai; +------+ | @ai | +------+ | 7 | +------+ 1 row in set (0.00 sec) mysql> ALTER TABLE `asteria`.`battle` AUTO_INCREMENT = @ai; ERROR 1064 (42000): 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 '@ai' at line 1
Т.е. AUTO_INCREMENT нельзя установить через переменную... а почему ?
P.S. Вообще, суть задачи в том, чтобы удалить из таблицы все строки, при этом сохранив текущее значение автоинкрементного поля. Понятно, что можно сделать просто DELETE FROM `table`, но на сколько я знаю, TRUNCATE работает гораздо шустрее...
Неактивен
Прямо в документации про это не написано, но судя по всему AUTO_INCREMENT может принимать только значение равное константе, а не переменной или значение функции.
Но данное ограничение можно обойти используя подготовленные выражения:
http://sqlinfo.ru/forum/viewtopic.php?id=363
Неактивен
может просто попробовать использовать set???
Неактивен
vasya написал:
Прямо в документации про это не написано, но судя по всему AUTO_INCREMENT может принимать только значение равное константе, а не переменной или значение функции.
Но данное ограничение можно обойти используя подготовленные выражения:
http://sqlinfo.ru/forum/viewtopic.php?id=363
Пожалуйста, Вы не могли бы привести пример? У меня с подготовленными выражениями также запрос не выполняется, если значение передавать через переменную.
Вот пример, как я пробую:
#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 '?' at line 1
Версия MySQL 5.1.49-3
Неактивен
set @a = concat('alter table test auto_increment= ',@autoinc);
PREPARE exp FROM @a;
EXECUTE exp;
Неактивен
vasya написал:
set @a = concat('alter table test auto_increment= ',@autoinc);
PREPARE exp FROM @a;
EXECUTE exp;
Спасибо большое, получилось. Наверное, нубский вопрос, я просто только учусь))
Неактивен
Страниц: 1