2015-12-09 3 views
-1

У меня есть таблица под названием sidebar_items и она имеет столбец Type, который имеет тип enum('image', 'html'). Я хотел бы изменить этот столбец типа enum('image', 'html', 'structure'). Я попытался это:Как изменить колонку, если это тип MySQL?

alter table sidebar_items modify Type Type enum('image', 'html', 'structure'); 

Это дает мне ошибку

alter table sidebar_items modify Type Type enum('image', 'html', 'structure') Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Type enum('image', 'html', 'structure')' at line 1 

Я попытался с `type`, а также. Могу ли я заставить этот запрос работать?

В качестве альтернативы, можно решить эту проблему путем:

  • создавая temp таблицу с той же структурой, как sidebar_items
  • миграции записи из sidebar_items к temp таблице
  • капельной sidebar_items
  • Воссоздание sidebar_items с новым типом для Type
  • миграция записей из temp таблицы sidebar_items
  • сбросив temp стол

Однако, мне интересно узнать, есть ли какой-нибудь более простые решения, возможно, с одной alter table команды.

+0

Что я пропустил, чтобы заслужить нисходящее движение? –

ответ

4

Правильный синтаксис:

ALTER TABLE sidebar_items MODIFY `Type` ENUM('image', 'html', 'structure'); 

с командой ALTER TABLE ... MODIFY, вам не нужно указать имя столбца в два раза, но вам это нужно для ALTER TABLE ... CHANGE.

Вы можете переименовать столбец с помощью CHANGE имя_столбца new_col_name п column_definition. Для этого укажите старый и новый столбцы имена и определение, которое имеет в данный момент столбец. Например, переименовать столбец INTEGER от а до Ь, вы можете сделать это:

ALTER TABLE t1 CHANGE a b INTEGER;

Чтобы изменить тип столбца, но не имя, CHANGE синтаксис еще требует старого и нового имени столбца, даже если они одинаковы. Для Например:

ALTER TABLE t1 CHANGE b b BIGINT NOT NULL;

Вы также можете использовать MODIFY для изменения типа столбца без его переименования:

ALTER TABLE t1 MODIFY b BIGINT NOT NULL;

ИЗМЕНИТЬ является расширением ALTER TABLE для совместимости с Oracle.

+0

О, я пропустил это. Благодарю. Примите ваш ответ. –

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