2010-05-12 4 views
1

У меня есть две таблицы mysql, нужно запустить его идентификатор столбца с автоматическим приращением с последним значением последней вставленной строки в другой таблице (плюс 1).Сбросить значение автоинкрементного значения в скрипте mysql

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

 
mysql> ALTER TABLE tbl AUTO_INCREMENT = 100; 

Однако, это не представляется возможным:

 
mysql> ALTER TABLE tb2 AUTO_INCREMENT = (SELECT MAX(id) FROM tbl1); 

Мне нужно выполнить что-то вроде этого, потому что Я заполняю таблицы, используя скрипт. Есть ли другой способ достичь этого?

+1

Необходимость управлять индексом auto_increment обычно является симптомом дефекта дизайна. Почему идентификаторы таблиц должны соотноситься таким образом? –

+0

Не думайте, что инструкции SELECT работают в этой ситуации. Вы всегда можете запросить его сначала с tbl1. По умолчанию автоинкремент устанавливается на последнюю запись в этой таблице. Поэтому будьте осторожны, чтобы вы не перезаписывали значения в tbl2 с этими tbl1 - они могут уже существовать в tbl2. Если вам нужно, чтобы они были одинаковыми, не используйте автоматический прирост в целом и просто обновляйте id в tbl2 с помощью параметра tbl1. – Alec

+0

Обе таблицы относятся к третьей таблице, которая будет генерировать идентификаторы их строк в будущем. Поскольку мне нужно перенести данные с помощью сценария, мне легче заполнить одну таблицу, затем вторую, затем заполнить таблицу генераторов, а затем создать внешние ключи. – Lucia

ответ

2

Я думаю, вы пытаетесь использовать столбец автоинкремента для чего-то, что не подходит. Если вам нужны точные значения, которые будут вставлены, то это не должно быть автоматическим приращением.

0

ЭТО ИСПОЛЬЗОВАТЬ ЭТОТ СЦЕНАРИЙ

ALTER TABLE `people` AUTO_INCREMENT =1 

, где люди на мой стол, или вы можете сделать это через графический интерфейс (работа вкладки PHPMyAdmin с текущей выбранной таблицы)

+1

Ответ SLim работает, если он не может установить значение 1, он просто устанавливает минимально возможное значение, которое было после OP. – 2012-12-19 16:20:22

0

Как насчет создать фиктивную запись и приращение?

-- insert dummy forcing id 
INSERT INTO 'tb2' (ID, NAME, ...) 
VALUES (SELECT MAX(id) FROM tb1, "dummy", ...); 

-- automagically increment to last id + 1 
ALTER TABLE `tb2' AUTO_INCREMENT = 1; -- only myISAM 

-- delete dummy 
DELETE FROM 'tb2' WHERE NAME="dummy"; 
Смежные вопросы