0

У меня есть три таблицы в MySQL (innodb) (X, Y и Z). X - таблица с более чем 10 миллионами строк и имеет первичный ключ Y как внешний ключ. Аналогично, Z - таблица с более чем 30 миллионами строк и имеет первичный ключ Y как внешний ключ.MySQL Первичный первичный ключ MySQL от varchar до int

Теперь проблема заключается в том, что первичный ключ Y является VARCHAR (что-то вроде хэша md5 или GUID). Я хочу переместить этот ключ в INT (AUTO_INCREMENT). Каков способ достичь этого в mysql, без написания скрипта на любом другом языке?

Кроме того, первичный ключ таблицы Z также является VARCHAR (md5/GUID). Я хотел бы также изменить это на целое число. (Это не внешний ключ в любой таблице).

ответ

1

(Это может или не может быть лучше, чем предложение Ritobroto в.)

Предполагая, что X ссылки на Y. (Adapt по мере необходимости для всех ФКС.)

  1. ли что-то подобное для каждый таблица.

    ALTER TABLE X DROP FOREIGN KEY ... - Мы добавим его позже Добавить ID INT UNSIGNED NOT NULL AUTO_INCREMENT, - замена ПК DROP PRIMARY KEY, - Предполагая, что это было guid ADD ПЕРВИЧНЫЙ КЛЮЧ (id), ДОБАВИТЬ ИНДЕКС (X_guid), - Потерял FK; еще (на данный момент) нужен индекс ДОБАВИТЬ КОЛОННУЮ Y_id INT НЕ ПОДЛЕЖДАЕТ НЕ НУЛЛ - будущий FK до Y ;

  2. Получить новый ids подключен (для замены guids). Для каждой ссылки:

    UPDATE X JOIN Y ON X.Y_guid = Y.guid SET x.y_id = y.id; (Это займет много времени

  3. Заново установить FKs Для каждой таблицы:

    ALTER TABLE ... ADD FOREIGN KEY ..., - связать id вместо guid .. DROP INDEX (X_guid); - если вам это нужно для чего-то еще

Практика это на тестовой машине !!

0

Шаг 1
Создание таблиц с одинаковыми именами столбцов, но и тип данных первичного ключа Y должен быть в INT AUTO INCREMENT, То же самое относится и к таблице Z.

Шаг 2
Используйте этот запрос:

INSERT INTO table_name (column_names of present table except the primary key column_name) SELECT all the columns except the primary key column FROM Y/Z(which ever table you want from the data to be inserted). 

Тогда вы можете отказаться от оригинальной таблицы.
Это болезненный процесс для такого количества данных, но сделает то, что вы хотели.

+0

D вам также не нужно восстанавливать FK? –

+0

Да, на новом столе вам нужно снова установить FK –

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