2014-12-09 2 views
2

Я обновляю старую базу данных MySQL и обнаруживаю, что несколько столбцов в разных таблицах не нужны. Но вместо того, чтобы просто удалять столбцы, я бы временно отключил их, чтобы проверить код и посмотреть, как много вещей сломается, прежде чем я решит завершить удаление столбца. Как я могу сообщить серверу об ошибке, если к конкретному столбцу обращаются?Как отключить столбец в таблице MySQL?

+3

Вы можете просто переименовать их –

+0

^^ Точно. Если код ссылается на них по имени, он будет терпеть неудачу. Однако, если код использует 'SELECT *' и ожидает, что они будут там, вы не можете защититься от этого. Он удастся позже, когда вы удалите столбцы. (одна причина, чтобы избежать «SELECT *») –

+0

Должен признаться, я никогда не рассматривал подводные камни SELECT *. Спасибо что подметил это. И идея переименования хорошая, что-то вроде columnname1. Но есть ли способ «прокомментировать» столбец, похожий на то, что я сделал бы с комментарием функции в коде? – myk

ответ

0

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

0

Возможно, вы захотите рассмотреть возможность использования этого вида. В качестве примера я создал эту скрипку: http://sqlfiddle.com/#!2/a8947/2

Посмотрите на два вопроса. Один выбирает таблицу с столбцом, который вы не уверены в необходимости (который я назвал «legacyData»). Другой выбирает вид. Вы можете видеть, что в представлении столбца «legacyData» больше не существует.

Я не думаю, что это будет работать, если вы пишете из таблицы, но если вы читаете из таблицы, представление является жизнеспособным вариантом.

шаги вы бы хотели принять в производство, чтобы испытать это было бы:

  • переименовывать таблицу («MyTable» до «myTableDontUse», например)
  • Создать представление на основе недавно переименованный стол
  • Когда вы называете вид, имя его оригинальное название таблицы (MYTABLE в данном примере)

делая это, вы заменили свой столик с видом. Этот подход позволит вам узнать, обращаются ли приложения к полю legacyData этой таблицы. Если нет, вы можете удалить представление, переименовать свою таблицу и опустить соответствующий столбец.

Производительность обычно невелика, особенно если у вас много данных, поэтому будьте осторожны. В подобной ситуации я начал с точки зрения, но из-за причин производительности (таблица имела 2M + строки), мы изменились на обычную таблицу, которая вместо этого была заполнена через триггеры.

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