koshi_waru
@koshi_waru

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

複数カラムを追加・削除時を1文にする際の記述について

Q&A

Closed

解決(知りたい)事までの流れ

まず動作環境としては、
mariadb:v10.6.12
Linux(WSL)上にローカルDBとしてmariadbを置いており、
それをA5:SQL Mk-2で接続してSQLを流しています。

 
複数カラムを追加・削除時にSQLを1文で書こうとした際の
記述の仕方について、調べていました。

 
以下該当SQLと詳細です。

ALTER TABLE `table` ADD COLUMN `column1` int(1) NOT NULL DEFAULT `0`;
ALTER TABLE `table` ADD COLUMN `column2` varchar(255) NOT NULL DEFAULT 'neko';

ALTER TABLE `table` DROP COLUMN `column1`;
ALTER TABLE `table` DROP COLUMN `column2`;

この2つを1文で書くと

ALTER TABLE `table` ADD COLUMN `column1` int(1) NOT NULL DEFAULT `0`,
                    ADD COLUMN `column2` varchar(255) NOT NULL DEFAULT 'neko';

ALTER TABLE `table` DROP COLUMN `column1`,
                    DROP COLUMN `column2`;

となります。

上記の1文にしたものを更に省略すると

ALTER TABLE `table` ADD(
    `column1` int(1) NOT NULL DEFAULT `0`,
    `column2` varchar(255) NOT NULL DEFAULT 'neko');

と追加の方は出来るのですが、削除の方は下記のエラーが出てしまいます。

#42000You have an error in your SQL syntax; 
check the manual that corresponds to your MariaDB server version for the right syntax to use near '(`column1`,`column2`)'

やったこと

ALTER TABLE `table` DROP(
    `column1`,
    `column2`);

ALTER TABLE `table` DROP COLUMN(
    `column1`,
    `column2`);

知りたいこと

記述が足りないだけで上記のような形で実行することは出来るのか知りたいです。
また、出来ない場合は、なぜ出来ないのか或いは何が違うのかを知りたいです。
よろしくお願いいたします。

0

2Answer

DROPの方はおそらく不可能ですね。
ALTER TABLEの定義は以下となっています。

ALTER [ONLINE] [IGNORE] TABLE [IF EXISTS] tbl_name
    [WAIT n | NOWAIT]
    alter_specification [, alter_specification] ...

alter_specification:
    table_option ...
(中略)
  | ADD [COLUMN] [IF NOT EXISTS] (col_name column_definition,...)
(中略)
  | DROP [COLUMN] [IF EXISTS] col_name [RESTRICT|CASCADE]
  | DROP PRIMARY KEY
  | DROP {INDEX|KEY} [IF EXISTS] index_name
  | DROP FOREIGN KEY [IF EXISTS] fk_symbol
  | DROP CONSTRAINT [IF EXISTS] constraint_name

ADDの方は()で複数条件を書けるようですが、DROPの方はそのような定義がありませんでした。

1Like

Comments

  1. @koshi_waru

    Questioner

    @UMA9626 さん
    お答え頂きありがとうございます。
    やはり定義的に書けないですか…。
    なぜ書けないようにしているかという点は気になりますが、
    それはある程度、自身の中でまとまってから意見交換なりで投稿します。
    ありがとうございました。

↓これでできませんか?

ALTER TABLE `table` DROP COLUMN (column1, column2);

COLUMN(の間にスペースが必要です!!

1Like

Comments

  1. 訂正します。

    やっぱり、上の書き方はできないようです。
    ↓この書き方になります。

    ALTER TABLE `table` DROP COLUMN column1, DROP COLUMN column2;
    
  2. @koshi_waru

    Questioner

    @nak435 さん
    コメントありがとうございます。
    やはり、1つずつ書いていくしかなさそうですね
    検証までして頂いたみたいでありがとうございます。

Your answer might help someone💌