Я смог добавить новые столбцы один за другим в одном операторе. например, для
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'
Есть ли возможность совершать такие действия?
Если вы измените оператор на ALTER TABLE mytable ADD b VARCHAR (30), DROP a; затем a удаляется и добавляется b, но в конце добавляется b - возможно, не то, что вы хотите. Я полагаю, что синтаксический анализатор распознает, что a будет удален в вашем операторе, и не знает, где разместить b. Если вы укажете другой столбец для b, который будет помещен после оператора alter, это будет сделано.
@ P.Salmon, это интересно, потому что в справочнике MySQL это не упоминается, или я посмотрел слишком быстро и пропустил. Он просто говорит, что вы можете добавить столько ADD / DROP, сколько хотите, в одном операторе, без каких-либо упомянутых ограничений. Так что если вы правы, то об этом стоит упомянуть в документе. В любом случае, я был бы признателен, если автор вопроса предоставит MCVE
Похоже, что причина в порядке внутреннего выполнения инструкций, то есть кажется, что сначала выполняется DROP, а затем ADD, в ADD больше не существует a.
@Alexey извините, что я не могу вам с этим помочь, так как я не знаю о функциональности db-fiddle и о том, как она работает.






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