MariaDB: переименовать столбец первичного ключа [дубликат]

В то время как , что вызывает NullReferenceExceptions и подходит к avoid / fix , такое исключение было рассмотрено в других ответах, что многие программисты не имеют " t узнал еще, как независимо отлаживать такие исключения во время разработки.

В Visual Studio это обычно легко благодаря Visual Studio Debugger .


Во-первых, убедитесь, что правильная ошибка будет обнаружена - см. . Как разрешить нарушение «Исключение System.NullReferenceException» в VS2010? Примечание1

Затем либо Начать с отладки (F5) , либо Приложить [отладчик VS] к запуску процесса . Иногда может быть полезно использовать Debugger.Break , в котором будет предложено запустить отладчик.

Теперь, когда NullReferenceException выбрано (или необработанно), отладчик остановится ( помните правило, указанное выше?) в строке, на которой произошло исключение. Иногда ошибка может быть легко обнаружена.

Например, в следующей строке единственный код, который может , вызывает исключение, если myString имеет значение null. Это можно проверить, посмотрев окно Watch или выполнив выражения в окне Immediate Window .

var x = myString.Trim();

В более сложных случаях, таких как следуя ниже, вам нужно будет использовать один из методов выше (Watch или Immediate Windows) для проверки выражений, чтобы определить, было ли str1 пустым или если str2 имеет значение null.

var x = str1.Trim() + str2.Trim();

Once , где было выбрано исключение, это обычно тривиально по отношению к разуму назад, чтобы выяснить, где введенное значение null было [неправильно] -

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


1 Если Break on Throws слишком агрессивен и отладчик останавливается на NPE в библиотеке .NET или сторонних разработчиков, Break на User-Unhandled можно использовать для ограничения выловленных исключений. Кроме того, VS2012 представляет Just My Code , который я рекомендую также включить.

Если вы отлаживаете с включенным Just My Code, поведение немного отличается. При включенном Just My Code отладчик игнорирует исключения, связанные с привилегиями обычного языка (CLR) первого шанса, которые выходят за пределы My Code и не проходят через My Code

blockquote>

16
задан John MacIntyre 24 April 2010 в 06:11
поделиться

6 ответов

это ничем не отличается от изменения любого другого столбца -

ALTER TABLE `pkey` CHANGE `keyfield` `keyfield2` INT( 11 ) NOT NULL AUTO_INCREMENT 

, это изменяет столбец keyfield в таблице pkey, который будет называться keyfield2 - вы должны указать определение впоследствии , как обычно.

15
ответ дан Igor Serebryany 4 September 2018 в 09:43
поделиться

Возможно, у вас есть ограничение внешнего ключа. Вы можете отключить их с помощью SET foreign_key_constraints=0, но вы должны помнить об обновлении базы данных впоследствии.

6
ответ дан Alex 4 September 2018 в 09:43
поделиться

Оставьте часть PRIMARY KEY инструкции alter. Первичный ключ будет обновляться автоматически.

4
ответ дан Dirigible 4 September 2018 в 09:43
поделиться

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

1
ответ дан Eric Clack 4 September 2018 в 09:43
поделиться

Если другие таблицы имеют внешний ключ в вашей таблице, вы не можете напрямую переименовать столбец с помощью таблицы alter, это вызовет следующую ошибку: [HY000] [1025] Ошибка при переименовании xxx в yyy (errno: 150). Вы должны :

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

При переименовании таблицы в Intellij она генерирует код, который нужно удалить, и добавьте внешний ключ.

0
ответ дан Remy Mellet 4 September 2018 в 09:43
поделиться

Возможно, плохая практика работает. Но вы можете экспортировать весь свой db в текстовый файл sql. Найдите и замените PK, который хотите переименовать, а затем восстановите базу данных по sql.

3
ответ дан Samuel De Rycke 4 September 2018 в 09:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: