2010-04-29 5 views
4

Так это работает ...Установленное значение AUTO_INCREMENT программно

ALTER TABLE variation AUTO_INCREMENT = 10; 

Но я хочу, чтобы это сделать;

ALTER TABLE variation AUTO_INCREMENT = (SELECT MAX(id)+1 FROM old_db.varaition); 

но это не работает, и это не так;

SELECT MAX(id)+1 INTO @old_auto_inc FROM old_db.variation 
ALTER TABLE variation AUTO_INCREMENT = @old_auto_inc; 

Так кто-нибудь знает, как это сделать?

(я пытаюсь убедиться, что ключи AUTO_INCREMENT DonT сталкиваются между старым и новым сайтом и нужно сделать это автоматически. Так что я могу просто запустить сценарий, когда новый дб идет в прямом эфире)

ответ

0

Я не Не знаю, хорошая ли это идея, но можете ли вы сделать это с двумя запросами на серверном языке, например PHP?

$incrementStep = Db::query('SELECT MAX(id)+1 FROM old_db.varaition'); 

Db::query('ALTER TABLE variation AUTO_INCREMENT = ' . (int) $incrementStep); 

Предполагая, что Db::query является магическим методом запроса, который возвращает именно то, что вы хотите, каждый раз :)

+0

Yep надеялся сделать все это в SQL, но похоже, что мне нужно будет сделать что-то вроде выше. – Tim

1

Я не достаточно хорошо знаком с MySQL, чтобы дать конкретный ответ. Однако в других механизмах базы данных есть метод EXEC, который вы можете передать в строку, которая будет выполнена. Вы просто пишете скрипт, который определяет значение, которое вы хотите для auto_increment, затем вставьте это значение в виде строки в скрипт EXEC'd. В основном писать сценарий, который записывает второй скрипт и запускает его.

EDIT: Похоже, вы хотите подготовить заявление. Поиск «Динамический SQL» Существует почти дубликат here

EDIT2: Тим, ссылка this ссылка, о которой упоминается в почти дублированном ранее сообщении StackOverflow. Найдите строку «Использование параметров» на странице, и вы получите тощий на этом. Похоже, MySql делает это немного сложнее. В MSSqlServer 2000 это был тривиальный процесс. Here - еще одна ссылка на статью о mysql dynamic sql

+0

Хорошая идея, но кажется mysql не нравится mysql> PREPARE stmt FROM 'ALTER TABLE изменение AUTO_INCREMENT =?'; ОШИБКА 1064 (42000): У вас возникла ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с?? в строке 1 – Tim

1

Установите свой auto_increment в 1, ноль не работает, автоматически mysql задает максимальное значение для следующего значения для значения индекса.

ALTER TABLE table AUTO_INCREMENT = 1 
Смежные вопросы