сделайте идентификатор в таблице mysql auto increment (после факта)
Я приобрел базу данных от другого разработчика. Он не использовал auto_incrementers на любых столах. Все они имеют идентификаторы первичного ключа, но он сделал все приращение вручную, в коде.
могу ли я превратить их в Auto_incrementers сейчас?
Вау, Очень приятно, спасибо. Он работал без сучка и задоринки, на одном из моих столов. Но вторая таблица, я получаю эту ошибку...Ошибка при переименовании '.DBNAME#sql-6c8_62259c' to '.DBNAMEdealer_master_events'
6 ответов:
вот, например, таблица имеет первичный ключ, но не
AUTO_INCREMENT:mysql> CREATE TABLE foo ( id INT NOT NULL, PRIMARY KEY (id) ); mysql> INSERT INTO foo VALUES (1), (2), (5);вы можете
MODIFYстолбец, чтобы переопределить его с :mysql> ALTER TABLE foo MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT;убедитесь, что это вступило в силу:
mysql> SHOW CREATE TABLE foo;выходы:
CREATE TABLE foo ( `id` INT(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1обратите внимание, что вы изменили определение столбца на месте, не требуя создания второго столбца и удаления исходного столбца. Элемент
PRIMARY KEYограничение не влияет, и вы не делаете нужно упомянуть в вALTER TABLEзаявление.Далее вы можете проверить, что вставка генерирует новое значение:
mysql> INSERT INTO foo () VALUES (); -- yes this is legal syntax mysql> SELECT * FROM foo;выходы:
+----+ | id | +----+ | 1 | | 2 | | 5 | | 6 | +----+ 4 rows in set (0.00 sec)Я проверил это на MySQL 5.0.51 на Mac OS X.
Я также тестировал с
ENGINE=InnoDBи зависимая таблица. Изменениеidопределение столбца не нарушает ссылочной целостности.
чтобы ответить на ошибку 150, которую вы упомянули в своем комментарии, это, вероятно, a конфликт с ограничениями внешнего ключа. Мои извинения, после того, как я проверил его, я думал, что это сработает. Вот несколько ссылок, которые могут помочь диагностировать проблему:
Я предполагаю, что вам не нужно повторно увеличивать существующие данные, поэтому почему вы не можете просто запустить простую команду ALTER TABLE для изменения атрибутов PK?
что-то типа:
ALTER TABLE `content` CHANGE `id` `id` SMALLINT( 5 ) UNSIGNED NOT NULL AUTO_INCREMENTЯ проверил этот код на моей собственной базе данных MySQL, и он работает, но я не пробовал его с любым значимым количеством записей. После того, как вы изменили строку, вам нужно сбросить приращение до числа, гарантированного, чтобы не мешать другим учетная документация.
ALTER TABLE `content` auto_increment = MAX(`id`) + 1опять же, непроверенные, но я считаю, что это будет работать.
ни один из выше работал для моего стола. У меня есть таблица с целым числом без знака в качестве первичного ключа со значениями в диапазоне от 0 до 31543. В настоящее время существует более 19 тысяч записей. Мне пришлось изменить столбец
AUTO_INCREMENT(MODIFY COLUMN'id'INTEGER UNSIGNED NOT NULL AUTO_INCREMENT) и установить семя(AUTO_INCREMENT = 31544) в том же заявлении.ALTER TABLE `'TableName'` MODIFY COLUMN `'id'` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT = 31544;
Это сработало для меня (я хотел сделать id первичным и установить автоматическое приращение)
ALTER TABLE
table_nameизменитьididINT PRIMARY KEY AUTO_INCREMENT;
Да, легко. Просто запустите запрос определения данных для обновления таблиц, добавив столбец AUTO_INCREMENT.
Если у вас есть существующая база данных, будьте осторожны, чтобы сохранить любые отношения внешнего ключа, которые, возможно, уже есть в "искусственно созданной" первичные ключи.
пока у вас есть уникальные целые числа (или некоторые уникальные значения) в текущем PK, вы можете создать новую таблицу и вставить в нее с помощью IDENTITY INSERT ON. Затем удалить старую таблицу и переименовать новую таблицу.
Не забудьте воссоздать все индексы.
Comments