Как изменить таблицу MySQL без потери данных? - PullRequest
7 голосов
/ 18 апреля 2011

В моем приложении я делаю некоторые изменения и загружаю их на тестовый сервер.Поскольку у меня нет доступа к базе данных сервера, я запускаю ALTER команды для внесения изменений в нее.

Используя метод, я выполнил следующую команду на сервере:

ALTER TABLE `blahblahtable` ADD COLUMN `newcolumn` INT(12) NOT NULL

После этогоЯ обнаружил, что все данные таблицы были удалены.Теперь таблица пуста.

Так что мне нужно изменить таблицу без удаления его данных.Есть ли способ сделать это?

Ответы [ 2 ]

15 голосов
/ 18 апреля 2011

Ваш вопрос совершенно очевиден.Вы добавляете новый столбец в таблицу и устанавливаете для него значение NOT NULL.
. Чтобы прояснить ситуацию, я объясню реакцию сервера при запуске команды:

  1. Вы добавляете новый столбец, поэтому каждая строка таблицы должна установить значение для этого столбца.

  2. Поскольку вы не объявляете ничего значение по умолчанию , для этого нового столбца установлены все строки null.

  3. Сервер замечает, что строки столбца имеют значение null для столбца.это не позволяет null с.Это недопустимо.

  4. Для разрешения конфликта недопустимые строки удалены .

Есть несколько хороших исправленийдля этой проблемы:

  • Установите значение по умолчанию (рекомендуется) для создаваемого столбца.

  • Создатьстолбец без NOT NULL, установите соответствующие значения, а затем сделайте столбец NOT NULL.

0 голосов
/ 18 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...