2016-08-07 4 views
2

Я пытаюсь изменить таблицу, как это:Ошибка синтаксиса для нескольких столбцов изменений в таблице alter?

ALTER TABLE book 
    ADD COLUMN `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER `id`, 
    CHANGE COLUMN `id` bigint unsigned NOT NULL AUTO_INCREMENT, 
    CHANGE COLUMN `author_id` bigint unsigned NOT NULL; 

Но он продолжает давать эту ошибку синтаксиса:

#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 'bigint unsigned NOT NULL AUTO_INCREMENT, CHANGE COLUMN `author_id` bigint un' at line 3 

Я понятия не имею, где я собираюсь здесь не так. SQL, кажется, все в порядке со мной, и каждый из таблицы изменения может быть успешно выполнен индивидуально:

ALTER TABLE book ADD COLUMN `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER `id`; 
ALTER TABLE book CHANGE COLUMN `id` bigint unsigned NOT NULL AUTO_INCREMENT; 
ALTER TABLE book CHANGE COLUMN `author_id` bigint unsigned NOT NULL; 

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

Почему не работает объединенный SQL?

ответ

1

Проблема в форме ниже код строки причины на синтаксис в документации CHANGE ожидает новое имя столбца, как CHANGE [COLUMN] old_col_name new_col_name column_definition

CHANGE COLUMN `id` bigint unsigned NOT NULL AUTO_INCREMENT, 

Таким образом, вы можете изменить это

CHANGE COLUMN `id` `new_id` bigint unsigned NOT NULL AUTO_INCREMENT, 

(OR) рассмотреть возможность использования MODIFY скорее всего MODIFY [COLUMN] col_name column_definition

MODIFY [COLUMN] `id` bigint unsigned NOT NULL AUTO_INCREMENT 
+0

«Это расширение MySQL для стандартного SQL, которое допускает только один из каждого предложения в отношении инструкции ALTER TABLE. Например, чтобы удалить несколько столбцов в одном из операторов, сделайте следующее: «Это похоже на ответ? Только один тип изменения столбца может быть в одном запросе таблицы изменений? –

+0

@ kavoir.com, да, только одно дополнение/change/drop для инструкции alter table и не может быть скомбинирован. Проверьте правильность синтаксиса, и вы увидите это. – Rahul

+0

@ kavoir.com, см. править в ответ для лучшего уточнения. – Rahul

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