сделайте идентификатор в таблице mysql auto increment (после факта)



Я приобрел базу данных от другого разработчика. Он не использовал auto_incrementers на любых столах. Все они имеют идентификаторы первичного ключа, но он сделал все приращение вручную, в коде.



могу ли я превратить их в Auto_incrementers сейчас?





Вау, Очень приятно, спасибо. Он работал без сучка и задоринки, на одном из моих столов. Но вторая таблица, я получаю эту ошибку...Ошибка при переименовании '.DBNAME#sql-6c8_62259c' to '.DBNAMEdealer_master_events'

652   6  

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 изменить idid INT PRIMARY KEY AUTO_INCREMENT;

Да, легко. Просто запустите запрос определения данных для обновления таблиц, добавив столбец AUTO_INCREMENT.

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

пока у вас есть уникальные целые числа (или некоторые уникальные значения) в текущем PK, вы можете создать новую таблицу и вставить в нее с помощью IDENTITY INSERT ON. Затем удалить старую таблицу и переименовать новую таблицу.

Не забудьте воссоздать все индексы.

Comments

    Ничего не найдено.