2016-12-19 14 views
0

Мне нужно добавить команду alter в мою схему.Alter schema не работает

SET @s = (SELECT IF(
    (SELECT COUNT(*) 
     FROM INFORMATION_SCHEMA.COLUMNS 
     WHERE table_name = 'product' 
     AND table_schema = DATABASE() 
    AND column_name = 'date_madified' 
    ) > 0, 
    "SELECT 1;", 
    "ALTER TABLE `product` CHANGE `date_madified` `date_modified`;" 
)); 
PREPARE stmt FROM @s; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

Вышеупомянутое выполнение без предоставления ошибок. Но имя столбца не изменяется. Когда я попытался проверить ошибку, которую я нашел ниже, это причины. 1. Собственная база данных не выбрана. 2. «IF» не получает, дает правильный результат, хотя я жестко кодирует имя базы данных.

Хотя sql в формате выше успешно выполняется для всех остальных случаев изменения имени, типа данных и размера и т. Д., Но в этом случае он не работает должным образом.

+0

Я уверен, что некоторые из столбцов, возможно, сошли с ума, но mysql блаженно не знает об этом. Вероятно, вы должны искать 'date_modified' вместо – e4c5

+0

На самом деле для имени столбца была ошибка заклинания. Эта схема ALTER предназначена для исправления ошибки. –

ответ

0

Очевидно, попробуйте следующее в тестовых данных НЕ в производственной среде.

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

Также альтер оператор таблицы требует определения столбца, в вашем случае что-то вроде

ALTER TABLE `product` CHANGE `date_madified` `date_modified` timestamp 

изменений выше, чтобы отразить тип поля вашего date_madified поля.

+0

Я не могу следовать простейшему способу написания ALTER TABLE 'product' CHANGE' date_madified' 'date_modified' DATETIME NULL; Я должен следовать тому, как это упоминается. Более того, такой формат работает в среде разработки для всех остальных truncate sql. –

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

  • Нет связанных вопросов^_^