ДОБАВИТЬ новый столбец после существующего столбца и УДАЛИТЬ существующий столбец с помощью одного оператора MYSQL

Я смог добавить новые столбцы один за другим в одном операторе. например, для

ALTER TABLE `mytable` ADD `b` VARCHAR(30) AFTER `a`, ADD `c` VARCHAR(30) AFTER `b`

учитывая это, я понимаю, что запрос выполняется 1 на 1, запросы представлены в одном операторе.

Чего мне не удалось добиться, так это добавить столбец b после столбца a и отбросить существующий столбец a в запросе с одним оператором.

Я пробовал это:

ALTER TABLE `mytable` ADD `b` VARCHAR(30) AFTER `a`, DROP `a`

это возвращает мне ошибку: #1054 - Unknown column 'a' in 'mytable'

Есть ли возможность совершать такие действия?

пожалуйста, создайте MCVE здесь: db-fiddle.com с вашим DDL и запросом

Alexey 10.01.2019 08:33

Если вы измените оператор на ALTER TABLE mytable ADD b VARCHAR (30), DROP a; затем a удаляется и добавляется b, но в конце добавляется b - возможно, не то, что вы хотите. Я полагаю, что синтаксический анализатор распознает, что a будет удален в вашем операторе, и не знает, где разместить b. Если вы укажете другой столбец для b, который будет помещен после оператора alter, это будет сделано.

P.Salmon 10.01.2019 09:57

@ P.Salmon, это интересно, потому что в справочнике MySQL это не упоминается, или я посмотрел слишком быстро и пропустил. Он просто говорит, что вы можете добавить столько ADD / DROP, сколько хотите, в одном операторе, без каких-либо упомянутых ограничений. Так что если вы правы, то об этом стоит упомянуть в документе. В любом случае, я был бы признателен, если автор вопроса предоставит MCVE

Alexey 10.01.2019 10:34

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

wchiquito 10.01.2019 11:18

@Alexey извините, что я не могу вам с этим помочь, так как я не знаю о функциональности db-fiddle и о том, как она работает.

VipiN Negi 10.01.2019 11:23
db-fiddle с двумя примерами.
wchiquito 10.01.2019 11:37
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
6
61
0

Другие вопросы по теме