2012-01-18 1 views
2

Недавно я заметил, что в одной из моих баз данных есть несколько полей типа bigint, которые можно заменить типом «int». Проблема в том, что база данных уже подключена к сети и используется, а также есть внешние ключи в действии, поэтому, когда я пытаюсь изменить тип данных в автономном БД, mysql не позволит мне и выдает сообщение об ошибке: «# 1025 - Ошибка при переименовании (...) ".Как изменить bigint на int в mysql, с таблицей с внешними ключами

Так как я могу изменить эти поля, сохраняя внешние ключи счастливыми? (и не уничтожить существующую БД!)

+0

Почему вы хотите изменить их? Вы сталкиваетесь с проблемами производительности из-за них? –

+0

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

ответ

0

Вы не можете уменьшить размер поля при хранении данных. Вы можете только расширить их. Что вы можете сделать, это экспортировать все данные, отключить ключи, очистить таблицы, изменить размеры полей & импортировать данные еще раз.

+0

Спасибо, я попробую. –

0

Вы можете попробовать:

  1. Добавить новые столбцы с соответствующими типами.
  2. Скопируйте значения из старых столбцов в новые столбцы.
  3. Переименовать столбцы.
  4. Ограничения обновления (возможно, в два этапа - DROP и CREATE).
  5. Удалить старые столбцы.
1

Вы можете изменить столбец от BIGINT до INT, если в столбце нет данных, которые не вписывались бы в более мелкий тип данных INT.

ALTER TABLE mytable MODIFY COLUMN mycolumn INT (11);

+0

Спасибо за вашу помощь, но этот вопрос сейчас более трех лет. Я даже не помню, о какой базе данных я говорил. :) –