2013-04-01 3 views
2

Я пытаюсь сбросить значение автоматического прироста в одной из моих таблиц на основе количества строк, находящихся в нем в настоящее время. Вот код, который у меня есть.MySQL: Сброс AUTO_INCREMENT

SET @numrows = 0; 

SELECT COUNT(*) total, @numrows := COUNT(*) + 1 numrows FROM maj_user ; 
ALTER TABLE `maj_user` AUTO_INCREMENT = @numrows ; 

Это отлично работает, если я выполняю его в MySQL Workbench. Однако мне нужно сохранить это как файл SQL и выполнить его как часть сценария импорта базы данных. Если я это сделаю, я получаю следующее:

ERROR 1064 (42000) at line 39: 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 '@numrows' at line 1 

Строка 39 - инструкция ALTER TABLE. Есть идеи?

+0

Вы не должны быть настройки 'значение AUTO_INCREMENT' для' IFNULL (MAX (ID), 0) + 1' или независимо от вашего автоинкрементного столбца? По fluke это может быть то же самое, что и количество строк, но это ни в коем случае не является надежным. – tadman

+0

При типичных обстоятельствах да. В этом конкретном случае вероятность равенства MAX и COUNT является достоверностью. – Tanoro

+0

Итак, вы никогда, * никогда не удаляете строки? Как ваш «AUTO_INCREMENT» заканчивается в неправильном состоянии? – tadman

ответ

0

Можете изменить синтаксис, чтобы пропустить фактическое значение @numrows? Я не уверен, что проблема, но обходной путь, кажется, что-то вроде:

ALTER TABLE `maj_user` AUTO_INCREMENT = (SELECT COUNT(*) + 1 from maj_user); 
+0

Код ошибки: 1064. У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '(SELECT COUNT (*) + 1 от maj_user)' в строке 1 – Tanoro

+0

Для повышения производительности следует использовать первичный ключ вместо * в операциях подсчета. – hd1

+0

Та же ошибка, что и выше, hd1. – Tanoro

Смежные вопросы