MySQLの特定の列の後に複数の列を追加する


361

テーブルに複数の列を追加する必要がありますが、という列のに列を配置しますlastname

私はこれを試しました:

ALTER TABLE `users` ADD COLUMN
(
    `count` smallint(6) NOT NULL,
    `log` varchar(12) NOT NULL,
    `status` int(10) unsigned NOT NULL
) 
AFTER `lastname`;

私はこのエラーを受け取ります:

SQL構文にエラーがあります。MySQLサーバーのバージョンに対応するマニュアルで、lastname7行目でnear ')AFTER ' を使用するための正しい構文を確認してください。


このようなクエリでAFTERを使用するにはどうすればよいですか?


5
何の方言を話しているの?私にはmysqlのように見えます。しかし、ALTER TABLE構文は方言によって少し異なります。
Damien_The_Unbeliever 2013


1
追加する各列にAFTERキーワードが必要だと思います。それが3つすべてをAFTER lastnameにする必要があるのか​​、新しい列ごとに個別のALTER TABLEステートメントにする必要があるのか​​は、確かではありません。
Zec、2013

回答:


728

これを試して

ALTER TABLE users
ADD COLUMN `count` SMALLINT(6) NOT NULL AFTER `lastname`,
ADD COLUMN `log` VARCHAR(12) NOT NULL AFTER `count`,
ADD COLUMN `status` INT(10) UNSIGNED NOT NULL AFTER `log`;

構文を確認してください


6
[ 付加情報として多重] ADDALTERDROP、及びCHANGE句は、単一で許可されALTER TABLE、カンマで区切られた文。これは、標準SQL に対するMySQL拡張であり、ALTER TABLEステートメントごとに各句の1つのみを許可します。
informatik01

@AyyappanこれをSQLサーバーで実行できますか?
Roshan

77

特定のフィールドの後に単一の列を追加する場合は、次のMySQLクエリが機能するはずです。

ALTER TABLE users
    ADD COLUMN count SMALLINT(6) NOT NULL
    AFTER lastname

複数の列を追加する場合は、列ごとに「ADD」コマンドを使用する必要があります。これは、これに対するMySQLクエリです。

ALTER TABLE users
    ADD COLUMN count SMALLINT(6) NOT NULL,
    ADD COLUMN log VARCHAR(12) NOT NULL,
    ADD COLUMN status INT(10) UNSIGNED NOT NULL
    AFTER lastname

注意点

2番目の方法では、最後のADD COLUMN が実際にテーブルに追加する最初の列である必要があります。

例えば:あなたが追加したい場合はcountlogstatus後に正確な順序でlastname、その構文は、実際に次のようになります。

ALTER TABLE users
    ADD COLUMN log VARCHAR(12) NOT NULL AFTER lastname,
    ADD COLUMN status INT(10) UNSIGNED NOT NULL AFTER lastname,
    ADD COLUMN count SMALLINT(6) NOT NULL AFTER lastname

3
2番目のバージョンは、私にとっては完全にうまくいきました。MySql 5.5.25を使用しています。
ノーマン

コードの最後のビットは、順番に列を追加んcountlogstatusまたはcountstatuslog
Sarfaraaz 2015

1
注: 'AFTER lastname'ビットを追加しない場合、その変更テーブルリストに配置した最後の列が最初になる順序は、実際には適用されません。したがって、ALTER TABLE table ADD COLUMN blah1を実行すると、ADD COLUMN blah2になります。( 'AFTER'句がないことに注意してください)、列blah1が最初に追加され、次にblah2が追加されます。
Hongyi Li 2016

10

を使用して、カンマで複数の列名を指定することはできませんADD COLUMNADD COLUMN新しい列を定義するたびに言及する必要があります。


4
私は+1しましたが、これは承認された回答へのコメントでなければなりません
mjsarfatti

9

これは正しいです:

ALTER TABLE `users`
    ADD COLUMN `count` SMALLINT(6) NOT NULL AFTER `lastname`,
    ADD COLUMN `log` VARCHAR(12) NOT NULL AFTER `count`,
    ADD COLUMN `status` INT(10) UNSIGNED NOT NULL AFTER `log`;

3
ALTER TABLE `users` ADD COLUMN
`COLUMN NAME` DATATYPE(SIZE) AFTER `EXISTING COLUMN NAME`;

あなたはこれでそれを行うことができ、私にとってはうまくいきます。


1

1つの可能性は、テーブル内の列の並べ替えを気にせず、列を追加して変更することです。次に、列が必要な順序であるビューを作成します-順序が本当に重要であると仮定します。ビューは簡単に変更でき、必要な順序を反映できます。順序がプログラムアプリケーションにとって重要であるとは思えないので、ビューは、それが重要である可能性のある手動クエリには十分であるはずです。


4
2セントを追加する場合、テーブルの列でも行でも「配置」は重要ではありません。スプレッドシートは場所を使用して検索しますが、データベースは検索しません。
マイクS.

1

ALTER TABLE listingADD countINT(5)、ADD logVARCHAR(200)、ADD statusVARCHAR(20)AFTER stat

良い結果が得られます。


0

これは私にとってはうまくいきます:

ALTER TABLE 'users'
ADD COLUMN 'count' SMALLINT(6) NOT NULL AFTER 'lastname',
ADD COLUMN 'log' VARCHAR(12) NOT NULL AFTER 'count',
ADD COLUMN 'status' INT(10) UNSIGNED NOT NULL AFTER 'log';

投票を得るためにコメントを盗む。その仲間をしないでください。
MBouwman


0

または:

ALTER TABLE users
ADD COLUMN `status` INT(10) UNSIGNED NOT NULL AFTER `lastname`,
ADD COLUMN `log` VARCHAR(12) NOT NULL AFTER `lastname`,
ADD COLUMN `count` SMALLINT(6) NOT NULL AFTER `lastname`;

AFTERステートメントを効率化しながら、必要な順序でそれらを配置します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.